[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