[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