[CalendarServer-changes] [4886] CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Mon Dec 21 12:42:42 PST 2009


Revision: 4886
          http://trac.macosforge.org/projects/calendarserver/changeset/4886
Author:   cdaboo at apple.com
Date:     2009-12-21 12:42:42 -0800 (Mon, 21 Dec 2009)
Log Message:
-----------
Fix implicit partitioning behavior.

Modified Paths:
--------------
    CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/directory/principal.py
    CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/implicit.py
    CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/ischedule.py
    CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/scheduler.py

Modified: CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/directory/principal.py	2009-12-21 20:41:53 UTC (rev 4885)
+++ CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/directory/principal.py	2009-12-21 20:42:42 UTC (rev 4886)
@@ -479,7 +479,7 @@
 
         record = self.directory.recordWithUID(primaryUID)
 
-        primaryPrincipal = self.principalForRecord(record) if record.enabled else None
+        primaryPrincipal = self.principalForRecord(record) if record and record.enabled else None
         if primaryPrincipal is None:
             log.err("No principal found for UID: %s" % (name,))
             return None

Modified: CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/implicit.py
===================================================================
--- CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/implicit.py	2009-12-21 20:41:53 UTC (rev 4885)
+++ CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/implicit.py	2009-12-21 20:42:42 UTC (rev 4886)
@@ -317,7 +317,7 @@
         # Get some useful information from the calendar
         yield self.extractCalendarData()        
 
-        self.attendee = attendee.cuaddr
+        self.originator = self.attendee = attendee.cuaddr
         self.attendeePrincipal = attendee.principal
         
         result = (yield self.scheduleWithOrganizer())

Modified: CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/ischedule.py
===================================================================
--- CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/ischedule.py	2009-12-21 20:41:53 UTC (rev 4885)
+++ CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/ischedule.py	2009-12-21 20:42:42 UTC (rev 4886)
@@ -69,7 +69,7 @@
         # Do default match
         return super(ScheduleViaISchedule, cls).matchCalendarUserAddress(cuaddr)
 
-    def generateSchedulingResponses(self):
+    def generateSchedulingResponses(self, refreshOnly=False):
         """
         Generate scheduling responses for remote recipients.
         """
@@ -112,7 +112,7 @@
         # rather than serialize them.
         deferreds = []
         for server, recipients in groups.iteritems():
-            requestor = IScheduleRequest(self.scheduler, server, recipients, self.responses)
+            requestor = IScheduleRequest(self.scheduler, server, recipients, self.responses, refreshOnly)
             deferreds.append(requestor.doRequest())
 
         return DeferredList(deferreds)
@@ -131,12 +131,13 @@
 
 class IScheduleRequest(object):
     
-    def __init__(self, scheduler, server, recipients, responses):
+    def __init__(self, scheduler, server, recipients, responses, refreshOnly=False):
 
         self.scheduler = scheduler
         self.server = server
         self.recipients = recipients
         self.responses = responses
+        self.refreshOnly = refreshOnly
         
         self._generateHeaders()
         self._prepareData()
@@ -180,6 +181,9 @@
             self.headers.addRawHeader('Recipient', utf8String(recipient.cuaddr))
         self.headers.setHeader('Content-Type', MimeType("text", "calendar", params={"charset":"utf-8"}))
 
+        if self.refreshOnly:
+            self.headers.addRawHeader("X-CALENDARSERVER-ITIP-REFRESHONLY", "T")
+
     def _doAuthentication(self):
         if self.server.authentication and self.server.authentication[0] == "basic":
             self.headers.setHeader(

Modified: CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/scheduler.py
===================================================================
--- CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/scheduler.py	2009-12-21 20:41:53 UTC (rev 4885)
+++ CalendarServer/branches/users/cdaboo/partition-4464/twistedcaldav/scheduling/scheduler.py	2009-12-21 20:42:42 UTC (rev 4886)
@@ -387,6 +387,7 @@
     
         # Loop over each recipient and aggregate into lists by service types.
         caldav_recipients = []
+        partitioned_recipients = []
         remote_recipients = []
         imip_recipients = []
         for recipient in self.recipients:
@@ -398,7 +399,7 @@
                 caldav_recipients.append(recipient)
 
             elif isinstance(recipient, PartitionedCalendarUser):
-                remote_recipients.append(recipient)
+                partitioned_recipients.append(recipient)
 
             elif isinstance(recipient, RemoteCalendarUser):
                 remote_recipients.append(recipient)
@@ -414,6 +415,10 @@
         if caldav_recipients:
             yield self.generateLocalSchedulingResponses(caldav_recipients, responses, freebusy)
 
+        # Now process partitioned recipients
+        if partitioned_recipients:
+            yield self.generateRemoteSchedulingResponses(partitioned_recipients, responses, freebusy, getattr(self.request, 'suppressRefresh', False))
+
         # To reduce chatter, we suppress certain messages
         if not getattr(self.request, 'suppressRefresh', False):
 
@@ -437,14 +442,14 @@
         requestor = ScheduleViaCalDAV(self, recipients, responses, freebusy)
         return requestor.generateSchedulingResponses()
 
-    def generateRemoteSchedulingResponses(self, recipients, responses, freebusy):
+    def generateRemoteSchedulingResponses(self, recipients, responses, freebusy, refreshOnly=False):
         """
         Generate scheduling responses for remote recipients.
         """
 
         # Create the scheduler and run it.
         requestor = ScheduleViaISchedule(self, recipients, responses, freebusy)
-        return requestor.generateSchedulingResponses()
+        return requestor.generateSchedulingResponses(refreshOnly)
 
     def generateIMIPSchedulingResponses(self, recipients, responses, freebusy):
         """
@@ -680,6 +685,15 @@
 
 class IScheduleScheduler(RemoteScheduler):
 
+    def loadFromRequestHeaders(self):
+        """
+        Load Originator and Recipient from request headers.
+        """
+        super(IScheduleScheduler, self).loadFromRequestHeaders()
+        
+        if self.request.headers.getRawHeaders('x-calendarserver-itip-refreshonly', ("F"))[0] == "T":
+            self.request.doing_attendee_refresh = 1
+        
     def checkAuthorization(self):
         # Must have an unauthenticated user
         if self.resource.currentPrincipal(self.request) != davxml.Principal(davxml.Unauthenticated()):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20091221/e30165ea/attachment.html>


More information about the calendarserver-changes mailing list