1.1 --- a/imiptools/handlers/common.py Tue Oct 27 00:26:59 2015 +0100
1.2 +++ b/imiptools/handlers/common.py Tue Oct 27 17:17:46 2015 +0100
1.3 @@ -22,12 +22,46 @@
1.4 from imiptools.data import get_address, get_uri, make_freebusy, to_part, \
1.5 uri_dict
1.6 from imiptools.dates import format_datetime
1.7 -from imiptools.period import Period
1.8 +from imiptools.period import FreeBusyPeriod, Period, replace_overlapping
1.9
1.10 class CommonFreebusy:
1.11
1.12 "Common free/busy mix-in."
1.13
1.14 + def _record_freebusy(self, from_organiser=True):
1.15 +
1.16 + """
1.17 + Record free/busy information for a message originating from an organiser
1.18 + if 'from_organiser' is set to a true value.
1.19 + """
1.20 +
1.21 + if from_organiser:
1.22 + organiser_item = self.require_organiser(from_organiser)
1.23 + if not organiser_item:
1.24 + return
1.25 +
1.26 + senders = [organiser_item]
1.27 + else:
1.28 + oa = self.require_organiser_and_attendees(from_organiser)
1.29 + if not oa:
1.30 + return
1.31 +
1.32 + organiser_item, attendees = oa
1.33 + senders = attendees.items()
1.34 +
1.35 + if not senders:
1.36 + return
1.37 +
1.38 + freebusy = [FreeBusyPeriod(p.get_start_point(), p.get_end_point()) for p in self.obj.get_period_values("FREEBUSY")]
1.39 + dtstart = self.obj.get_datetime("DTSTART")
1.40 + dtend = self.obj.get_datetime("DTEND")
1.41 + period = Period(dtstart, dtend, self.get_tzid())
1.42 +
1.43 + for sender, sender_attr in senders:
1.44 + stored_freebusy = self.store.get_freebusy_for_other(self.user, sender)
1.45 + replace_overlapping(stored_freebusy, period, freebusy)
1.46 + self.store.set_freebusy_for_other(self.user, stored_freebusy, sender)
1.47 +
1.48 def request(self):
1.49
1.50 """
2.1 --- a/imiptools/handlers/person.py Tue Oct 27 00:26:59 2015 +0100
2.2 +++ b/imiptools/handlers/person.py Tue Oct 27 17:17:46 2015 +0100
2.3 @@ -22,7 +22,6 @@
2.4 from imiptools.data import get_address, uri_dict
2.5 from imiptools.handlers import Handler
2.6 from imiptools.handlers.common import CommonFreebusy, CommonEvent
2.7 -from imiptools.period import FreeBusyPeriod, Period, replace_overlapping
2.8
2.9 class PersonHandler(CommonEvent, Handler):
2.10
2.11 @@ -297,45 +296,7 @@
2.12 if self._process(self._schedule_for_attendee, queue=True):
2.13 return self.wrap("An event invitation has been received.")
2.14
2.15 -class PersonFreebusy(CommonFreebusy, Handler):
2.16 -
2.17 - "Free/busy handling mechanisms specific to people."
2.18 -
2.19 - def _record_freebusy(self, from_organiser=True):
2.20 -
2.21 - """
2.22 - Record free/busy information for a message originating from an organiser
2.23 - if 'from_organiser' is set to a true value.
2.24 - """
2.25 -
2.26 - if from_organiser:
2.27 - organiser_item = self.require_organiser(from_organiser)
2.28 - if not organiser_item:
2.29 - return
2.30 -
2.31 - senders = [organiser_item]
2.32 - else:
2.33 - oa = self.require_organiser_and_attendees(from_organiser)
2.34 - if not oa:
2.35 - return
2.36 -
2.37 - organiser_item, attendees = oa
2.38 - senders = attendees.items()
2.39 -
2.40 - if not senders:
2.41 - return
2.42 -
2.43 - freebusy = [FreeBusyPeriod(p.get_start_point(), p.get_end_point()) for p in self.obj.get_period_values("FREEBUSY")]
2.44 - dtstart = self.obj.get_datetime("DTSTART")
2.45 - dtend = self.obj.get_datetime("DTEND")
2.46 - period = Period(dtstart, dtend, self.get_tzid())
2.47 -
2.48 - for sender, sender_attr in senders:
2.49 - stored_freebusy = self.store.get_freebusy_for_other(self.user, sender)
2.50 - replace_overlapping(stored_freebusy, period, freebusy)
2.51 - self.store.set_freebusy_for_other(self.user, stored_freebusy, sender)
2.52 -
2.53 -class Freebusy(PersonFreebusy):
2.54 +class Freebusy(CommonFreebusy, Handler):
2.55
2.56 "A free/busy handler."
2.57
3.1 --- a/imiptools/handlers/resource.py Tue Oct 27 00:26:59 2015 +0100
3.2 +++ b/imiptools/handlers/resource.py Tue Oct 27 17:17:46 2015 +0100
3.3 @@ -243,7 +243,7 @@
3.4
3.5 "Resources ignore generally published free/busy information."
3.6
3.7 - pass
3.8 + self._record_freebusy(from_organiser=True)
3.9
3.10 def reply(self):
3.11