[CalendarServer-changes] [10648] CalendarServer/trunk/twext/who/xml.py
source_changes at macosforge.org
source_changes at macosforge.org
Mon Feb 4 16:40:53 PST 2013
Revision: 10648
http://trac.calendarserver.org//changeset/10648
Author: wsanchez at apple.com
Date: 2013-02-04 16:40:53 -0800 (Mon, 04 Feb 2013)
Log Message:
-----------
Add refresh interval check.
Modified Paths:
--------------
CalendarServer/trunk/twext/who/xml.py
Modified: CalendarServer/trunk/twext/who/xml.py
===================================================================
--- CalendarServer/trunk/twext/who/xml.py 2013-02-04 23:23:59 UTC (rev 10647)
+++ CalendarServer/trunk/twext/who/xml.py 2013-02-05 00:40:53 UTC (rev 10648)
@@ -25,6 +25,8 @@
"DirectoryRecord",
]
+from time import time
+
from xml.etree.ElementTree import parse as parseXML
from xml.etree.ElementTree import ParseError as XMLParseError
@@ -141,7 +143,9 @@
self.filePath = filePath
self.refreshInterval = refreshInterval
+ self.flush()
+
def __repr__(self):
return "<%s %s>" % (
self.__class__.__name__,
@@ -151,8 +155,7 @@
@property
def realmName(self):
- if not hasattr(self, "_realmName"):
- self.loadRecords()
+ self.loadRecords()
return self._realmName
@realmName.setter
@@ -162,31 +165,41 @@
@property
def unknownRecordTypes(self):
- if not hasattr(self, "_unknownRecordTypes"):
- self.loadRecords()
+ self.loadRecords()
return self._unknownRecordTypes
@property
def unknownFieldElements(self):
- if not hasattr(self, "_unknownFieldElements"):
- self.loadRecords()
+ self.loadRecords()
return self._unknownFieldElements
@property
def unknownFieldNames(self):
- if not hasattr(self, "_unknownFieldNames"):
- self.loadRecords()
+ self.loadRecords()
return self._unknownFieldNames
@property
def index(self):
- if not hasattr(self, "_index"):
- self.loadRecords()
+ self.loadRecords()
return self._index
def loadRecords(self):
#
+ # Punt if we've read the file recently
+ #
+ now = time()
+ if now - self._lastRefresh < self.refreshInterval:
+ return
+
+ #
+ # Punt if we've read the file and it's still the same.
+ #
+ cacheTag = (self.filePath.getmtime(), self.filePath.getsize())
+ if cacheTag == self._cacheTag:
+ return
+
+ #
# Open and parse the file
#
try:
@@ -286,7 +299,20 @@
self._index = index
+ self._cacheTag = cacheTag
+ self._lastRefresh = now
+
+ def flush(self):
+ self._realmName = None
+ self._unknownRecordTypes = None
+ self._unknownFieldElements = None
+ self._unknownFieldNames = None
+ self._index = None
+ self._cacheTag = None
+ self._lastRefresh = 0
+
+
def indexedRecordsFromMatchExpression(self, expression):
if expression.matchType != MatchType.equals:
raise NotImplementedError("Handle MatchType != equals")
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130204/b002297e/attachment.html>
More information about the calendarserver-changes
mailing list