1.1 --- a/imiptools/handlers/resource.py Tue Nov 25 18:25:44 2014 +0100
1.2 +++ b/imiptools/handlers/resource.py Tue Nov 25 18:26:30 2014 +0100
1.3 @@ -5,6 +5,7 @@
1.4 """
1.5
1.6 from imiptools.content import Handler, format_datetime, get_address, get_uri, to_part
1.7 +from imiptools.handlers.common import CommonFreebusy
1.8 from vCalendar import to_node
1.9
1.10 class Event(Handler):
1.11 @@ -100,7 +101,7 @@
1.12
1.13 return "REPLY", to_part("REPLY", calendar)
1.14
1.15 -class Freebusy(Handler):
1.16 +class Freebusy(Handler, CommonFreebusy):
1.17
1.18 "A free/busy handler."
1.19
1.20 @@ -113,50 +114,7 @@
1.21
1.22 pass
1.23
1.24 - def request(self):
1.25 -
1.26 - """
1.27 - Respond to a request by preparing a reply containing free/busy
1.28 - information for each indicated attendee.
1.29 - """
1.30 -
1.31 - oa = self.require_organiser_and_attendees()
1.32 - if not oa:
1.33 - return None
1.34 -
1.35 - (organiser, organiser_attr), attendees = organiser_item, attendees = oa
1.36 -
1.37 - # Validate the organiser, ignoring spoofed requests.
1.38 -
1.39 - if not self.validate_identities([organiser_item]):
1.40 - return None
1.41 -
1.42 - # Construct an appropriate fragment.
1.43 -
1.44 - calendar = []
1.45 - cwrite = calendar.append
1.46 -
1.47 - # Get the details for each attendee.
1.48 -
1.49 - for attendee, attendee_attr in attendees.items():
1.50 - freebusy = self.store.get_freebusy(attendee)
1.51 -
1.52 - record = []
1.53 - rwrite = record.append
1.54 -
1.55 - rwrite(("ORGANIZER", organiser_attr, organiser))
1.56 - rwrite(("ATTENDEE", attendee_attr, attendee))
1.57 - rwrite(("UID", {}, self.uid))
1.58 -
1.59 - if freebusy:
1.60 - for start, end, uid in freebusy:
1.61 - rwrite(("FREEBUSY", {"FBTYPE" : "BUSY"}, [start, end]))
1.62 -
1.63 - cwrite(("VFREEBUSY", {}, record))
1.64 -
1.65 - # Return the reply.
1.66 -
1.67 - return "REPLY", to_part("REPLY", calendar)
1.68 + # request provided by CommonFreeBusy.request
1.69
1.70 class Journal(Handler):
1.71