Revision: 833 http://trac.macosforge.org/projects/calendarserver/changeset/833 Author: cdaboo@apple.com Date: 2006-12-14 20:48:48 -0800 (Thu, 14 Dec 2006) Log Message: ----------- Fix up drop box support after recent changes. Note that notifications are not working right now. Also, we need to make sure the drop box properties are not advertised if drop box is disabled. Modified Paths: -------------- CalendarServer/trunk/twistedcaldav/directory/calendar.py CalendarServer/trunk/twistedcaldav/dropbox.py CalendarServer/trunk/twistedcaldav/static.py Modified: CalendarServer/trunk/twistedcaldav/directory/calendar.py =================================================================== --- CalendarServer/trunk/twistedcaldav/directory/calendar.py 2006-12-15 03:45:52 UTC (rev 832) +++ CalendarServer/trunk/twistedcaldav/directory/calendar.py 2006-12-15 04:48:48 UTC (rev 833) @@ -31,6 +31,8 @@ from twisted.web2.dav.resource import TwistedACLInheritable, TwistedQuotaRootProperty from twistedcaldav import caldavxml +from twistedcaldav.config import config +from twistedcaldav.dropbox import DropBoxHomeResource from twistedcaldav.extensions import ReadOnlyResourceMixIn, DAVResource from twistedcaldav.resource import CalDAVResource from twistedcaldav.schedule import ScheduleInboxResource, ScheduleOutboxResource @@ -181,17 +183,35 @@ self._parent = parent # Cache children which must be of a specific type - for name, cls in ( + childlist = ( ("inbox" , ScheduleInboxResource ), ("outbox", ScheduleOutboxResource), - ): + ) + if config.DropBoxEnabled: + childlist = childlist + ( + ("dropbox", DropBoxHomeResource), + #("notifications": NotificationsHomeResource), + ) + for name, cls in childlist: child = self.provisionChild(name) assert isinstance(child, cls), "Child %r is not a %s: %r" % (name, cls.__name__, child) self.putChild(name, child) def provision(self): + self.provisionSpecialCollections() return self.provisionDefaultCalendars() + def provisionSpecialCollections(self): + childlist = ("inbox" , "outbox",) + if config.DropBoxEnabled: + childlist = childlist + ( + "dropbox", + #"notifications", + ) + for child in childlist: + collection = self.getChild(child) + collection.provision() + def provisionDefaultCalendars(self): # Create a calendar collection @@ -214,7 +234,6 @@ # Set calendar-free-busy-set on inbox inbox = self.getChild("inbox") - inbox.provision() inbox.writeDeadProperty(caldavxml.CalendarFreeBusySet(davxml.HRef(childURL))) d = child.createCalendarCollection() Modified: CalendarServer/trunk/twistedcaldav/dropbox.py =================================================================== --- CalendarServer/trunk/twistedcaldav/dropbox.py 2006-12-15 03:45:52 UTC (rev 832) +++ CalendarServer/trunk/twistedcaldav/dropbox.py 2006-12-15 04:48:48 UTC (rev 833) @@ -42,10 +42,7 @@ Drop box collection resource. """ def resourceType(self): - return davxml.ResourceType( - davxml.ResourceType.collection, - davxml.ResourceType.dropboxhome, - ) + return davxml.ResourceType.dropboxhome def isCollection(self): return True @@ -55,14 +52,8 @@ Drop box resource. """ def resourceType(self): - return davxml.ResourceType( - davxml.ResourceType.collection, - davxml.ResourceType.dropbox, - ) + return davxml.ResourceType.dropbox - def isCollection(self): - return True - def writeNewACEs(self, newaces): """ Write a new ACL to the resource's property store. We override this for calendar collections @@ -113,6 +104,12 @@ (calendarserver_namespace, "valid-drop-box") ) + def http_MKCALENDAR (self, request): + return ErrorResponse( + responsecode.FORBIDDEN, + (calendarserver_namespace, "valid-drop-box") + ) + def http_X_APPLE_SUBSCRIBE(self, request): d = waitForDeferred(self.authorize(request, (davxml.Read(),))) yield d @@ -171,7 +168,15 @@ class DropBoxChildResource (DAVResource): def http_MKCOL(self, request): - return responsecode.FORBIDDEN + return ErrorResponse( + responsecode.FORBIDDEN, + (calendarserver_namespace, "valid-drop-box-resource") + ) + def http_MKCALENDAR (self, request): + return ErrorResponse( + responsecode.FORBIDDEN, + (calendarserver_namespace, "valid-drop-box-resource") + ) def http_PUT(self, request): # Modified: CalendarServer/trunk/twistedcaldav/static.py =================================================================== --- CalendarServer/trunk/twistedcaldav/static.py 2006-12-15 03:45:52 UTC (rev 832) +++ CalendarServer/trunk/twistedcaldav/static.py 2006-12-15 04:48:48 UTC (rev 833) @@ -548,12 +548,18 @@ else: return DropBoxChildFile(path, self) + http_DELETE = DropBoxCollectionResource.http_DELETE + http_PUT = DropBoxCollectionResource.http_PUT + http_MKCALENDAR = DropBoxCollectionResource.http_MKCALENDAR + http_X_APPLE_SUBSCRIBE = DropBoxCollectionResource.http_X_APPLE_SUBSCRIBE + http_X_APPLE_UNSUBSCRIBE = DropBoxCollectionResource.http_X_APPLE_SUBSCRIBE + class DropBoxChildFile (DropBoxChildResource, CalDAVFile): def __init__(self, path, parent): DropBoxChildResource.__init__(self) CalDAVFile.__init__(self, path, principalCollections=parent.principalCollections()) - assert self.fp.isfile() or not self.fp.exists + assert self.fp.isfile() or not self.fp.exists() def createSimilarFile(self, path): if path == self.fp.path: @@ -561,6 +567,10 @@ else: return responsecode.NOT_FOUND + http_MKCOL = DropBoxChildResource.http_MKCOL + http_MKCALENDAR = DropBoxChildResource.http_MKCALENDAR + http_PUT = DropBoxChildResource.http_PUT + ## # Utilities ##
participants (1)
-
source_changes@macosforge.org