1.1 --- a/imipweb/resource.py Sat Sep 19 01:08:17 2015 +0200
1.2 +++ b/imipweb/resource.py Sat Sep 19 17:23:16 2015 +0200
1.3 @@ -20,7 +20,7 @@
1.4 """
1.5
1.6 from datetime import datetime
1.7 -from imiptools.client import Client
1.8 +from imiptools.client import Client, ClientForObject
1.9 from imiptools.data import get_uri, uri_values
1.10 from imiptools.dates import get_recurrence_start_point
1.11 from imiptools.period import remove_period, remove_affected_period
1.12 @@ -29,17 +29,21 @@
1.13 import imip_store
1.14 import markup
1.15
1.16 -class Resource(Client):
1.17 +class Resource:
1.18
1.19 - "A Web application resource and calendar client."
1.20 + "A Web application resource."
1.21
1.22 def __init__(self, resource=None):
1.23 +
1.24 + """
1.25 + Initialise a resource, allowing it to share the environment of any given
1.26 + existing 'resource'.
1.27 + """
1.28 +
1.29 self.encoding = "utf-8"
1.30 self.env = CGIEnvironment(self.encoding)
1.31
1.32 - user = self.env.get_user()
1.33 - Client.__init__(self, user and get_uri(user) or None)
1.34 -
1.35 + self.objects = {}
1.36 self.locale = None
1.37 self.requests = None
1.38
1.39 @@ -47,14 +51,6 @@
1.40 self.page = resource and resource.page or markup.page()
1.41 self.html_ids = None
1.42
1.43 - self.store = imip_store.FileStore()
1.44 - self.objects = {}
1.45 -
1.46 - try:
1.47 - self.publisher = imip_store.FilePublisher()
1.48 - except OSError:
1.49 - self.publisher = None
1.50 -
1.51 # Presentation methods.
1.52
1.53 def new_page(self, title):
1.54 @@ -208,55 +204,22 @@
1.55 def remove_event(self, uid, recurrenceid=None):
1.56 return self.store.remove_event(self.user, uid, recurrenceid)
1.57
1.58 - def update_freebusy(self, uid, recurrenceid, obj):
1.59 +class ResourceClient(Resource, Client):
1.60
1.61 - """
1.62 - Update stored free/busy details for the event with the given 'uid' and
1.63 - 'recurrenceid' having a representation of 'obj'.
1.64 - """
1.65 -
1.66 - is_only_organiser = self.user not in uri_values(obj.get_values("ATTENDEE"))
1.67 -
1.68 - freebusy = self.store.get_freebusy(self.user)
1.69 + "A Web application resource and calendar client."
1.70
1.71 - Client.update_freebusy(self, freebusy, self.get_periods(obj),
1.72 - is_only_organiser and "ORG" or obj.get_value("TRANSP"),
1.73 - uid, recurrenceid,
1.74 - obj.get_value("SUMMARY"),
1.75 - obj.get_value("ORGANIZER"))
1.76 -
1.77 - # Subtract any recurrences from the free/busy details of a parent
1.78 - # object.
1.79 -
1.80 - for recurrenceid in self._get_recurrences(uid):
1.81 - remove_affected_period(freebusy, uid, obj.get_recurrence_start_point(recurrenceid, self.get_tzid()))
1.82 + def __init__(self, resource=None):
1.83 + Resource.__init__(self, resource)
1.84 + user = self.env.get_user()
1.85 + Client.__init__(self, user and get_uri(user) or None)
1.86
1.87 - self.store.set_freebusy(self.user, freebusy)
1.88 - self.publish_freebusy(freebusy)
1.89 +class ResourceClientForObject(Resource, ClientForObject):
1.90
1.91 - # Update free/busy provider information if the event may recur
1.92 - # indefinitely.
1.93 -
1.94 - if obj.possibly_recurring_indefinitely():
1.95 - self.store.append_freebusy_provider(self.user, obj)
1.96 + "A Web application resource and calendar client for a specific object."
1.97
1.98 - def remove_from_freebusy(self, uid, recurrenceid=None):
1.99 - freebusy = self.store.get_freebusy(self.user)
1.100 - remove_period(freebusy, uid, recurrenceid)
1.101 - self.store.set_freebusy(self.user, freebusy)
1.102 - self.publish_freebusy(freebusy)
1.103 -
1.104 - # Update free/busy provider information if the event may recur
1.105 - # indefinitely.
1.106 -
1.107 - if obj.possibly_recurring_indefinitely():
1.108 - self.store.remove_freebusy_provider(self.user, obj)
1.109 -
1.110 - def publish_freebusy(self, freebusy):
1.111 -
1.112 - "Publish the details if configured to share them."
1.113 -
1.114 - if self.publisher and self.is_sharing() and self.is_publishing():
1.115 - self.publisher.set_freebusy(self.user, freebusy)
1.116 + def __init__(self, resource=None):
1.117 + Resource.__init__(self, resource)
1.118 + user = self.env.get_user()
1.119 + ClientForObject.__init__(self, None, user and get_uri(user) or None)
1.120
1.121 # vim: tabstop=4 expandtab shiftwidth=4