1.1 --- a/imiptools/handlers/person.py Sat Jan 31 22:34:12 2015 +0100
1.2 +++ b/imiptools/handlers/person.py Sun Feb 01 01:59:37 2015 +0100
1.3 @@ -19,16 +19,16 @@
1.4 this program. If not, see <http://www.gnu.org/licenses/>.
1.5 """
1.6
1.7 -from imiptools.content import Handler, get_address, get_uri, to_part, uri_dict, uri_items
1.8 +from imiptools.content import Handler
1.9 +from imiptools.data import get_address, get_uri, uri_dict, uri_items
1.10 from imiptools.handlers.common import CommonFreebusy, SupportFreebusy
1.11 from imiptools.profile import Preferences
1.12 -from vCalendar import to_node
1.13
1.14 class PersonHandler(Handler):
1.15
1.16 "Handling mechanisms specific to people."
1.17
1.18 - def _record_and_deliver(self, objtype, from_organiser=True, queue=False, cancel=False):
1.19 + def _record_and_deliver(self, from_organiser=True, queue=False, cancel=False):
1.20
1.21 oa = self.require_organiser_and_attendees(from_organiser)
1.22 if not oa:
1.23 @@ -44,7 +44,7 @@
1.24
1.25 for attendee, attendee_attr in attendees.items():
1.26
1.27 - if not self.have_new_object(attendee, objtype):
1.28 + if not self.have_new_object(attendee):
1.29 continue
1.30
1.31 # Record other party free/busy information.
1.32 @@ -59,9 +59,7 @@
1.33
1.34 # Store the object and queue any request.
1.35
1.36 - self.store.set_event(attendee, self.uid, to_node(
1.37 - {objtype : [(self.details, {})]}
1.38 - ))
1.39 + self.store.set_event(attendee, self.uid, self.obj.to_node())
1.40
1.41 if queue:
1.42 self.store.queue_request(attendee, self.uid)
1.43 @@ -71,13 +69,13 @@
1.44 # As organiser, update attendance.
1.45
1.46 else:
1.47 - obj = self.get_object(organiser, objtype)
1.48 + obj = self.get_object(organiser)
1.49
1.50 - if obj and self.have_new_object(organiser, objtype, obj):
1.51 + if obj and self.have_new_object(organiser, obj=obj):
1.52
1.53 # Get attendee details in a usable form.
1.54
1.55 - attendee_map = uri_dict(self.get_value_map("ATTENDEE"))
1.56 + attendee_map = uri_dict(self.obj.get_value_map("ATTENDEE"))
1.57
1.58 for attendee, attendee_attr in attendees.items():
1.59
1.60 @@ -99,9 +97,7 @@
1.61
1.62 obj["ATTENDEE"] = attendee_map.items()
1.63
1.64 - self.store.set_event(organiser, self.uid, to_node(
1.65 - {objtype : [(obj, {})]}
1.66 - ))
1.67 + self.store.set_event(organiser, self.uid, obj.to_node())
1.68
1.69 return True
1.70
1.71 @@ -111,7 +107,7 @@
1.72
1.73 freebusy = []
1.74
1.75 - for value in self.get_values("FREEBUSY") or []:
1.76 + for value in self.obj.get_values("FREEBUSY") or []:
1.77 if not isinstance(value, list):
1.78 value = [value]
1.79 for v in value:
1.80 @@ -121,7 +117,7 @@
1.81 except ValueError:
1.82 pass
1.83
1.84 - for sender, sender_attr in uri_items(self.get_items(from_organiser and "ORGANIZER" or "ATTENDEE")):
1.85 + for sender, sender_attr in uri_items(self.obj.get_items(from_organiser and "ORGANIZER" or "ATTENDEE")):
1.86 self.store.set_freebusy_for_other(get_uri(self.recipient), freebusy, sender)
1.87
1.88 class Event(PersonHandler, SupportFreebusy):
1.89 @@ -138,7 +134,7 @@
1.90
1.91 "Queue a cancellation of any active event."
1.92
1.93 - self._record_and_deliver("VEVENT", from_organiser=True, queue=False, cancel=True)
1.94 + self._record_and_deliver(from_organiser=True, queue=False, cancel=True)
1.95 return self.wrap("A cancellation has been received.", link=False)
1.96
1.97 def counter(self):
1.98 @@ -157,28 +153,28 @@
1.99
1.100 "Register details of any relevant event."
1.101
1.102 - self._record_and_deliver("VEVENT", from_organiser=True, queue=False)
1.103 + self._record_and_deliver(from_organiser=True, queue=False)
1.104 return self.wrap("Details of an event have been received.")
1.105
1.106 def refresh(self):
1.107
1.108 "Update details of any active event."
1.109
1.110 - self._record_and_deliver("VEVENT", from_organiser=True, queue=False)
1.111 + self._record_and_deliver(from_organiser=True, queue=False)
1.112 return self.wrap("An event update has been received.")
1.113
1.114 def reply(self):
1.115
1.116 "Record replies and notify the recipient."
1.117
1.118 - self._record_and_deliver("VEVENT", from_organiser=False, queue=False)
1.119 + self._record_and_deliver(from_organiser=False, queue=False)
1.120 return self.wrap("A reply has been received.")
1.121
1.122 def request(self):
1.123
1.124 "Hold requests and notify the recipient."
1.125
1.126 - self._record_and_deliver("VEVENT", from_organiser=True, queue=True)
1.127 + self._record_and_deliver(from_organiser=True, queue=True)
1.128
1.129 # Produce free/busy information if configured to do so.
1.130
1.131 @@ -253,7 +249,7 @@
1.132
1.133 # NOTE: Register details of any relevant entry.
1.134
1.135 - self._record_and_deliver("VJOURNAL", from_organiser=True, queue=False)
1.136 + self._record_and_deliver(from_organiser=True, queue=False)
1.137 return self.wrap("Details of a journal entry have been received.")
1.138
1.139 class Todo(PersonHandler):
1.140 @@ -288,28 +284,28 @@
1.141
1.142 "Register details of any relevant item."
1.143
1.144 - self._record_and_deliver("VTODO", from_organiser=True, queue=False)
1.145 + self._record_and_deliver(from_organiser=True, queue=False)
1.146 return self.wrap("Details of an item have been received.")
1.147
1.148 def refresh(self):
1.149
1.150 "Update details of any active item."
1.151
1.152 - self._record_and_deliver("VTODO", from_organiser=True, queue=False)
1.153 + self._record_and_deliver(from_organiser=True, queue=False)
1.154 return self.wrap("An item update has been received.")
1.155
1.156 def reply(self):
1.157
1.158 "Record replies and notify the recipient."
1.159
1.160 - self._record_and_deliver("VTODO", from_organiser=False, queue=False)
1.161 + self._record_and_deliver(from_organiser=False, queue=False)
1.162 return self.wrap("A reply has been received.")
1.163
1.164 def request(self):
1.165
1.166 "Hold requests and notify the recipient."
1.167
1.168 - self._record_and_deliver("VTODO", from_organiser=True, queue=True)
1.169 + self._record_and_deliver(from_organiser=True, queue=True)
1.170 return self.wrap("A request has been received.")
1.171
1.172 # Handler registry.