# HG changeset patch # User Paul Boddie # Date 1441985516 -7200 # Node ID 6d9042f5bbcbf40f23ec9b4702d87a48230d51de # Parent a89c11087c5e9aec918b7b9bfddb3eea451c8867 Reordered base classes to expose the appropriate is_usable methods, reorganising the resource handler classes. diff -r a89c11087c5e -r 6d9042f5bbcb imiptools/handlers/person.py --- a/imiptools/handlers/person.py Fri Sep 11 17:30:32 2015 +0200 +++ b/imiptools/handlers/person.py Fri Sep 11 17:31:56 2015 +0200 @@ -24,9 +24,9 @@ from imiptools.handlers.common import CommonFreebusy, CommonEvent from imiptools.period import FreeBusyPeriod, Period, replace_overlapping -class PersonHandler(Handler, CommonEvent): +class PersonHandler(CommonEvent, Handler): - "Handling mechanisms specific to people." + "Event handling mechanisms specific to people." def _add(self, queue=True): @@ -137,43 +137,6 @@ return True - def _record_freebusy(self, from_organiser=True): - - """ - Record free/busy information for a message originating from an organiser - if 'from_organiser' is set to a true value. - """ - - if from_organiser: - organiser_item = self.require_organiser(from_organiser) - if not organiser_item: - return - - senders = [organiser_item] - else: - oa = self.require_organiser_and_attendees(from_organiser) - if not oa: - return - - organiser_item, attendees = oa - senders = attendees.items() - - if not senders: - return - - freebusy = [FreeBusyPeriod(p.get_start_point(), p.get_end_point()) for p in self.obj.get_period_values("FREEBUSY")] - dtstart = self.obj.get_datetime("DTSTART") - dtend = self.obj.get_datetime("DTEND") - period = Period(dtstart, dtend, self.get_tzid()) - - for sender, sender_attr in senders: - stored_freebusy = self.store.get_freebusy_for_other_for_update(self.user, sender) - try: - replace_overlapping(stored_freebusy, period, freebusy) - self.store.set_freebusy_for_other_in_update(self.user, stored_freebusy, sender) - finally: - self.store.release_freebusy(self.user) - def _refresh(self): """ @@ -294,7 +257,48 @@ if self._record(from_organiser=True, queue=True): return self.wrap("An event invitation has been received.") -class Freebusy(PersonHandler, CommonFreebusy): +class PersonFreebusy(CommonFreebusy, Handler): + + "Free/busy handling mechanisms specific to people." + + def _record_freebusy(self, from_organiser=True): + + """ + Record free/busy information for a message originating from an organiser + if 'from_organiser' is set to a true value. + """ + + if from_organiser: + organiser_item = self.require_organiser(from_organiser) + if not organiser_item: + return + + senders = [organiser_item] + else: + oa = self.require_organiser_and_attendees(from_organiser) + if not oa: + return + + organiser_item, attendees = oa + senders = attendees.items() + + if not senders: + return + + freebusy = [FreeBusyPeriod(p.get_start_point(), p.get_end_point()) for p in self.obj.get_period_values("FREEBUSY")] + dtstart = self.obj.get_datetime("DTSTART") + dtend = self.obj.get_datetime("DTEND") + period = Period(dtstart, dtend, self.get_tzid()) + + for sender, sender_attr in senders: + stored_freebusy = self.store.get_freebusy_for_other_for_update(self.user, sender) + try: + replace_overlapping(stored_freebusy, period, freebusy) + self.store.set_freebusy_for_other_in_update(self.user, stored_freebusy, sender) + finally: + self.store.release_freebusy(self.user) + +class Freebusy(PersonFreebusy): "A free/busy handler." diff -r a89c11087c5e -r 6d9042f5bbcb imiptools/handlers/person_outgoing.py --- a/imiptools/handlers/person_outgoing.py Fri Sep 11 17:30:32 2015 +0200 +++ b/imiptools/handlers/person_outgoing.py Fri Sep 11 17:31:56 2015 +0200 @@ -25,7 +25,7 @@ from imiptools.handlers import Handler from imiptools.handlers.common import CommonEvent -class PersonHandler(Handler, CommonEvent): +class PersonHandler(CommonEvent, Handler): "Handling mechanisms specific to people." diff -r a89c11087c5e -r 6d9042f5bbcb imiptools/handlers/resource.py --- a/imiptools/handlers/resource.py Fri Sep 11 17:30:32 2015 +0200 +++ b/imiptools/handlers/resource.py Fri Sep 11 17:31:56 2015 +0200 @@ -24,7 +24,7 @@ from imiptools.handlers import Handler from imiptools.handlers.common import CommonFreebusy, CommonEvent -class ResourceHandler(Handler, CommonEvent): +class ResourceHandler(CommonEvent, Handler): "Handling mechanisms specific to resources." @@ -259,7 +259,7 @@ self._record_and_respond(self._schedule_for_attendee) -class Freebusy(Handler, CommonFreebusy): +class Freebusy(CommonFreebusy, Handler): "A free/busy handler."