[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