[CalendarServer-changes] [216] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Wed Sep 27 17:56:30 PDT 2006


Revision: 216
          http://trac.macosforge.org/projects/calendarserver/changeset/216
Author:   wsanchez at apple.com
Date:     2006-09-27 17:56:30 -0700 (Wed, 27 Sep 2006)

Log Message:
-----------
Use introspection to find classes, rather than keeping a map of
string->class in repository.py, which brakes if you want to configure
classes not known to repository.py.

Modified Paths:
--------------
    CalendarServer/trunk/conf/repository-static.xml
    CalendarServer/trunk/conf/repository.xml
    CalendarServer/trunk/twistedcaldav/repository.py

Modified: CalendarServer/trunk/conf/repository-static.xml
===================================================================
--- CalendarServer/trunk/conf/repository-static.xml	2006-09-27 22:38:39 UTC (rev 215)
+++ CalendarServer/trunk/conf/repository-static.xml	2006-09-28 00:56:30 UTC (rev 216)
@@ -22,7 +22,7 @@
 
   <docroot>
     <collection>
-      <pytype>DAVFile</pytype>
+      <pytype>twisted.web2.dav.static.DAVFile</pytype>
       <properties>
         <acl>
           <ace>
@@ -40,7 +40,7 @@
       </properties>
       <members>
         <collection name="principals">
-          <pytype>CalDAVFile</pytype>
+          <pytype>twistedcaldav.static.CalDAVFile</pytype>
           <properties>
             <acl>
               <ace>
@@ -52,7 +52,7 @@
           </properties>
           <members>
             <collection name="users" tag="principals">
-              <pytype>CalendarUserPrincipalProvisioningResource</pytype>
+              <pytype>twistedcaldav.static.CalendarUserPrincipalProvisioningResource</pytype>
               <properties>
                 <acl>
                   <ace>
@@ -67,7 +67,7 @@
           </members>
         </collection>
         <collection name="calendars">
-          <pytype>CalDAVFile</pytype>
+          <pytype>twistedcaldav.static.CalDAVFile</pytype>
           <properties>
             <acl>
               <ace>
@@ -79,7 +79,7 @@
           </properties>
           <members>
             <collection name="users" tag="calendars">
-              <pytype>CalendarHomeProvisioningFile</pytype>
+              <pytype>twistedcaldav.static.CalendarHomeProvisioningFile</pytype>
               <properties>
                 <acl>
                   <ace>

Modified: CalendarServer/trunk/conf/repository.xml
===================================================================
--- CalendarServer/trunk/conf/repository.xml	2006-09-27 22:38:39 UTC (rev 215)
+++ CalendarServer/trunk/conf/repository.xml	2006-09-28 00:56:30 UTC (rev 216)
@@ -22,7 +22,7 @@
 
   <docroot auto-principal-collection-set="no">
     <collection>
-      <pytype>DAVFile</pytype>
+      <pytype>twisted.web2.dav.static.DAVFile</pytype>
       <properties>
         <acl>
           <ace>
@@ -47,7 +47,7 @@
             auto-provisioning of accounts occurs when the principal collections are
             created and we need to have the calendar home path setup by then. -->
         <collection name="calendars" tag="calendars">
-          <pytype>CalDAVFile</pytype>
+          <pytype>twistedcaldav.static.CalDAVFile</pytype>
           <properties>
             <acl>
               <ace>
@@ -59,7 +59,7 @@
           </properties>
           <members>
             <collection name="users">
-              <pytype>CalendarHomeProvisioningFile</pytype>
+              <pytype>twistedcaldav.static.CalendarHomeProvisioningFile</pytype>
               <properties>
                 <acl>
                   <ace>
@@ -72,7 +72,7 @@
               <members/>
             </collection>
             <collection name="groups">
-              <pytype>CalendarHomeProvisioningFile</pytype>
+              <pytype>twistedcaldav.static.CalendarHomeProvisioningFile</pytype>
               <properties>
                 <acl>
                   <ace>
@@ -85,7 +85,7 @@
               <members/>
             </collection>
             <collection name="resources">
-              <pytype>CalendarHomeProvisioningFile</pytype>
+              <pytype>twistedcaldav.static.CalendarHomeProvisioningFile</pytype>
               <properties>
                 <acl>
                   <ace>
@@ -119,7 +119,7 @@
           </members>
         </collection>
         <collection name="principals" tag="principals">
-          <pytype>DirectoryPrincipalProvisioningResource</pytype>
+          <pytype>twistedcaldav.directory.DirectoryPrincipalProvisioningResource</pytype>
           <params>
             <param>
               <key>DirectoryNode</key>
@@ -137,7 +137,7 @@
           </properties>
           <members>
             <collection name="users">
-              <pytype>DirectoryUserPrincipalProvisioningResource</pytype>
+              <pytype>twistedcaldav.directory.DirectoryUserPrincipalProvisioningResource</pytype>
               <properties>
                 <acl>
                   <ace>
@@ -150,7 +150,7 @@
               <members/>
             </collection>
             <collection name="groups">
