[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