[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