[CalendarServer-changes] [1784]
CalendarServer/branches/release/CalendarServer-1.0-dev/twistedcaldav
/directory/appleopendirectory.py
source_changes at macosforge.org
source_changes at macosforge.org
Sat Aug 11 12:32:37 PDT 2007
Revision: 1784
http://trac.macosforge.org/projects/calendarserver/changeset/1784
Author: wsanchez at apple.com
Date: 2007-08-11 12:32:36 -0700 (Sat, 11 Aug 2007)
Log Message:
-----------
Pulled up r1771 r1772 r1773 r1775 r1778 r1782 from trunk.
Modified Paths:
--------------
CalendarServer/branches/release/CalendarServer-1.0-dev/twistedcaldav/directory/appleopendirectory.py
Modified: CalendarServer/branches/release/CalendarServer-1.0-dev/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-1.0-dev/twistedcaldav/directory/appleopendirectory.py 2007-08-10 21:20:10 UTC (rev 1783)
+++ CalendarServer/branches/release/CalendarServer-1.0-dev/twistedcaldav/directory/appleopendirectory.py 2007-08-11 19:32:36 UTC (rev 1784)
@@ -353,17 +353,12 @@
DirectoryService.recordType_resources,
)
- def recordsForType(self, recordType):
- """
- @param recordType: a record type
- @return: a dictionary containing all records for the given record
- type. Keys are short names and values are the cooresponding
- OpenDirectoryRecord for the given record type.
- """
+ def _storage(self, recordType):
try:
storage = self._records[recordType]
except KeyError:
self.reloadCache(recordType)
+ storage = self._records[recordType]
else:
if storage["status"] == "stale":
storage["status"] = "loading"
@@ -376,8 +371,17 @@
d = deferToThread(self.reloadCache, recordType)
d.addErrback(onError)
- return self._records[recordType]["records"]
+ return storage
+ def recordsForType(self, recordType):
+ """
+ @param recordType: a record type
+ @return: a dictionary containing all records for the given record
+ type. Keys are short names and values are the cooresponding
+ OpenDirectoryRecord for the given record type.
+ """
+ return self._storage(recordType)["records"]
+
def listRecords(self, recordType):
return self.recordsForType(recordType).itervalues()
@@ -390,6 +394,15 @@
self.reloadCache(recordType, shortName)
return self.recordsForType(recordType).get(shortName, None)
+ def recordWithGUID(self, guid):
+ # Override super's implementation with something faster.
+ for recordType in self.recordTypes():
+ record = self._storage(recordType)["guids"].get(guid, None)
+ if record:
+ return record
+ else:
+ return None
+
def reloadCache(self, recordType, shortName=None):
log.msg("Reloading %s record cache" % (recordType,))
@@ -434,8 +447,6 @@
else:
query = dsquery.expression(dsquery.expression.AND, (subquery, query))
- records = {}
-
try:
if query:
if isinstance(query, dsquery.match):
@@ -466,6 +477,9 @@
log.msg("Open Directory (node=%s) error: %s" % (self.realmName, str(ex)))
raise
+ records = {}
+ guids = {}
+
for (key, value) in results.iteritems():
if self.requireComputerRecord:
services = value.get(dsattributes.kDSNAttrServicesLocator)
@@ -504,7 +518,7 @@
if proxy:
proxyGUIDs = (proxy,)
- records[recordShortName] = OpenDirectoryRecord(
+ record = OpenDirectoryRecord(
service = self,
recordType = recordType,
guid = guid,
@@ -515,6 +529,7 @@
autoSchedule = autoSchedule,
proxyGUIDs = proxyGUIDs,
)
+ records[recordShortName] = guids[guid] = record
#log.debug("Populated record: %s" % (records[recordShortName],))
@@ -523,8 +538,9 @@
# Replace the entire cache
#
storage = {
- "status": "new",
+ "status" : "new",
"records": records,
+ "guids" : guids,
}
def rot():
@@ -545,7 +561,9 @@
# Update one record, if found
#
assert len(records) == 1, "shortName = %r, records = %r" % (shortName, len(records))
- self._records[recordType]["records"][shortName] = records[recordShortName]
+ storage = self._records[recordType]
+ storage["records"][shortName] = record
+ storage["guids"][record.guid] = record
class OpenDirectoryRecord(DirectoryRecord):
"""
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20070811/c2e012f0/attachment.html
More information about the calendarserver-changes
mailing list