Package conduit :: Package datatypes :: Module Contact
[hide private]

Source Code for Module conduit.datatypes.Contact

 1  import vobject  
 2  import conduit.datatypes.DataType as DataType 
3 -def parse_vcf(string):
4 """ 5 Parses a vcf string, potentially containing many vcards 6 @returns: A list of Contacts 7 """ 8 contacts = [] 9 for vobj in vobject.readComponents(string): 10 if vobj.behavior == vobject.vcard.VCard3_0: 11 contacts.append(Contact(vcard=vobj)) 12 return contacts
13
14 -class Contact(DataType.DataType):
15 """ 16 Very basic contact representation 17 @keyword vcard: A vobject.vcard.VCard3_0 instance 18 """ 19 _name_ = "contact"
20 - def __init__(self, **kwargs):
21 DataType.DataType.__init__(self) 22 self.vcard = kwargs.get('vcard',vobject.vCard()) 23 self.set_name(**kwargs)
24
25 - def set_from_vcard_string(self, string):
26 self.vcard = vobject.readOne(string)
27
28 - def get_vcard_string(self, version=2.1):
29 for prop in ('fn', 'n'): 30 if prop not in self.vcard.contents: 31 self.vcard.add(prop) 32 return self.vcard.serialize()
33
34 - def get_emails(self):
35 emails = [] 36 if 'email' in self.vcard.contents: 37 for email in self.vcard.contents['email']: 38 emails.append(email.value) 39 return emails
40
41 - def get_name(self):
42 #In order of preference, 1)formatted name, 2)name, 3)"" 43 #FIXME: Return dict of formattedName, givenName, familyName, etc 44 for attr in [self.vcard.fn, self.vcard.n]: 45 #because str() on a vobject.vcard.Name pads with whitespace 46 name = str(attr.value).strip() 47 if len(name) > 0: 48 return name 49 return ""
50
51 - def set_name(self, **kwargs):
52 #vcards must have one, and only one N and FN 53 fn = kwargs.get("formattedName","") 54 try: 55 self.vcard.fn 56 except AttributeError: 57 self.vcard.add('fn') 58 if fn: 59 self.vcard.fn.value = fn 60 61 g = kwargs.get("givenName","") 62 f = kwargs.get("familyName","") 63 try: 64 self.vcard.n 65 except AttributeError: 66 self.vcard.add('n') 67 if f or g: 68 self.vcard.n.value = vobject.vcard.Name(family=f,given=g)
69
70 - def set_emails(self, *args):
71 for address in args: 72 email = self.vcard.add('email') 73 email.value = address 74 email.type_param = 'INTERNET'
75
76 - def __getstate__(self):
77 data = DataType.DataType.__getstate__(self) 78 data['vcard'] = self.get_vcard_string() 79 return data
80
81 - def __setstate__(self, data):
82 self.set_from_vcard_string(data['vcard']) 83 DataType.DataType.__setstate__(self, data)
84
85 - def __str__(self):
86 return "Name: %s" % self.get_name()
87
88 - def get_hash(self):
89 return hash(self.get_vcard_string())
90