-              <pytype>DirectoryGroupPrincipalProvisioningResource</pytype>
+              <pytype>twistedcaldav.directory.DirectoryGroupPrincipalProvisioningResource</pytype>
               <properties>
                 <acl>
                   <ace>
@@ -163,7 +163,7 @@
               <members/>
             </collection>
             <collection name="resources">
-              <pytype>DirectoryResourcePrincipalProvisioningResource</pytype>
+              <pytype>twistedcaldav.directory.DirectoryResourcePrincipalProvisioningResource</pytype>
               <properties>
                 <acl>
                   <ace>

Modified: CalendarServer/trunk/twistedcaldav/repository.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/repository.py	2006-09-27 22:38:39 UTC (rev 215)
+++ CalendarServer/trunk/twistedcaldav/repository.py	2006-09-28 00:56:30 UTC (rev 216)
@@ -26,23 +26,17 @@
 
 from twisted.python import log
 from twisted.python.filepath import FilePath
+from twisted.python.reflect import namedObject
 from twisted.web2.dav import davxml
 from twisted.web2.dav.auth import TwistedPasswordProperty
 from twisted.web2.dav.element.base import PCDATAElement
 from twisted.web2.dav.element.parser import lookupElement
 from twisted.web2.dav.resource import TwistedACLInheritable
-from twisted.web2.dav.static import DAVFile
 from twisted.web2.dav.util import joinURL
 from twistedcaldav import caldavxml
 from twistedcaldav import customxml
-from twistedcaldav.directory import DirectoryResourcePrincipalProvisioningResource
-from twistedcaldav.directory import DirectoryGroupPrincipalProvisioningResource
-from twistedcaldav.directory import DirectoryUserPrincipalProvisioningResource
-from twistedcaldav.directory import DirectoryPrincipalProvisioningResource
 from twistedcaldav.resource import CalDAVResource
 from twistedcaldav.static import CalDAVFile, CalendarHomeFile, CalendarPrincipalFile
-from twistedcaldav.static import CalendarHomeProvisioningFile
-from twistedcaldav.static import CalendarUserPrincipalProvisioningResource
 
 import os
 
@@ -101,27 +95,6 @@
 ELEMENT_AUTORESPOND = "autorespond"
 ATTRIBUTE_REPEAT = "repeat"
 
-classMap = {
-    "DAVFile":                                        DAVFile,
-    "CalDAVFile":                                     CalDAVFile,
-    "CalendarUserPrincipalProvisioningResource":      CalendarUserPrincipalProvisioningResource,
-    "CalendarPrincipalFile":                          CalendarPrincipalFile,
-    "CalendarHomeProvisioningFile":                   CalendarHomeProvisioningFile,
-    "CalendarHomeFile":                               CalendarHomeFile,
-    "DirectoryPrincipalProvisioningResource":         DirectoryPrincipalProvisioningResource,
-    "DirectoryUserPrincipalProvisioningResource":     DirectoryUserPrincipalProvisioningResource,
-    "DirectoryGroupPrincipalProvisioningResource":    DirectoryGroupPrincipalProvisioningResource,
-    "DirectoryResourcePrincipalProvisioningResource": DirectoryResourcePrincipalProvisioningResource,
-}
-
-urld = [
-    "CalendarUserPrincipalProvisioningResource",
-    "DirectoryPrincipalProvisioningResource",
-    "DirectoryUserPrincipalProvisioningResource",
-    "DirectoryGroupPrincipalProvisioningResource",
-    "DirectoryResourcePrincipalProvisioningResource",
-]
-
 class RepositoryBuilder (object):
     """
     Builds a repository hierarchy at a supplied document root file system path,
@@ -239,7 +212,7 @@
     """
     def __init__(self):
         self.name = None
-        self.pytype = "CalDAVFile"
+        self.pytype = "twistedcaldav.static.CalDAVFile" # FIXME: Why not None?
         self.params = {}
         self.properties = []
         self.acl = None
@@ -332,17 +305,19 @@
 
         if not os.path.exists(mypath):
             os.mkdir(mypath)
-        
-        if self.pytype in urld:
-            if len(self.params) != 0:
-                self.resource = classMap[self.pytype](mypath, myurl, params=self.params)
-            else:
-                self.resource = classMap[self.pytype](mypath, myurl)
-        else:
-            if len(self.params) != 0:
-                self.resource = classMap[self.pytype](mypath, params=self.params)
-            else:
-                self.resource = classMap[self.pytype](mypath)
+
+        try:
+            resource_class = namedObject(self.pytype)
+        except (ImportError, AttributeError):
+            log.err("Unable to locate Python class %r" % (self.pytype,))
+            raise
+        kwargs = {}
+        if "url" in resource_class.__init__.func_code.co_varnames:
+            kwargs["url"] = myurl
+        if self.params:
+            kwargs["params"] = self.params
+        self.resource = resource_class(mypath, **kwargs)
+
         self.uri = myurl
         
         # Set properties now

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20060927/566606ff/attachment.html


More information about the calendarserver-changes mailing list