[CalendarServer-changes] [839] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Fri Dec 15 11:37:11 PST 2006
Revision: 839
http://trac.macosforge.org/projects/calendarserver/changeset/839
Author: wsanchez at apple.com
Date: 2006-12-15 11:37:11 -0800 (Fri, 15 Dec 2006)
Log Message:
-----------
Add AutoProvisioningResourceMixIn
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/directory/calendar.py
CalendarServer/trunk/twistedcaldav/directory/principal.py
CalendarServer/trunk/twistedcaldav/static.py
Modified: CalendarServer/trunk/twistedcaldav/directory/calendar.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/calendar.py 2006-12-15 18:58:52 UTC (rev 838)
+++ CalendarServer/trunk/twistedcaldav/directory/calendar.py 2006-12-15 19:37:11 UTC (rev 839)
@@ -37,8 +37,9 @@
from twistedcaldav.resource import CalDAVResource
from twistedcaldav.schedule import ScheduleInboxResource, ScheduleOutboxResource
from twistedcaldav.directory.idirectory import IDirectoryService
+from twistedcaldav.directory.resource import AutoProvisioningResourceMixIn
-class DirectoryCalendarHomeProvisioningResource (ReadOnlyResourceMixIn, DAVResource):
+class DirectoryCalendarHomeProvisioningResource (AutoProvisioningResourceMixIn, ReadOnlyResourceMixIn, DAVResource):
"""
Resource which provisions calendar home collections as needed.
"""
@@ -70,8 +71,6 @@
return self._url
def getChild(self, name):
- self.provision()
-
return self.putChildren.get(name, None)
def listChildren(self):
@@ -103,7 +102,7 @@
def defaultAccessControlList(self):
return readOnlyACL
-class DirectoryCalendarHomeTypeProvisioningResource (ReadOnlyResourceMixIn, DAVResource):
+class DirectoryCalendarHomeTypeProvisioningResource (AutoProvisioningResourceMixIn, ReadOnlyResourceMixIn, DAVResource):
"""
Resource which provisions calendar home collections of a specific
record type as needed.
@@ -120,12 +119,6 @@
self.recordType = recordType
self._parent = parent
- def provision(self):
- pass
-
- def provisionChild(self, record):
- raise NotImplementedError("Subclass must implement provisionChild()")
-
def url(self):
return joinURL(self._parent.url(), self.recordType)
@@ -165,7 +158,7 @@
def principalCollections(self):
return self._parent.principalCollections()
-class DirectoryCalendarHomeResource (CalDAVResource):
+class DirectoryCalendarHomeResource (AutoProvisioningResourceMixIn, CalDAVResource):
"""
Calendar home collection resource.
"""
@@ -240,11 +233,6 @@
def url(self):
return joinURL(self._parent.url(), self.record.shortName)
- def locateChild(self, path, segments):
- d = self.provision()
- d.addCallback(lambda _: super(DirectoryCalendarHomeResource, self).locateChild(path, segments))
- return d
-
##
# DAV
##
Modified: CalendarServer/trunk/twistedcaldav/directory/principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/principal.py 2006-12-15 18:58:52 UTC (rev 838)
+++ CalendarServer/trunk/twistedcaldav/directory/principal.py 2006-12-15 19:37:11 UTC (rev 839)
@@ -41,6 +41,7 @@
from twistedcaldav.resource import CalendarPrincipalCollectionResource, CalendarPrincipalResource
from twistedcaldav.static import provisionFile
from twistedcaldav.directory.idirectory import IDirectoryService
+from twistedcaldav.directory.resource import AutoProvisioningResourceMixIn
# FIXME: These should not be tied to DAVFile
# The reason that they is that web2.dav only implements DAV methods on
@@ -54,7 +55,12 @@
# Permissions here are fixed, and are not subject to inherritance rules, etc.
return succeed(self.defaultAccessControlList())
-class DirectoryPrincipalProvisioningResource (PermissionsMixIn, CalendarPrincipalCollectionResource, DAVFile):
+class DirectoryPrincipalProvisioningResource (
+ AutoProvisioningResourceMixIn,
+ PermissionsMixIn,
+ CalendarPrincipalCollectionResource,
+ DAVFile,
+):
"""
Collection resource which provisions directory principals as its children.
"""
@@ -74,6 +80,8 @@
# FIXME: Smells like a hack
directory.principalCollection = self
+ # Provision in __init__() because principals are used prior to request
+ # lookups.
self.provision()
# Create children
@@ -136,7 +144,6 @@
raise HTTPError(responsecode.NOT_FOUND)
def getChild(self, name):
- self.provision()
return self.putChildren.get(name, None)
def listChildren(self):
@@ -149,7 +156,12 @@
def principalCollections(self):
return (self,)
-class DirectoryPrincipalTypeResource (PermissionsMixIn, CalendarPrincipalCollectionResource, DAVFile):
+class DirectoryPrincipalTypeResource (
+ AutoProvisioningResourceMixIn,
+ PermissionsMixIn,
+ CalendarPrincipalCollectionResource,
+ DAVFile,
+):
"""
Collection resource which provisions directory principals of a specific type as its children.
"""
@@ -166,6 +178,8 @@
self.recordType = recordType
self._parent = parent
+ # Provision in __init__() because principals are used prior to request
+ # lookups.
self.provision()
def provision(self):
@@ -189,8 +203,6 @@
raise HTTPError(responsecode.NOT_FOUND)
def getChild(self, name, record=None):
- self.provision()
-
if name == "":
return self
@@ -230,6 +242,8 @@
self._parent = parent
self._url = joinURL(parent.principalCollectionURL(), record.shortName)
+ # Provision in __init__() because principals are used prior to request
+ # lookups.
self.provision()
def provision(self):
Modified: CalendarServer/trunk/twistedcaldav/static.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/static.py 2006-12-15 18:58:52 UTC (rev 838)
+++ CalendarServer/trunk/twistedcaldav/static.py 2006-12-15 19:37:11 UTC (rev 839)
@@ -59,6 +59,7 @@
from twistedcaldav.directory.calendar import DirectoryCalendarHomeProvisioningResource
from twistedcaldav.directory.calendar import DirectoryCalendarHomeTypeProvisioningResource
from twistedcaldav.directory.calendar import DirectoryCalendarHomeResource
+from twistedcaldav.directory.resource import AutoProvisioningResourceMixIn
class CalDAVFile (CalDAVResource, DAVFile):
"""
@@ -459,22 +460,14 @@
return super(CalendarHomeFile, self).getChild(name)
-class AutoProvisionCalDAVFile(CalDAVFile):
- """
- A class that makes a resource auto-provision itself when someone tries to locate it.
- """
- def provision(self):
- provisionFile(self, self._parent)
-
- def locateChild(self, path, segments):
- self.provision()
- return super(AutoProvisionCalDAVFile, self).locateChild(path, segments)
-
-class ScheduleFile (AutoProvisionCalDAVFile):
+class ScheduleFile (AutoProvisioningResourceMixIn, CalDAVFile):
def __init__(self, path, parent):
super(ScheduleFile, self).__init__(path, principalCollections=parent.principalCollections())
self._parent = parent
+ def provision(self):
+ provisionFile(self, self._parent)
+
def createSimilarFile(self, path):
if path == self.fp.path:
return self
@@ -526,10 +519,10 @@
def __repr__(self):
return "<%s (calendar outbox collection): %s>" % (self.__class__.__name__, self.fp.path)
-class DropBoxHomeFile (DropBoxHomeResource, AutoProvisionCalDAVFile):
+class DropBoxHomeFile (AutoProvisioningResourceMixIn, DropBoxHomeResource, CalDAVFile):
def __init__(self, path, parent):
DropBoxHomeResource.__init__(self)
- AutoProvisionCalDAVFile.__init__(self, path, principalCollections=parent.principalCollections())
+ CalDAVFile.__init__(self, path, principalCollections=parent.principalCollections())
self._parent = parent
def provision(self):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20061215/02b007a6/attachment.html
More information about the calendarserver-changes
mailing list