3 def __init__(self, name, source=None):
4 """ source is source service, such as LinkedIn """
5 self._attributes = { "fn": name }
6 self._multi_attributes = {}
10 return self.__repr__()
13 return "Friend %s" % self._attributes['fn']
15 # public accessors -----------------
18 return self._attributes['fn']
20 def get_nickname(self):
21 return self._attributes["nickname"]
24 try: return self._multi_attributes['url']
27 def add_url(self, url):
31 for a in self._attributes:
33 for a in self._multi_attributes:
37 def has_birthday_date(self):
38 return self._has('bday')
40 def set_name(self, name):
43 def set_nickname(self, nickname):
44 self._set('nickname', nickname)
46 def set_birthday_date(self, date):
47 self._set('bday', date)
49 def set_photo_url(self, url):
50 self._set('photo-url', url)
52 def update(self, other_friend):
54 Overwrites any attributes in this friend, with attributes from other_friend
57 self._attributes.update(other_friend._attributes)
59 for key in other_friend._multi_attributes.keys():
60 for value in other_friend._multi_attributes[key]:
63 def update_contact(self, contact, overwrite=False):
65 Updates the contact with information from this object,
66 without overwriting unless overwrite is set to True.
69 # FIXME: currently we overwrite everything
70 self._if_defined('photo-url', contact.set_photo)
71 self._if_defined('nickname', contact.set_nickname)
72 if self._multi_attributes.has_key('url'):
73 for url in self._multi_attributes['url']:
78 #print "FIXME - birthday date needs to be parsed/fixed %s before calling contact.set_birthday" % arg
79 self._if_defined('bday', fixme)
81 # private helpers -----------------------
83 def _if_defined(self, key, callback):
84 if self._attributes.has_key(key):
85 callback(self._attributes[key])
87 def _set(self, key, value):
89 # print "%s SET %s to %s" % (self, key, value)
90 self._attributes[key] = value
92 def _add(self, key, value):
94 if not self._multi_attributes.has_key(key):
95 self._multi_attributes[key] = []
96 # print "%s ADD %s to %s" % (self, key, value)
97 self._multi_attributes[key].append(value)
100 return self._attributes.has_key(key) or self._multi_attributes.has_key(key)
102 def _contains(self, key, value):
103 if self._attributes.has_key(key):
104 return value == self._attributes[key]
105 if self._multi_attributes.has_key(key):
106 return value in self._multi_attributes[key]