1.1 --- a/imiptools/__init__.py Mon Feb 02 17:38:01 2015 +0100
1.2 +++ b/imiptools/__init__.py Mon Feb 02 18:05:31 2015 +0100
1.3 @@ -80,16 +80,14 @@
1.4 may be constructed according to individual preferences.
1.5 """
1.6
1.7 - all_responses = []
1.8 + handlers = dict([(name, cls(senders, recipient, self.messenger)) for name, cls in self.handlers])
1.9 handled = False
1.10
1.11 - handlers = dict([(name, cls(senders, recipient, self.messenger)) for name, cls in self.handlers])
1.12 -
1.13 for part in msg.walk():
1.14 if part.get_content_type() in itip_content_types and \
1.15 - part.get_param("method"):
1.16 + part.get_param("method"):
1.17
1.18 - all_responses += handle_itip_part(part, handlers)
1.19 + handle_itip_part(part, handlers)
1.20 handled = True
1.21
1.22 # When processing outgoing messages, no replies or deliveries are
1.23 @@ -98,6 +96,12 @@
1.24 if outgoing_only:
1.25 return
1.26
1.27 + # Get responses from the handlers.
1.28 +
1.29 + all_responses = []
1.30 + for handler in handlers.values():
1.31 + all_responses += handler.get_results()
1.32 +
1.33 # Pack any returned parts into messages.
1.34
1.35 if all_responses:
2.1 --- a/imiptools/content.py Mon Feb 02 17:38:01 2015 +0100
2.2 +++ b/imiptools/content.py Mon Feb 02 18:05:31 2015 +0100
2.3 @@ -153,7 +153,7 @@
2.4 # Ignore the part if not a calendar object.
2.5
2.6 if not itip:
2.7 - return []
2.8 + return
2.9
2.10 # Require consistency between declared and employed methods.
2.11
2.12 @@ -176,18 +176,7 @@
2.13 # Dispatch to a handler and obtain any response.
2.14
2.15 handler.set_object(Object({name : item}))
2.16 - results = methods[method](handler)()
2.17 -
2.18 - # Aggregate responses for a single message.
2.19 -
2.20 - if results:
2.21 - for result in results:
2.22 - outgoing_recipients, part = result
2.23 - all_results.append((outgoing_recipients, part))
2.24 -
2.25 - return all_results
2.26 -
2.27 - return []
2.28 + methods[method](handler)()
2.29
2.30 # References to the Web interface.
2.31
2.32 @@ -213,6 +202,9 @@
2.33 self.recipient = recipient and get_address(recipient)
2.34 self.messenger = messenger
2.35
2.36 + self.results = []
2.37 + self.outgoing_methods = set()
2.38 +
2.39 self.obj = None
2.40 self.uid = None
2.41 self.sequence = None
2.42 @@ -242,7 +234,26 @@
2.43 "message, you may view the details here:\n\n%s" %
2.44 get_object_url(self.uid))
2.45
2.46 - return [(None, MIMEText("\n".join(texts)))]
2.47 + return self.add_result(None, None, MIMEText("\n".join(texts)))
2.48 +
2.49 + # Result registration.
2.50 +
2.51 + def add_result(self, method, outgoing_recipients, part):
2.52 +
2.53 + """
2.54 + Record a result having the given 'method', 'outgoing_recipients' and
2.55 + message part.
2.56 + """
2.57 +
2.58 + if outgoing_recipients:
2.59 + self.outgoing_methods.add(method)
2.60 + self.results.append((outgoing_recipients, part))
2.61 +
2.62 + def get_results(self):
2.63 + return self.results
2.64 +
2.65 + def get_outgoing_methods(self):
2.66 + return self.outgoing_methods
2.67
2.68 # Access to calendar structures and other data.
2.69
3.1 --- a/imiptools/handlers/common.py Mon Feb 02 17:38:01 2015 +0100
3.2 +++ b/imiptools/handlers/common.py Mon Feb 02 18:05:31 2015 +0100
3.3 @@ -34,7 +34,7 @@
3.4
3.5 oa = self.require_organiser_and_attendees()
3.6 if not oa:
3.7 - return None
3.8 + return
3.9
3.10 (organiser, organiser_attr), attendees = oa
3.11
3.12 @@ -51,6 +51,6 @@
3.13
3.14 # Return the reply.
3.15
3.16 - return [([get_address(organiser)], to_part("REPLY", responses))]
3.17 + self.add_result("REPLY", [get_address(organiser)], to_part("REPLY", responses))
3.18
3.19 # vim: tabstop=4 expandtab shiftwidth=4
4.1 --- a/imiptools/handlers/resource.py Mon Feb 02 17:38:01 2015 +0100
4.2 +++ b/imiptools/handlers/resource.py Mon Feb 02 18:05:31 2015 +0100
4.3 @@ -112,7 +112,6 @@
4.4 "Cancel attendance for attendees."
4.5
4.6 self._record_and_respond(self._cancel_for_attendee)
4.7 - return None
4.8
4.9 def counter(self):
4.10
4.11 @@ -152,9 +151,7 @@
4.12
4.13 response = self._record_and_respond(self._schedule_for_attendee)
4.14 if response:
4.15 - return [(map(get_address, self.obj.get_values("ORGANIZER")), to_part("REPLY", response))]
4.16 - else:
4.17 - return None
4.18 + self.add_result("REPLY", map(get_address, self.obj.get_values("ORGANIZER")), to_part("REPLY", response))
4.19
4.20 class Freebusy(ResourceHandler, CommonFreebusy):
4.21