cleaned up linked in service, added test
[hermes] / package / src / org / maemo / hermes / engine / friend.py
1 class Friend():
2     
3     def __init__(self, name, source=None):
4         """ source is source service, such as LinkedIn """
5         self._attributes = { "fn": name }
6         self._multi_attributes = {}
7         self._source = source 
8         
9     def __unicode__(self):
10         return self.__repr__()
11     
12     def __repr__(self):
13         return "Friend %s" % self._attributes['fn']
14     
15     # public accessors -----------------
16     
17     def get_name(self):
18         return self._attributes['fn']
19     
20     def get_nickname(self):
21         return self._attributes["nickname"]
22     
23     def get_urls(self):
24         try: return self._multi_attributes['url'] 
25         except: return []
26     
27     def add_url(self, url):
28         self._add('url', url)
29         
30     def is_empty(self):
31         for a in self._attributes:
32             return False
33         for a in self._multi_attributes:
34             return False
35         return True
36     
37     def has_birthday_date(self):
38         return self._has('bday')
39     
40     def set_name(self, name):
41         self._set('fn', name)
42     
43     def set_nickname(self, nickname):
44         self._set('nickname', nickname)
45         
46     def set_birthday_date(self, date):
47         self._set('bday', date)
48         
49     def set_photo_url(self, url):
50         self._set('photo-url', url)
51     
52     def update(self, other_friend):
53         """
54         Overwrites any attributes in this friend, with attributes from other_friend
55         """
56         
57         self._attributes.update(other_friend._attributes)
58         
59         for key in other_friend._multi_attributes.keys():
60             for value in other_friend._multi_attributes[key]:
61                 self._add(key, value)
62      
63     def update_contact(self, contact, overwrite=False):
64         """
65         Updates the contact with information from this object,
66         without overwriting unless overwrite is set to True.
67         """
68         
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']:
74                 contact.add_url(url)
75
76         def fixme(arg):
77             pass
78             #print "FIXME - birthday date needs to be parsed/fixed %s before calling contact.set_birthday" % arg
79         self._if_defined('bday', fixme)
80
81     # private helpers -----------------------
82     #
83     def _if_defined(self, key, callback):
84         if self._attributes.has_key(key):
85             callback(self._attributes[key])
86     
87     def _set(self, key, value):
88         if value is not None:
89 #            print "%s SET %s to %s" % (self, key, value)
90             self._attributes[key] = value
91     
92     def _add(self, key, value):
93         if value is not None:
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)
98     
99     def _has(self, key):
100         return self._attributes.has_key(key) or self._multi_attributes.has_key(key)
101     
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]
107         return False