# HG changeset patch # User Paul Boddie # Date 1422894598 -3600 # Node ID 89aba75b757d1bfd52884eb84611c4a9cc9d5060 # Parent 3cdb81d7d909a19f09aed36c4c8f1680bcb8651e Fixed handler initialisation; changed part processing to use a handler dictionary, removing the get_fragments function and its use. diff -r 3cdb81d7d909 -r 89aba75b757d imiptools/content.py --- a/imiptools/content.py Mon Feb 02 17:25:20 2015 +0100 +++ b/imiptools/content.py Mon Feb 02 17:29:58 2015 +0100 @@ -24,7 +24,7 @@ from email.mime.text import MIMEText from imiptools.config import MANAGER_PATH, MANAGER_URL from imiptools.data import Object, parse_object, \ - get_address, get_fragments, get_uri, get_value, \ + get_address, get_uri, get_value, \ is_new_object, uri_dict, uri_item from imiptools.dates import * from imiptools.period import can_schedule, insert_period, remove_period @@ -142,6 +142,7 @@ (outgoing-recipients, message-part). """ + handlers = dict(handlers) method = part.get_param("method") # Decode the data and parse it. @@ -163,12 +164,19 @@ all_results = [] - for name, handler in handlers: - for fragment in get_fragments(itip, name): + for name, items in itip.items(): + + # Get a handler for the given section. + + handler = handlers.get(name) + if not handler: + continue + + for item in items: # Dispatch to a handler and obtain any response. - handler.set_object(Object(fragment)) + handler.set_object(Object({name : item})) results = methods[method](handler)() # Aggregate responses for a single message. @@ -202,14 +210,14 @@ 'recipient' of the object (if specifically indicated). """ - self.obj = None self.senders = senders and set(map(get_address, senders)) self.recipient = recipient and get_address(recipient) self.messenger = messenger - self.uid = self.obj.get_value("UID") - self.sequence = self.obj.get_value("SEQUENCE") - self.dtstamp = self.obj.get_value("DTSTAMP") + self.obj = None + self.uid = None + self.sequence = None + self.dtstamp = None self.store = imip_store.FileStore() @@ -220,6 +228,9 @@ def set_object(self, obj): self.obj = obj + self.uid = self.obj.get_value("UID") + self.sequence = self.obj.get_value("SEQUENCE") + self.dtstamp = self.obj.get_value("DTSTAMP") def wrap(self, text, link=True): diff -r 3cdb81d7d909 -r 89aba75b757d imiptools/data.py --- a/imiptools/data.py Mon Feb 02 17:25:20 2015 +0100 +++ b/imiptools/data.py Mon Feb 02 17:29:58 2015 +0100 @@ -162,19 +162,6 @@ # Structure access functions. -def get_fragments(d, name): - - """ - Return all fragments from 'd' with the given 'name'. Each fragment is thus - suitable for using to initialise Object instances. - """ - - fragments = [] - if d.has_key(name): - for value in d[name]: - fragments.append(dict([(name, value)])) - return fragments - def get_items(d, name, all=True): """