[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