# HG changeset patch # User Paul Boddie # Date 1445962666 -3600 # Node ID 531b3975a2b20ebe7c6b7e09173082cc54bd0ebe # Parent eb7a1208adad82f557305a49ad4275dac6d5f266 Allow resources to collect free/busy information published by others. diff -r eb7a1208adad -r 531b3975a2b2 imiptools/handlers/common.py --- a/imiptools/handlers/common.py Tue Oct 27 00:26:59 2015 +0100 +++ b/imiptools/handlers/common.py Tue Oct 27 17:17:46 2015 +0100 @@ -22,12 +22,46 @@ from imiptools.data import get_address, get_uri, make_freebusy, to_part, \ uri_dict from imiptools.dates import format_datetime -from imiptools.period import Period +from imiptools.period import FreeBusyPeriod, Period, replace_overlapping class CommonFreebusy: "Common free/busy mix-in." + 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(self.user, sender) + replace_overlapping(stored_freebusy, period, freebusy) + self.store.set_freebusy_for_other(self.user, stored_freebusy, sender) + def request(self): """ diff -r eb7a1208adad -r 531b3975a2b2 imiptools/handlers/person.py --- a/imiptools/handlers/person.py Tue Oct 27 00:26:59 2015 +0100 +++ b/imiptools/handlers/person.py Tue Oct 27 17:17:46 2015 +0100 @@ -22,7 +22,6 @@ from imiptools.data import get_address, uri_dict from imiptools.handlers import Handler from imiptools.handlers.common import CommonFreebusy, CommonEvent -from imiptools.period import FreeBusyPeriod, Period, replace_overlapping class PersonHandler(CommonEvent, Handler): @@ -297,45 +296,7 @@ if self._process(self._schedule_for_attendee, queue=True): return self.wrap("An event invitation has been received.") -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(self.user, sender) - replace_overlapping(stored_freebusy, period, freebusy) - self.store.set_freebusy_for_other(self.user, stored_freebusy, sender) - -class Freebusy(PersonFreebusy): +class Freebusy(CommonFreebusy, Handler): "A free/busy handler." diff -r eb7a1208adad -r 531b3975a2b2 imiptools/handlers/resource.py --- a/imiptools/handlers/resource.py Tue Oct 27 00:26:59 2015 +0100 +++ b/imiptools/handlers/resource.py Tue Oct 27 17:17:46 2015 +0100 @@ -243,7 +243,7 @@ "Resources ignore generally published free/busy information." - pass + self._record_freebusy(from_organiser=True) def reply(self):