1.1 --- a/imiptools/client.py Thu May 12 17:51:10 2016 +0200
1.2 +++ b/imiptools/client.py Thu May 12 22:58:57 2016 +0200
1.3 @@ -21,8 +21,8 @@
1.4
1.5 from datetime import datetime, timedelta
1.6 from imiptools import config
1.7 -from imiptools.data import Object, get_address, get_uri, get_window_end, \
1.8 - is_new_object, make_freebusy, to_part, \
1.9 +from imiptools.data import Object, check_delegation, get_address, get_uri, \
1.10 + get_window_end, is_new_object, make_freebusy, to_part, \
1.11 uri_dict, uri_item, uri_items, uri_parts, uri_values
1.12 from imiptools.dates import check_permitted_values, format_datetime, get_default_timezone, \
1.13 get_duration, get_timestamp
1.14 @@ -270,7 +270,7 @@
1.15
1.16 user_attr = {}
1.17 self.update_sender(user_attr)
1.18 - return to_part("PUBLISH", [make_freebusy(freebusy, uid, self.user, user_attr)])
1.19 + return self.to_part("PUBLISH", [make_freebusy(freebusy, uid, self.user, user_attr)])
1.20
1.21 return None
1.22
1.23 @@ -301,6 +301,20 @@
1.24 else:
1.25 freebusy.update_freebusy(periods, transp, uid, recurrenceid, summary, organiser)
1.26
1.27 + # Preparation of content.
1.28 +
1.29 + def to_part(self, method, fragments):
1.30 +
1.31 + "Return an encoded MIME part for the given 'method' and 'fragments'."
1.32 +
1.33 + return to_part(method, fragments, line_length=config.CALENDAR_LINE_LENGTH)
1.34 +
1.35 + def object_to_part(self, method, obj):
1.36 +
1.37 + "Return an encoded MIME part for the given 'method' and 'obj'."
1.38 +
1.39 + return obj.to_part(method, line_length=config.CALENDAR_LINE_LENGTH)
1.40 +
1.41 # Preparation of messages communicating the state of events.
1.42
1.43 def get_message_parts(self, obj, method, attendee=None):
1.44 @@ -327,7 +341,7 @@
1.45 if not attendee or self.is_participating(attendee, obj=obj):
1.46 organiser, organiser_attr = uri_item(obj.get_item("ORGANIZER"))
1.47 self.update_sender(organiser_attr)
1.48 - responses.append(obj.to_part(method))
1.49 + responses.append(self.object_to_part(method, obj))
1.50 methods.add(method)
1.51
1.52 # Get recurrences for parent events.
1.53 @@ -350,7 +364,7 @@
1.54 if not attendee or self.is_participating(attendee, obj=obj):
1.55 organiser, organiser_attr = uri_item(obj.get_item("ORGANIZER"))
1.56 self.update_sender(organiser_attr)
1.57 - responses.append(obj.to_part(rmethod))
1.58 + responses.append(self.object_to_part(rmethod, obj))
1.59 methods.add(rmethod)
1.60
1.61 return methods, responses
1.62 @@ -455,7 +469,7 @@
1.63 continue
1.64 obj["RECURRENCE-ID"] = obj["DTSTART"] = [(format_datetime(p.get_start()), p.get_start_attr())]
1.65 obj["DTEND"] = [(format_datetime(p.get_end()), p.get_end_attr())]
1.66 - unscheduled_parts.append(obj.to_part("CANCEL"))
1.67 + unscheduled_parts.append(self.object_to_part("CANCEL", obj))
1.68
1.69 return unscheduled_parts
1.70
1.71 @@ -700,7 +714,7 @@
1.72 self.update_senders(obj=obj)
1.73 obj.update_dtstamp()
1.74 obj.update_sequence(False)
1.75 - self._send_message(get_address(self.user), [get_address(attendee)], [obj.to_part(method)], True)
1.76 + self._send_message(get_address(self.user), [get_address(attendee)], [self.object_to_part(method, obj)], True)
1.77 return True
1.78
1.79 def process_received_request(self, changed=False):
1.80 @@ -726,7 +740,8 @@
1.81
1.82 self.update_dtstamp()
1.83 self.update_sequence(False)
1.84 - self.send_message([self.obj.to_part(changed and "COUNTER" or "REPLY")], get_address(self.user), self.obj, False, True)
1.85 + self.send_message([self.object_to_part(changed and "COUNTER" or "REPLY", self.obj)],
1.86 + get_address(self.user), self.obj, False, True)
1.87 return True
1.88
1.89 def process_created_request(self, method, to_cancel=None, to_unschedule=None):
1.90 @@ -782,7 +797,7 @@
1.91
1.92 # Send a cancellation to all uninvited attendees.
1.93
1.94 - parts = [obj.to_part("CANCEL")]
1.95 + parts = [self.object_to_part("CANCEL", obj)]
1.96 self.send_message(parts, get_address(organiser), obj, True, False)
1.97
1.98 # Issue a CANCEL message to the user's address.