[CalendarServer-changes] [1270] CalendarServer/trunk/twistedcaldav
source_changes at macosforge.org
source_changes at macosforge.org
Mon Feb 26 09:29:18 PST 2007
Revision: 1270
http://trac.macosforge.org/projects/calendarserver/changeset/1270
Author: dreid at apple.com
Date: 2007-02-26 09:29:17 -0800 (Mon, 26 Feb 2007)
Log Message:
-----------
Rework the Config object to support reloading, as well as updating the defaults.
Add test cases for same.
Modified Paths:
--------------
CalendarServer/trunk/twistedcaldav/config.py
CalendarServer/trunk/twistedcaldav/test/test_config.py
Modified: CalendarServer/trunk/twistedcaldav/config.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/config.py 2007-02-26 16:27:48 UTC (rev 1269)
+++ CalendarServer/trunk/twistedcaldav/config.py 2007-02-26 17:29:17 UTC (rev 1270)
@@ -17,6 +17,7 @@
##
import os
+import copy
from twistedcaldav.py.plistlib import readPlist
@@ -141,15 +142,38 @@
},
}
+
class Config (object):
def __init__(self, defaults):
- self.update(defaults)
+ self._defaults = defaults
+ self._data = copy.deepcopy(defaults)
+ self._configFile = None
def update(self, items):
- items = items.iteritems()
- for key, value in items:
- setattr(self, key, value)
+ self._data.update(items)
+ def updateDefaults(self, items):
+ self._defaults.update(items)
+ self.update(items)
+
+ def __getattr__(self, attr):
+ if attr in self._data:
+ return self._data[attr]
+
+ raise AttributeError(attr)
+
+ def reload(self):
+ self._data = copy.deepcopy(self._defaults)
+ self.loadConfig(self._configFile)
+
+ def loadConfig(self, configFile):
+ self._configFile = configFile
+
+ if configFile and os.path.exists(configFile):
+ plist = readPlist(configFile)
+ self.update(plist)
+
+
class ConfigurationError (RuntimeError):
"""
Invalid server configuration.
@@ -158,6 +182,4 @@
config = Config(defaultConfig)
def parseConfig(configFile):
- if os.path.exists(configFile):
- plist = readPlist(configFile)
- config.update(plist)
+ config.loadConfig(configFile)
Modified: CalendarServer/trunk/twistedcaldav/test/test_config.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/test/test_config.py 2007-02-26 16:27:48 UTC (rev 1269)
+++ CalendarServer/trunk/twistedcaldav/test/test_config.py 2007-02-26 17:29:17 UTC (rev 1270)
@@ -18,6 +18,8 @@
from twisted.trial import unittest
+from twistedcaldav.py.plistlib import writePlist
+
from twistedcaldav.config import config, defaultConfig, parseConfig
testConfig = """<?xml version="1.0" encoding="UTF-8"?>
@@ -26,6 +28,8 @@
<dict>
<key>Verbose</key>
<true/>
+ <key>HTTPPort</key>
+ <integer>8008</integer>
</dict>
</plist>
"""
@@ -38,8 +42,7 @@
def testDefaults(self):
for key, value in defaultConfig.iteritems():
- self.failUnless(key in config.__dict__)
- self.assertEquals(config.__dict__[key], value)
+ self.assertEquals(getattr(config, key), value)
def testParseConfig(self):
self.assertEquals(config.Verbose, False)
@@ -47,7 +50,7 @@
parseConfig(self.testConfig)
self.assertEquals(config.Verbose, True)
-
+
def testScoping(self):
def getVerbose():
self.assertEquals(config.Verbose, True)
@@ -59,3 +62,53 @@
self.assertEquals(config.Verbose, True)
getVerbose()
+
+ def testReloading(self):
+ self.assertEquals(config.HTTPPort, None)
+
+ parseConfig(self.testConfig)
+
+ self.assertEquals(config.HTTPPort, 8008)
+
+ writePlist({}, self.testConfig)
+
+ config.reload()
+
+ self.assertEquals(config.HTTPPort, None)
+
+ def testUpdateAndReload(self):
+ self.assertEquals(config.HTTPPort, None)
+
+ parseConfig(self.testConfig)
+
+ self.assertEquals(config.HTTPPort, 8008)
+
+ config.update({'HTTPPort': 80})
+
+ self.assertEquals(config.HTTPPort, 80)
+
+ config.reload()
+
+ self.assertEquals(config.HTTPPort, 8008)
+
+ def testUpdating(self):
+ self.assertEquals(config.SSLPort, None)
+
+ config.update({'SSLPort': 8443})
+
+ self.assertEquals(config.SSLPort, 8443)
+
+ def testUpdateDefaults(self):
+ self.assertEquals(config.SSLPort, None)
+
+ parseConfig(self.testConfig)
+
+ config.updateDefaults({'SSLPort': 8009})
+
+ self.assertEquals(config.SSLPort, 8009)
+
+ config.reload()
+
+ self.assertEquals(config.SSLPort, 8009)
+
+ config.updateDefaults({'SSLPort': None})
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070226/157948af/attachment.html
More information about the calendarserver-changes
mailing list