[CalendarServer-changes] [8191] CalendarServer/trunk/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Thu Oct 13 18:25:50 PDT 2011


Revision: 8191
          http://trac.macosforge.org/projects/calendarserver/changeset/8191
Author:   sagen at apple.com
Date:     2011-10-13 18:25:49 -0700 (Thu, 13 Oct 2011)
Log Message:
-----------
Pull delegate assignments and auto-schedule settings from OpenDirectory

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
    CalendarServer/trunk/twistedcaldav/test/test_upgrade.py
    CalendarServer/trunk/twistedcaldav/upgrade.py

Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2011-10-13 20:50:21 UTC (rev 8190)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2011-10-14 01:25:49 UTC (rev 8191)
@@ -937,6 +937,47 @@
 
             self.recordCacheForType(recordType).addRecord(record, indexType, origIndexKey)
 
+
+    def getResourceInfo(self):
+        """
+        Resource information including proxy assignments for resource and
+        locations, as well as auto-schedule settings, used to live in the
+        directory.  This method fetches old resource info for migration
+        purposes.
+        """
+        attrs = [
+            dsattributes.kDS1AttrGeneratedUID,
+            dsattributes.kDSNAttrResourceInfo,
+        ]
+
+        for recordType in (dsattributes.kDSStdRecordTypePlaces, dsattributes.kDSStdRecordTypeResources):
+            try:
+                self.log_debug("opendirectory.listAllRecordsWithAttributes_list(%r,%r,%r)" % (
+                    self.directory,
+                    recordType,
+                    attrs,
+                ))
+                results = self.odModule.listAllRecordsWithAttributes_list(
+                    self.directory,
+                    recordType,
+                    attrs,
+                )
+            except self.odModule.ODError, ex:
+                self.log_error("OpenDirectory (node=%s) error: %s" % (self.realmName, str(ex)))
+                raise
+
+            for (recordShortName, value) in results:
+                recordGUID = value.get(dsattributes.kDS1AttrGeneratedUID)
+                resourceInfo = value.get(dsattributes.kDSNAttrResourceInfo)
+                if resourceInfo is not None:
+                    try:
+                        autoSchedule, proxy, readOnlyProxy = self._parseResourceInfo(resourceInfo,
+                            recordGUID, recordType, recordShortName)
+                    except ValueError:
+                        continue
+                    yield recordGUID, autoSchedule, proxy, readOnlyProxy
+
+
     def isAvailable(self):
         """
         Returns True if all configured directory nodes are accessible, False otherwise

Modified: CalendarServer/trunk/twistedcaldav/test/test_upgrade.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_upgrade.py	2011-10-13 20:50:21 UTC (rev 8190)
+++ CalendarServer/trunk/twistedcaldav/test/test_upgrade.py	2011-10-14 01:25:49 UTC (rev 8191)
@@ -18,7 +18,6 @@
 from twisted.internet.defer import inlineCallbacks
 from twext.web2.dav import davxml
 from twistedcaldav.config import config
-from twistedcaldav.directory.calendaruserproxy import ProxySqliteDB
 from twistedcaldav.directory.xmlfile import XMLDirectoryService
 from twistedcaldav.directory.resourceinfo import ResourceInfoDatabase
 from twistedcaldav.mail import MailGatewayTokensDatabase
@@ -32,6 +31,7 @@
 import hashlib
 import os, zlib, cPickle
 from txdav.caldav.datastore.index_file import db_basename
+from twisted.python.reflect import namedClass
 
 
 
@@ -1368,20 +1368,20 @@
         (yield upgradeData(config))
         self.assertTrue(self.verifyHierarchy(root, after))
 
-        calendarUserProxyDatabase = ProxySqliteDB(NEWPROXYFILE)
+        proxydbClass = namedClass(config.ProxyDBService.type)
+        calendarUserProxyDatabase = proxydbClass(**config.ProxyDBService.params)
         resourceInfoDatabase = ResourceInfoDatabase(root)
 
         for guid, info in assignments.iteritems():
-
             proxyGroup = "%s#calendar-proxy-write" % (guid,)
-            result = set([row[0] for row in calendarUserProxyDatabase._db_execute("select MEMBER from GROUPS where GROUPNAME = :1", proxyGroup)])
+            result = (yield calendarUserProxyDatabase.getMembers(proxyGroup))
             if info[1]:
                 self.assertTrue(info[1] in result)
             else:
                 self.assertTrue(not result)
 
             readOnlyProxyGroup = "%s#calendar-proxy-read" % (guid,)
-            result = set([row[0] for row in calendarUserProxyDatabase._db_execute("select MEMBER from GROUPS where GROUPNAME = :1", readOnlyProxyGroup)])
+            result = (yield calendarUserProxyDatabase.getMembers(readOnlyProxyGroup))
             if info[2]:
                 self.assertTrue(info[2] in result)
             else:
@@ -1391,7 +1391,6 @@
             autoSchedule = autoSchedule == 1
             self.assertEquals(info[0], autoSchedule)
 
-    test_migrateResourceInfo.todo = "FIXME: perhaps ProxySqliteDB isn't being set up correctly?"
 
 
     def test_removeIllegalCharacters(self):

Modified: CalendarServer/trunk/twistedcaldav/upgrade.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/upgrade.py	2011-10-13 20:50:21 UTC (rev 8190)
+++ CalendarServer/trunk/twistedcaldav/upgrade.py	2011-10-14 01:25:49 UTC (rev 8191)
@@ -29,7 +29,6 @@
 
 from twistedcaldav.directory.appleopendirectory import OpenDirectoryService
 from twistedcaldav.directory.xmlfile import XMLDirectoryService
-from twistedcaldav.directory.calendaruserproxy import ProxySqliteDB
 from twistedcaldav.directory.directory import DirectoryService, GroupMembershipCacheUpdater
 from twistedcaldav.directory import calendaruserproxy
 from twistedcaldav.directory.calendaruserproxyloader import XMLCalendarUserProxyLoader
@@ -90,6 +89,7 @@
 # Upconverts data from any calendar server version prior to data format 1
 #
 
+ at inlineCallbacks
 def upgrade_to_1(config):
 
     errorOccurred = False
@@ -337,20 +337,32 @@
         os.rename(oldHome, newHome)
 
 
+    @inlineCallbacks
     def migrateResourceInfo(config, directory, uid, gid):
+        """
+        Retrieve delegate assignments and auto-schedule flag from the directory
+        service, because in "v1" that's where this info lived.
+        """
+
         log.info("Fetching delegate assignments and auto-schedule settings from directory")
+        resourceInfo = directory.getResourceInfo()
+        if len(resourceInfo) == 0:
+            # Nothing to migrate, or else not appleopendirectory
+            return
+
         resourceInfoDatabase = ResourceInfoDatabase(config.DataRoot)
-        calendarUserProxyDatabase = ProxySqliteDB(**config.ProxyDBService.params)
-        resourceInfo = directory.getResourceInfo()
+        proxydbClass = namedClass(config.ProxyDBService.type)
+        calendarUserProxyDatabase = proxydbClass(**config.ProxyDBService.params)
+
         for guid, autoSchedule, proxy, readOnlyProxy in resourceInfo:
             resourceInfoDatabase.setAutoScheduleInDatabase(guid, autoSchedule)
             if proxy:
-                calendarUserProxyDatabase.setGroupMembersInDatabase(
+                yield calendarUserProxyDatabase.setGroupMembersInDatabase(
                     "%s#calendar-proxy-write" % (guid,),
                     [proxy]
                 )
             if readOnlyProxy:
-                calendarUserProxyDatabase.setGroupMembersInDatabase(
+                yield calendarUserProxyDatabase.setGroupMembersInDatabase(
                     "%s#calendar-proxy-read" % (guid,),
                     [readOnlyProxy]
                 )
@@ -513,13 +525,12 @@
 
                 log.warn("Done processing calendar homes")
 
-    # migrateResourceInfo(config, directory, uid, gid)
+    yield migrateResourceInfo(config, directory, uid, gid)
     createMailTokensDatabase(config, uid, gid)
 
     if errorOccurred:
         raise UpgradeError("Data upgrade failed, see error.log for details")
 
-    return succeed(None)
 
 @inlineCallbacks
 def upgrade_to_2(config):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20111013/6e2d191f/attachment.html>


More information about the calendarserver-changes mailing list