[CalendarServer-changes] [10682] CalendarServer/trunk/twext/who/xml.py
source_changes at macosforge.org
source_changes at macosforge.org
Mon Feb 11 13:19:13 PST 2013
Revision: 10682
http://trac.calendarserver.org//changeset/10682
Author: wsanchez at apple.com
Date: 2013-02-11 13:19:13 -0800 (Mon, 11 Feb 2013)
Log Message:
-----------
Avoid looking up fieldName 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 20:08:51 UTC (rev 10681)
+++ CalendarServer/trunk/twext/who/xml.py 2013-02-11 21:19:13 UTC (rev 10682)
@@ -403,20 +403,22 @@
recordsByUID = dict(((record.uid, record) for record in records))
#
- # Find the record types and field names that our parser can
- # map to.
+ # Index the record type -> attribute and field name -> element
+ # mappings.
#
- recordTypes = set()
+ recordTypes = {}
for valueName in self.value.iterconstants():
recordType = getattr(valueName, "recordType", None)
if recordType is not None:
- recordTypes.add(recordType)
+ recordTypes[recordType] = valueName.value
+ del valueName
- fieldNames = set()
+ fieldNames = {}
for elementName in self.element.iterconstants():
fieldName = getattr(elementName, "fieldName", None)
if fieldName is not None:
- fieldNames.add(fieldName)
+ fieldNames[fieldName] = elementName.value
+ del elementName
#
# Walk through the record nodes in the XML tree
@@ -438,24 +440,24 @@
for (name, value) in record.fields.items():
if name == self.fieldName.recordType:
if value in recordTypes:
- recordNode.set(self.attribute.recordType.value, valueName.value)
+ recordNode.set(self.attribute.recordType.value, recordTypes[value])
else:
raise AssertionError("Unknown record type: %r" % (value,))
+
else:
- # FIXME: This lookup of the field name element is a bit much to do in a loop
- for elementName in self.element.iterconstants():
- if getattr(elementName, "fieldName", None) == name:
- if self.fieldName.isMultiValue(name):
- values = value
- else:
- values = (value,)
+ if name in fieldNames:
+ tag = fieldNames[name]
- for value in values:
- subNode = XMLElement(tag=elementName.value)
- subNode.text = value
- recordNode.append(subNode)
+ if self.fieldName.isMultiValue(name):
+ values = value
+ else:
+ values = (value,)
- break
+ for value in values:
+ subNode = XMLElement(tag)
+ subNode.text = value
+ recordNode.append(subNode)
+
else:
raise AssertionError("Unknown field name: %r" % (name,))
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130211/660c8f9a/attachment.html>
More information about the calendarserver-changes
mailing list