[CalendarServer-changes] [5142] CalendarServer/trunk/calendarserver

source_changes at macosforge.org source_changes at macosforge.org
Tue Feb 16 22:36:56 PST 2010


Revision: 5142
          http://trac.macosforge.org/projects/calendarserver/changeset/5142
Author:   glyph at apple.com
Date:     2010-02-16 22:36:55 -0800 (Tue, 16 Feb 2010)
Log Message:
-----------
Move carddavd resource-creation logic from tap plugin to new getRootResource function.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tap/carddav.py
    CalendarServer/trunk/calendarserver/util.py

Modified: CalendarServer/trunk/calendarserver/tap/carddav.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/carddav.py	2010-02-17 06:36:04 UTC (rev 5141)
+++ CalendarServer/trunk/calendarserver/tap/carddav.py	2010-02-17 06:36:55 UTC (rev 5142)
@@ -18,21 +18,12 @@
     "CardDAVServiceMaker",
 ]
 
-import errno
-import os
-
 from zope.interface import implements
 
-from twisted.python.filepath import FilePath
 from twisted.plugin import IPlugin
-from twisted.internet.reactor import callLater
 from twisted.application.service import IServiceMaker
 
-from twistedcaldav.directory.principal import DirectoryPrincipalProvisioningResource
-
-from twistedcaldav.config import config
 from twistedcaldav.stdconfig import DEFAULT_CARDDAV_CONFIG_FILE
-from twistedcaldav.static import AddressBookHomeProvisioningFile, DirectoryBackedAddressBookFile
 from twext.log import Logger
 
 log = Logger()
@@ -44,20 +35,8 @@
 except ImportError:
     NegotiateCredentialFactory = None
 
-from calendarserver.provision.root import RootResource as _ParentRootResource
 
 
-
-class RootResource (_ParentRootResource):
-    """
-    A special root resource that contains support checking SACLs
-    as well as adding responseFilters.
-    """
-
-    saclService = "addressbook"
-
-
-
 class CardDAVOptions(CalDAVOptions):
     """
     The same as L{CalDAVOptions}, but with a different default config file.
@@ -75,53 +54,3 @@
     tapname = "carddav"
     description = "Darwin Contacts Server"
     options = CardDAVOptions
-
-    #
-    # Default resource classes
-    #
-    rootResourceClass            = RootResource
-    principalResourceClass       = DirectoryPrincipalProvisioningResource
-    addressBookResourceClass     = AddressBookHomeProvisioningFile
-    directoryBackedAddressBookResourceClass = DirectoryBackedAddressBookFile
-
-    def makeService_Slave(self, options):
-        result = super(CardDAVServiceMaker, self).makeService_Slave(options)
-
-        directory = self.directory
-        principalCollection = self.principalCollection
-
-        if config.EnableCardDAV:
-            log.info("Setting up address book collection: %r" % (self.addressBookResourceClass,))
-    
-            addressBookCollection = self.addressBookResourceClass(
-                os.path.join(config.DocumentRoot, "addressbooks"),
-                directory, "/addressbooks/"
-            )
-            
-            directoryPath = os.path.join(config.DocumentRoot, "directory")
-            doBacking = config.DirectoryAddressBook and config.EnableSearchAddressBook
-            if doBacking:
-                log.info("Setting up directory address book: %r" % (self.directoryBackedAddressBookResourceClass,))
-    
-                directoryBackedAddressBookCollection = self.directoryBackedAddressBookResourceClass(
-                    directoryPath,
-                    principalCollections=(principalCollection,)
-                )
-                # do this after process is owned by carddav user, not root
-                callLater(1.0, directoryBackedAddressBookCollection.provisionDirectory)
-            else:
-                # remove /directory from previous runs that may have created it
-                try:
-                    FilePath(directoryPath).remove()
-                    self.log_info("Deleted: %s" %    directoryPath)
-                except (OSError, IOError), e:
-                    if e.errno != errno.ENOENT:
-                        self.log_error("Could not delete: %s : %r" %  (directoryPath, e,))
-            root = self.root
-
-            root.putChild('addressbooks', addressBookCollection)
-            if doBacking:
-                root.putChild('directory', directoryBackedAddressBookCollection)
-        return result
-
-    makeService_Single   = makeService_Slave

Modified: CalendarServer/trunk/calendarserver/util.py
===================================================================
--- CalendarServer/trunk/calendarserver/util.py	2010-02-17 06:36:04 UTC (rev 5141)
+++ CalendarServer/trunk/calendarserver/util.py	2010-02-17 06:36:55 UTC (rev 5142)
@@ -19,6 +19,7 @@
     "getRootResource",
 ]
 
+import errno
 import os
 from time import sleep
 
@@ -28,6 +29,7 @@
 from twisted.web2.dav import auth
 from twisted.web2.auth.basic import BasicCredentialFactory
 from twisted.web2.static import File as FileResource
+from twisted.python.filepath import FilePath
 
 from twext.log import Logger
 
@@ -46,6 +48,7 @@
 from twistedcaldav.static import CalendarHomeProvisioningFile
 from twistedcaldav.static import IScheduleInboxFile
 from twistedcaldav.static import TimezoneServiceFile
+from twistedcaldav.static import AddressBookHomeProvisioningFile, DirectoryBackedAddressBookFile
 from twistedcaldav.timezones import TimezoneCache
 
 try:
@@ -82,6 +85,8 @@
     timezoneServiceResourceClass = TimezoneServiceFile
     webCalendarResourceClass     = WebCalendarResource
     webAdminResourceClass        = WebAdminResource
+    addressBookResourceClass     = AddressBookHomeProvisioningFile
+    directoryBackedAddressBookResourceClass = DirectoryBackedAddressBookFile
 
     #
     # Setup the Directory
@@ -283,6 +288,43 @@
         principalCollections=(principalCollection,),
     )
 
+    if config.EnableCardDAV:
+        root.saclService = "addressbook" # XXX this needs to be dealt with
+                                         # differently if caldav and carddav
+                                         # are going to be in the same process
+        log.info("Setting up address book collection: %r" % (addressBookResourceClass,))
+
+        addressBookCollection = addressBookResourceClass(
+            os.path.join(config.DocumentRoot, "addressbooks"),
+            directory, "/addressbooks/"
+        )
+
+        directoryPath = os.path.join(config.DocumentRoot, "directory")
+        doBacking = config.DirectoryAddressBook and config.EnableSearchAddressBook
+        if doBacking:
+            log.info("Setting up directory address book: %r" % (directoryBackedAddressBookResourceClass,))
+
+            directoryBackedAddressBookCollection = directoryBackedAddressBookResourceClass(
+                directoryPath,
+                principalCollections=(principalCollection,)
+            )
+            # do this after process is owned by carddav user, not root.  XXX
+            # this should be fixed to execute at a different stage of service
+            # startup entirely.
+            reactor.callLater(1.0, directoryBackedAddressBookCollection.provisionDirectory)
+        else:
+            # remove /directory from previous runs that may have created it
+            try:
+                FilePath(directoryPath).remove()
+                log.info("Deleted: %s" %    directoryPath)
+            except (OSError, IOError), e:
+                if e.errno != errno.ENOENT:
+                    log.error("Could not delete: %s : %r" %  (directoryPath, e,))
+
+        root.putChild('addressbooks', addressBookCollection)
+        if doBacking:
+            root.putChild('directory', directoryBackedAddressBookCollection)
+
     root.putChild("principals", principalCollection)
     root.putChild("calendars", calendarCollection)
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100216/2f79346c/attachment-0001.html>


More information about the calendarserver-changes mailing list