access abook addressbook with curses

Fabian Braennstroem f.braennstroem at gmx.de
Mon Aug 14 02:51:39 EDT 2006


Hi Ben,
* Ben C <spamspam at spam.eggs> wrote:
> On 2006-08-08, Fabian Braennstroem <f.braennstroem at gmx.de> wrote:
>> Hi Ben,
>>
>> * Ben C <spamspam at spam.eggs> wrote:
>>> On 2006-08-06, Fabian Braennstroem <f.braennstroem at gmx.de> wrote:
>>>> Hi Ben,
>>>>
>>>> * Ben C <spamspam at spam.eggs> wrote:
>>>>> On 2006-08-05, Fabian Braennstroem <f.braennstroem at gmx.de> wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I want to get access to my abook address file with python.
>>>>>> Does anyone have some python lines to achive this using
>>>>>> curses? If not, maybe anybody has small python program doing
>>>>>> it with a gui!?
>>>>>
>>>>> You can just parse the abook addressbook with the ConfigParser, try
>>>>> this:
>>>>>
>>>>> import os
>>>>> from ConfigParser import *
>>>>>
>>>>> abook = ConfigParser()
>>>>> abook.read(os.environ["HOME"] + "/.abook/addressbook")
>>>>>
>>>>> for s in abook.sections():
>>>>>     print abook.items(s)
>>>>
>>>> Thanks! I found a different example too:
>>>>
>>>> import ConfigParser
>>>> import string
>>>>
>>>> config = ConfigParser.ConfigParser()
>>>>
>>>> config.read("/home/fab/.abook/addressbook")
>>>>
>>>> # print summary
>>>> print
>>>> for number in [2,200]:
>>>>     print string.upper(config.get(str(number), "email"))
>>>>     print string.upper(config.get(str(number), "name"))
>>>>     print string.upper(config.get(str(number), "city"))
>>>>     print string.upper(config.get(str(number), "address"))
>>>>
>>>> but the problem seems to be that abook does not write every
>>>> field, so I get an exception when there is a field missing:
>>>>
>>>> Traceback (most recent call last):
>>>>   File "configparser-example-1.py", line 13, in ?
>>>>     print string.upper(config.get(str(number), "city"))
>>>>   File "/usr/lib/python2.4/ConfigParser.py", line 520, in get
>>>>     raise NoOptionError(option, section)
>>>> ConfigParser.NoOptionError: No option 'city' in section: '2'
>>>>
>>>> Section 2 looks like:
>>>>
>>>> [2]
>>>> name=Andrs Gzi
>>>> email=anes.oi at ik.e
>>>> nick=oz
>>>>
>>>> Is there a workaround?
>>>
>>> You can construct the parser with a dictionary of defaults:
>>>
>>>     config = ConfigParser.ConfigParser({"city" : "unknown",
>>>         "zip" : "unknown"})
>>>
>>> that kind of thing.
>>>
>>> Or catch the exceptions. Or use config.options("2") to see what options
>>> exist in section 2 before you try to read them.
>>
>> Thanks! I will try it out!
>
> Looking at the bigger picture here, though, I may be giving you the
> wrong advice. Mutt just invokes abook to get the addresses I think,
> that's why you put
>
>     set query_command="abook --mutt-query '%s'"
>
> So you could do the same (if what you're trying to do is write a mutt
> clone in Python):
>
> import subprocess
>
> name = "Andrs"
> subprocess.Popen("abook --mutt-query " + name,
>     stdout=subprocess.PIPE, shell=True).communicate()[0]
>
> The difference is that this "leverages" abook to do the search, not just
> to store the data, which is a logical approach.
>
> On the other hand, this way, you require that abook is installed on the
> machine, which is no good if the object of the exercise is a portable
> Python-only solution.

The biggest problem is a missing and not allowed
abook installation. But thanks for your tips!

Greetings!
 Fabian




More information about the Python-list mailing list