[CalendarServer-changes] [4240] CalendarServer/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue May 12 14:50:50 PDT 2009
Revision: 4240
http://trac.macosforge.org/projects/calendarserver/changeset/4240
Author: sagen at apple.com
Date: 2009-05-12 14:50:50 -0700 (Tue, 12 May 2009)
Log Message:
-----------
Decouple config from DirectoryService.__init__() args
Modified Paths:
--------------
CalendarServer/trunk/calendarserver/provision/test/test_root.py
CalendarServer/trunk/calendarserver/tap/caldav.py
CalendarServer/trunk/calendarserver/tools/util.py
CalendarServer/trunk/calendarserver/webadmin/helper.py
CalendarServer/trunk/twistedcaldav/config.py
CalendarServer/trunk/twistedcaldav/directory/apache.py
CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
CalendarServer/trunk/twistedcaldav/directory/directory.py
CalendarServer/trunk/twistedcaldav/directory/test/test_aggregate.py
CalendarServer/trunk/twistedcaldav/directory/test/test_apache.py
CalendarServer/trunk/twistedcaldav/directory/test/test_calendar.py
CalendarServer/trunk/twistedcaldav/directory/test/test_guidchange.py
CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py
CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectoryschema.py
CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py
CalendarServer/trunk/twistedcaldav/directory/test/test_xmlfile.py
CalendarServer/trunk/twistedcaldav/directory/xmlfile.py
CalendarServer/trunk/twistedcaldav/test/test_config.py
Modified: CalendarServer/trunk/calendarserver/provision/test/test_root.py
===================================================================
--- CalendarServer/trunk/calendarserver/provision/test/test_root.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/calendarserver/provision/test/test_root.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -59,7 +59,7 @@
RootResource.CheckSACL = FakeCheckSACL(sacls={
'calendar': ['dreid']})
- directory = XMLDirectoryService(xmlFile)
+ directory = XMLDirectoryService({'xmlFile' : xmlFile})
principals = DirectoryPrincipalProvisioningResource('/principals/', directory)
Modified: CalendarServer/trunk/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/caldav.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/calendarserver/tap/caldav.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -430,7 +430,7 @@
self.log_info("Configuring directory service of type: %s"
% (config.DirectoryService.type,))
- baseDirectory = directoryClass(**config.DirectoryService.params)
+ baseDirectory = directoryClass(config.DirectoryService.params)
directories.append(baseDirectory)
Modified: CalendarServer/trunk/calendarserver/tools/util.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/util.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/calendarserver/tools/util.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -87,7 +87,7 @@
return self.principalCollection.principalForCalendarUserAddress(cua)
- return MyDirectoryService(**config.DirectoryService.params)
+ return MyDirectoryService(config.DirectoryService.params)
class DummyDirectoryService (DirectoryService):
realmName = ""
Modified: CalendarServer/trunk/calendarserver/webadmin/helper.py
===================================================================
--- CalendarServer/trunk/calendarserver/webadmin/helper.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/calendarserver/webadmin/helper.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -220,5 +220,5 @@
return self.principalCollection.principalForCalendarUserAddress(cua)
- return MyDirectoryService(**config.DirectoryService["params"])
+ return MyDirectoryService(config.DirectoryService["params"])
Modified: CalendarServer/trunk/twistedcaldav/config.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/config.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/config.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -73,7 +73,7 @@
"twistedcaldav.directory.xmlfile.XMLDirectoryService": {
"xmlFile": "/etc/caldavd/accounts.xml",
},
- "twistedcaldav.directory.cachingappleopendirectory.OpenDirectoryService": {
+ "twistedcaldav.directory.appleopendirectory.OpenDirectoryService": {
"node": "/Search",
"restrictEnabledRecords": False,
"restrictToGroup": "",
Modified: CalendarServer/trunk/twistedcaldav/directory/apache.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/apache.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/apache.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -38,19 +38,29 @@
def __repr__(self):
return "<%s %r: %r %r>" % (self.__class__.__name__, self.realmName, self.userFile, self.groupFile)
- def __init__(self, realmName="", userFile=None, groupFile=None):
+ def __init__(self, params):
+ defaults = {
+ 'realmName' : '',
+ 'userFile' : None,
+ 'groupFile' : None,
+ }
+ ignored = None
+ params = self.getParams(params, defaults, ignored)
+
super(AbstractDirectoryService, self).__init__()
+ userFile = params["userFile"]
if not userFile:
raise DirectoryConfigurationError("Invalid Apache user file name: %r" % (userFile,))
if userFile and type(userFile) is str:
userFile = FilePath(userFile)
+ groupFile = params["groupFile"]
if groupFile and type(groupFile) is str:
groupFile = FilePath(groupFile)
- self.realmName = realmName
+ self.realmName = params["realmName"]
self.userFile = userFile
self.groupFile = groupFile
Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -38,7 +38,7 @@
from twisted.internet.threads import deferToThread
from twisted.cred.credentials import UsernamePassword
from twisted.web2.auth.digest import DigestedCredentials
-from twistedcaldav.config import config
+from twistedcaldav.config import config, ConfigurationError
from twistedcaldav.directory.cachingdirectory import CachingDirectoryService,\
CachingDirectoryRecord
@@ -55,38 +55,44 @@
def __repr__(self):
return "<%s %r: %r>" % (self.__class__.__name__, self.realmName, self.node)
- def __init__(
- self,
- node="/Search",
- restrictEnabledRecords=False,
- restrictToGroup="",
- dosetup=True,
- cacheTimeout=30
- ):
+
+ def __init__(self, params, dosetup=True):
"""
- @param node: an OpenDirectory node name to bind to.
- @param restrictEnabledRecords: C{True} if a group in the directory is to be used to determine
- which calendar users are enabled.
- @param restrictToGroup: C{str} guid or name of group used to restrict enabled users.
+ @param params: a dictionary containing the following keys:
+ node: an OpenDirectory node name to bind to.
+ restrictEnabledRecords: C{True} if a group in the
+ directory is to be used to determine which calendar
+ users are enabled.
+ restrictToGroup: C{str} guid or name of group used to
+ restrict enabled users.
+ cacheTimeout: C{int} number of minutes before cache is invalidated.
@param dosetup: if C{True} then the directory records are initialized,
if C{False} they are not.
This should only be set to C{False} when doing unit tests.
- @param cacheTimeout: C{int} number of minutes before cache is invalidated.
"""
- super(OpenDirectoryService, self).__init__(cacheTimeout)
+ defaults = {
+ 'node' : '/Search',
+ 'restrictEnabledRecords' : False,
+ 'restrictToGroup' : '',
+ 'cacheTimeout' : 30,
+ }
+ ignored = ('requireComputerRecord',)
+ params = self.getParams(params, defaults, ignored)
+ super(OpenDirectoryService, self).__init__(params['cacheTimeout'])
+
try:
- directory = opendirectory.odInit(node)
+ directory = opendirectory.odInit(params['node'])
except opendirectory.ODError, e:
- self.log_error("Open Directory (node=%s) Initialization error: %s" % (node, e))
+ self.log_error("Open Directory (node=%s) Initialization error: %s" % (params['node'], e))
raise
- self.realmName = node
+ self.realmName = params['node']
self.directory = directory
- self.node = node
- self.restrictEnabledRecords = restrictEnabledRecords
- self.restrictToGroup = restrictToGroup
+ self.node = params['node']
+ self.restrictEnabledRecords = params['restrictEnabledRecords']
+ self.restrictToGroup = params['restrictToGroup']
try:
UUID(self.restrictToGroup)
except:
Modified: CalendarServer/trunk/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/directory.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/directory.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -250,6 +250,32 @@
def getResourceInfo(self):
return ()
+
+ def getParams(self, params, defaults, ignore=None):
+ """ Checks configuration parameters for unexpected/ignored keys, and
+ applies default values. """
+
+ keys = set(params.keys())
+
+ result = {}
+ for key in defaults.iterkeys():
+ if key in params:
+ result[key] = params[key]
+ keys.remove(key)
+ else:
+ result[key] = defaults[key]
+
+ if ignore:
+ for key in ignore:
+ if key in params:
+ self.log_warn("Ignoring obsolete directory service parameter: %s" % (key,))
+ keys.remove(key)
+
+ if keys:
+ raise DirectoryConfigurationError("Invalid directory service parameter(s): %s" % (", ".join(list(keys)),))
+ return result
+
+
class DirectoryRecord(LoggingMixIn):
implements(IDirectoryRecord)
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_aggregate.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_aggregate.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_aggregate.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -65,10 +65,16 @@
"""
Returns an IDirectoryService.
"""
- apacheService = BasicDirectoryService(digestRealm, basicUserFile, groupFile)
+ apacheService = BasicDirectoryService(
+ {
+ 'realmName' : digestRealm,
+ 'userFile' : basicUserFile,
+ 'groupFile' : groupFile,
+ }
+ )
apacheService.recordTypePrefix = apache_prefix
- xmlService = XMLDirectoryService(xmlFile)
+ xmlService = XMLDirectoryService({'xmlFile' : xmlFile})
xmlService.recordTypePrefix = xml_prefix
return AggregateDirectoryService((apacheService, xmlService))
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_apache.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_apache.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_apache.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -61,7 +61,13 @@
}
def service(self):
- return self.serviceClass(digestRealm, self.userFile(), self.groupFile())
+ return self.serviceClass(
+ {
+ 'realmName' : digestRealm,
+ 'userFile' : self.userFile(),
+ 'groupFile' : self.groupFile(),
+ }
+ )
userFileName = None
@@ -87,7 +93,7 @@
"""
IDirectoryService.recordTypes(userFile)
"""
- self.assertEquals(set(self.serviceClass(digestRealm, self.userFile()).recordTypes()), set((DirectoryService.recordType_users,)))
+ self.assertEquals(set(self.serviceClass({'realmName':digestRealm, 'userFile':self.userFile()}).recordTypes()), set((DirectoryService.recordType_users,)))
userEntry = None
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_calendar.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_calendar.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_calendar.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -40,7 +40,7 @@
fd = open(self.xmlfile, "w")
fd.write(open(xmlFile.path, "r").read())
fd.close()
- self.directoryService = XMLDirectoryService(self.xmlfile)
+ self.directoryService = XMLDirectoryService({'xmlFile' : self.xmlfile})
# Set up a principals hierarchy for each service we're testing with
name = "principals"
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_guidchange.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_guidchange.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_guidchange.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -41,7 +41,7 @@
fd = open(self.xmlfile, "w")
fd.write(open(xmlFile.path, "r").read())
fd.close()
- self.directoryService = XMLDirectoryService(self.xmlfile)
+ self.directoryService = XMLDirectoryService({'xmlFile' : self.xmlfile})
# Set up a principals hierarchy for each service we're testing with
name = "principals"
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectory.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -50,7 +50,7 @@
def setUp(self):
super(OpenDirectory, self).setUp()
- self._service = OpenDirectoryService(node="/Search", dosetup=False)
+ self._service = OpenDirectoryService({'node' : "/Search"}, dosetup=False)
def tearDown(self):
for call in self._service._delayedCalls:
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectoryschema.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectoryschema.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_opendirectoryschema.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -135,7 +135,7 @@
)
def test_plists(self):
- service = OpenDirectoryService(node="/Search", dosetup=False)
+ service = OpenDirectoryService({'node' : "/Search"}, dosetup=False)
for item in ODResourceInfoParse.test_bool:
if item[4] is None:
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_principal.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -48,9 +48,25 @@
super(ProvisionedPrincipals, self).setUp()
self.directoryServices = (
- BasicDirectoryService(digestRealm, basicUserFile, groupFile),
- DigestDirectoryService(digestRealm, digestUserFile, groupFile),
- XMLDirectoryService(xmlFile),
+ BasicDirectoryService(
+ {
+ 'realmName' : digestRealm,
+ 'userFile' : basicUserFile,
+ 'groupFile' : groupFile,
+ }
+ ),
+ DigestDirectoryService(
+ {
+ 'realmName' : digestRealm,
+ 'userFile' : digestUserFile,
+ 'groupFile' : groupFile,
+ }
+ ),
+ XMLDirectoryService(
+ {
+ 'xmlFile' : xmlFile,
+ }
+ ),
)
# Set up a principals hierarchy for each service we're testing with
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_proxyprincipalmembers.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -36,7 +36,7 @@
def setUp(self):
super(ProxyPrincipals, self).setUp()
- self.directoryService = XMLDirectoryService(xmlFile)
+ self.directoryService = XMLDirectoryService({'xmlFile' : xmlFile})
# Set up a principals hierarchy for each service we're testing with
self.principalRootResources = {}
Modified: CalendarServer/trunk/twistedcaldav/directory/test/test_xmlfile.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/test/test_xmlfile.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/test/test_xmlfile.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -97,7 +97,7 @@
Test XML file based directory implementation.
"""
def service(self):
- return XMLDirectoryService(self.xmlFile(), alwaysStat=True)
+ return XMLDirectoryService({'xmlFile' : self.xmlFile()}, alwaysStat=True)
def test_changedXML(self):
service = self.service()
Modified: CalendarServer/trunk/twistedcaldav/directory/xmlfile.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/xmlfile.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/directory/xmlfile.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -45,9 +45,17 @@
def __repr__(self):
return "<%s %r: %r>" % (self.__class__.__name__, self.realmName, self.xmlFile)
- def __init__(self, xmlFile, alwaysStat=False):
+ def __init__(self, params, alwaysStat=False):
+
+ defaults = {
+ 'xmlFile' : None,
+ }
+ ignored = None
+ params = self.getParams(params, defaults, ignored)
+
super(XMLDirectoryService, self).__init__()
+ xmlFile = params.get("xmlFile")
if type(xmlFile) is str:
xmlFile = FilePath(xmlFile)
Modified: CalendarServer/trunk/twistedcaldav/test/test_config.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_config.py 2009-05-12 21:33:04 UTC (rev 4239)
+++ CalendarServer/trunk/twistedcaldav/test/test_config.py 2009-05-12 21:50:50 UTC (rev 4240)
@@ -153,9 +153,9 @@
self.assertEquals(config.DirectoryService.type, "twistedcaldav.directory.xmlfile.XMLDirectoryService")
self.assertEquals(config.DirectoryService.params.xmlFile, "/etc/caldavd/accounts.xml")
- config.update({"DirectoryService": {"type": "twistedcaldav.directory.cachingappleopendirectory.OpenDirectoryService"}})
+ config.update({"DirectoryService": {"type": "twistedcaldav.directory.appleopendirectory.OpenDirectoryService"}})
- self.assertEquals(config.DirectoryService.type, "twistedcaldav.directory.cachingappleopendirectory.OpenDirectoryService")
+ self.assertEquals(config.DirectoryService.type, "twistedcaldav.directory.appleopendirectory.OpenDirectoryService")
self.assertNotIn("xmlFile", config.DirectoryService.params)
self.assertEquals(config.DirectoryService.params.node, "/Search")
self.assertEquals(config.DirectoryService.params.restrictEnabledRecords, False)
@@ -164,13 +164,13 @@
self.assertEquals(config.DirectoryService.type, "twistedcaldav.directory.xmlfile.XMLDirectoryService")
self.assertEquals(config.DirectoryService.params.xmlFile, "/etc/caldavd/accounts.xml")
- config.update({"DirectoryService": {"type": "twistedcaldav.directory.cachingappleopendirectory.OpenDirectoryService"}})
+ config.update({"DirectoryService": {"type": "twistedcaldav.directory.appleopendirectory.OpenDirectoryService"}})
config.update({"DirectoryService": {"params": {
"restrictEnabledRecords": True,
"restrictToGroup": "12345",
}}})
- self.assertEquals(config.DirectoryService.type, "twistedcaldav.directory.cachingappleopendirectory.OpenDirectoryService")
+ self.assertEquals(config.DirectoryService.type, "twistedcaldav.directory.appleopendirectory.OpenDirectoryService")
self.assertEquals(config.DirectoryService.params.node, "/Search")
self.assertEquals(config.DirectoryService.params.restrictEnabledRecords, True)
self.assertEquals(config.DirectoryService.params.restrictToGroup, "12345")
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090512/c08a8892/attachment-0001.html>
More information about the calendarserver-changes
mailing list