Log In
New Account
  
Home My Page Project Cloud Code Snippets Project Openings Hermes
Summary Lists News SCM
1 class Friend():
2     """Encapsulate the data from a remote service.
3     
4        Copyright (c) Fredrik Wendt <fredrik@wendt.se> 2010.
5        Released under the Artistic Licence."""
7     
8     def __init__(self, name=None, source=None, props=None):
9         """ source is source service, such as LinkedIn """
10         self._attributes = {};
11         if name: self._set('fn', name)
12         self._multi_attributes = {}
13         self._source = source
14         if props:
15             for key in props:
16                 self._set(key, props[key])
17         
18     def __getitem__(self, key):
19         return self._safe_get(key)
20                               
21     def __unicode__(self):
22         return self.__repr__()
23     
24     def __repr__(self):
25         return "Friend %s" % self.get_name()
26     
27     # public accessors -----------------
28     
29     def add_url(self, url):
30         self._add('url', url)
31         
32     def get_birthday_date(self):
33         return self._safe_get('bday')
34     
35     def get_contact(self):
36         return self._safe_get('contact')
37     
38     def get_name(self):
39         return self._safe_get('fn')
40     
41     def get_source(self):
42         return self._source
43     
44     def set_source(self, source):
45         self._source = source
46     
47     def get_nickname(self):
48         return self._safe_get("nickname")
49     
50     def get_urls(self):
51         try: return self._multi_attributes['url'] 
52         except: return []
53         
54     def get_photo_url(self):
55         return self._safe_get('photo-url')
56     
57     def has_birthday_date(self):
58         return self._has('bday')
59     
60     def is_empty(self):
61         for a in self._attributes:
62             return False
63         for a in self._multi_attributes:
64             return False
65         return True
66     
67     def set_name(self, name):
68         self._set('fn', name)
69     
70     def set_nickname(self, nickname):
71         self._set('nickname', nickname)
72         
73     def set_birthday_date(self, date):
74         self._set('bday', date)
75         
76     def set_contact(self, contact):
77         self._set('contact', contact)
78         
79     def set_photo_url(self, url):
80         self._set('photo-url', url)
81     
82     def update_from_friend(self, other_friend, overwrite=False):
83         """
84         Overwrites any attributes in this friend, with attributes from other_friend
85         """
86         
87         self._attributes.update(other_friend._attributes)
88         
89         for key in other_friend._multi_attributes.keys():
90             for value in other_friend._multi_attributes[key]:
91                 self._add(key, value)
92      
93     def update_contact(self, contact, overwrite=False):
94         """
95         Updates the contact with information from this object,
96         without overwriting unless overwrite is set to True.
97         """
98         
99         # FIXME: currently we overwrite everything 
100         self._if_defined('photo-url', contact.set_photo)
101         self._if_defined('nickname', contact.set_nickname)
102         if self._multi_attributes.has_key('url'):
103             for url in self._multi_attributes['url']:
104                 contact.add_url(url)
106         def fixme(arg):
107             pass
108             #print "FIXME - birthday date needs to be parsed/fixed %s before calling contact.set_birthday" % arg
109         self._if_defined('bday', fixme)
111     # private helpers -----------------------
112     #
113     def _add(self, key, value):
114         if value is not None:
115             if not self._multi_attributes.has_key(key):
116                 self._multi_attributes[key] = []
117 #            print "%s ADD %s to %s" % (self, key, value)
118             self._multi_attributes[key].append(value)
119     
120     def _contains(self, key, value):
121         if self._attributes.has_key(key):
122             return value == self._attributes[key]
123         if self._multi_attributes.has_key(key):
124             return value in self._multi_attributes[key]
125         return False
126     
127     def _if_defined(self, key, callback):
128         if self._attributes.has_key(key):
129             callback(self._attributes[key])
130     
131     def _has(self, key):
132         return self._attributes.has_key(key) or self._multi_attributes.has_key(key)
133     
134     def _safe_get(self, key):
135         try: return self._attributes[key]
136         except: return None
137         
138     def _set(self, key, value):
139         if value is not None:
140 #            print "%s SET %s to %s" % (self, key, value)
141             self._attributes[key] = value
142     

Terms of Use    Privacy Policy    Contribution Guidelines    Feedback

Powered By GForge Collaborative Development Environment