[CalendarServer-changes] [5345] CalendarServer/trunk/twistedcaldav/config.py

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 17 16:38:55 PDT 2010


Revision: 5345
          http://trac.macosforge.org/projects/calendarserver/changeset/5345
Author:   wsanchez at apple.com
Date:     2010-03-17 16:38:53 -0700 (Wed, 17 Mar 2010)
Log Message:
-----------
Update on-demand

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/config.py

Modified: CalendarServer/trunk/twistedcaldav/config.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/config.py	2010-03-17 18:54:05 UTC (rev 5344)
+++ CalendarServer/trunk/twistedcaldav/config.py	2010-03-17 23:38:53 UTC (rev 5345)
@@ -134,18 +134,22 @@
             self._provider = ConfigProvider()
         else:
             self._provider = provider
-        self._preUpdateHooks = list()
-        self._postUpdateHooks = list()
+        self._updating = False
+        self._preUpdateHooks = []
+        self._postUpdateHooks = []
         self.reset()
-        self.update()
         
     def __setattr__(self, attr, value):
         if "_data" in self.__dict__ and attr in self.__dict__["_data"]:
             self._data[attr] = value
         else:
             self.__dict__[attr] = value
+        self.__dict__["_dirty"] = True
 
     def __getattr__(self, attr):
+        if self._dirty:
+            self.update()
+
         if attr in self._data:
             return self._data[attr]
         raise AttributeError(attr)
@@ -164,15 +168,13 @@
                 lastDict[attr] = ConfigDict()
             lastDict = lastDict.__getattr__(part)
         configItem = parts[-1]
+
         if configItem in lastDict:
             return lastDict[configItem]
         else:
             lastDict[configItem] = defaultValue
             return defaultValue
 
-    def getInt(self, attr, defaultValue):
-        return int(self.get(attr, defaultValue))
-
     def addPreUpdateHooks(self, hooks):
         self._preUpdateHooks.extend(hooks)
         
@@ -195,8 +197,13 @@
         self.update(items)
 
     def update(self, items=None):
+        if self._updating:
+            return
+        self._updating = True
+
         if not isinstance(items, ConfigDict):
             items = ConfigDict(items)
+
         # Call hooks
         for hook in self._preUpdateHooks:
             hook(self._data, items)
@@ -204,6 +211,9 @@
         for hook in self._postUpdateHooks:
             hook(self._data)
 
+        self._updating = False
+        self._dirty = False
+
     def load(self, configFile):
         self._provider.setConfigFileName(configFile)
         configDict = ConfigDict(self._provider.loadConfig())
@@ -225,6 +235,7 @@
 
     def reset(self):
         self._data = ConfigDict(copy.deepcopy(self._provider.getDefaults()))
+        self._dirty = True
 
 def _mergeData(oldData, newData):
     for key, value in newData.iteritems():
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100317/e2288d13/attachment-0001.html>


More information about the calendarserver-changes mailing list