[CalendarServer-changes] [10681] CalendarServer/trunk/twext/who/xml.py
source_changes at macosforge.org
source_changes at macosforge.org
Mon Feb 11 12:08:51 PST 2013
Revision: 10681
http://trac.calendarserver.org//changeset/10681
Author: wsanchez at apple.com
Date: 2013-02-11 12:08:51 -0800 (Mon, 11 Feb 2013)
Log Message:
-----------
Avoid looking up recordTypes repeatedly in a loop within a loop.
Modified Paths:
--------------
CalendarServer/trunk/twext/who/xml.py
Modified: CalendarServer/trunk/twext/who/xml.py
===================================================================
--- CalendarServer/trunk/twext/who/xml.py 2013-02-11 19:54:14 UTC (rev 10680)
+++ CalendarServer/trunk/twext/who/xml.py 2013-02-11 20:08:51 UTC (rev 10681)
@@ -396,10 +396,33 @@
def updateRecords(self, records, create=False):
self.flush()
- etree = self.loadRecords(loadNow=True)
+ #
+ # Index the records to update by UID
+ #
recordsByUID = dict(((record.uid, record) for record in records))
+ #
+ # Find the record types and field names that our parser can
+ # map to.
+ #
+ recordTypes = set()
+ for valueName in self.value.iterconstants():
+ recordType = getattr(valueName, "recordType", None)
+ if recordType is not None:
+ recordTypes.add(recordType)
+
+ fieldNames = set()
+ for elementName in self.element.iterconstants():
+ fieldName = getattr(elementName, "fieldName", None)
+ if fieldName is not None:
+ fieldNames.add(fieldName)
+
+ #
+ # Walk through the record nodes in the XML tree
+ #
+ etree = self.loadRecords(loadNow=True)
+
directoryNode = etree.getroot()
for recordNode in directoryNode.getchildren():
@@ -414,11 +437,8 @@
for (name, value) in record.fields.items():
if name == self.fieldName.recordType:
- # FIXME: This lookup of the record type value is a bit much to do in a loop
- for valueName in self.value.iterconstants():
- if getattr(valueName, "recordType", None) == value:
- recordNode.set(self.attribute.recordType.value, valueName.value)
- break
+ if value in recordTypes:
+ recordNode.set(self.attribute.recordType.value, valueName.value)
else:
raise AssertionError("Unknown record type: %r" % (value,))
else:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130211/43160850/attachment.html>
More information about the calendarserver-changes
mailing list