[CalendarServer-changes] [10684] CalendarServer/trunk/twext/who
source_changes at macosforge.org
source_changes at macosforge.org
Mon Feb 11 13:45:31 PST 2013
Revision: 10684
http://trac.calendarserver.org//changeset/10684
Author: wsanchez at apple.com
Date: 2013-02-11 13:45:31 -0800 (Mon, 11 Feb 2013)
Log Message:
-----------
Implement adding new records via updateRecords().
Modified Paths:
--------------
CalendarServer/trunk/twext/who/test/test_xml.py
CalendarServer/trunk/twext/who/xml.py
Modified: CalendarServer/trunk/twext/who/test/test_xml.py
===================================================================
--- CalendarServer/trunk/twext/who/test/test_xml.py 2013-02-11 21:28:33 UTC (rev 10683)
+++ CalendarServer/trunk/twext/who/test/test_xml.py 2013-02-11 21:45:31 UTC (rev 10684)
@@ -312,9 +312,7 @@
record = (yield service.recordWithUID("__plugh__"))
self.assertEquals(set(record.shortNames), set(("plugh",)))
- test_addRecord.todo = "Not implemented."
-
def test_addRecordNoCreate(self):
service = self._testService()
Modified: CalendarServer/trunk/twext/who/xml.py
===================================================================
--- CalendarServer/trunk/twext/who/xml.py 2013-02-11 21:28:33 UTC (rev 10683)
+++ CalendarServer/trunk/twext/who/xml.py 2013-02-11 21:45:31 UTC (rev 10684)
@@ -390,8 +390,6 @@
def updateRecords(self, records, create=False):
- self.flush()
-
#
# Index the records to update by UID
#
@@ -416,12 +414,43 @@
del elementName
#
- # Walk through the record nodes in the XML tree
+ # Drop cached data and load the XML DOM.
#
+ self.flush()
+
etree = self.loadRecords(loadNow=True)
directoryNode = etree.getroot()
+ def fillRecordNode(recordNode, record):
+ for (name, value) in record.fields.items():
+ if name == self.fieldName.recordType:
+ if value in recordTypes:
+ recordNode.set(self.attribute.recordType.value, recordTypes[value])
+ else:
+ raise AssertionError("Unknown record type: %r" % (value,))
+
+ else:
+ if name in fieldNames:
+ tag = fieldNames[name]
+
+ if self.fieldName.isMultiValue(name):
+ values = value
+ else:
+ values = (value,)
+
+ for value in values:
+ subNode = XMLElement(tag)
+ subNode.text = value
+ recordNode.append(subNode)
+
+ else:
+ raise AssertionError("Unknown field name: %r" % (name,))
+
+ #
+ # Walk through the record nodes in the XML tree and apply
+ # updates.
+ #
for recordNode in directoryNode.getchildren():
uidNode = recordNode.find(self.element.uid.value)
if uidNode is None:
@@ -431,38 +460,17 @@
if record:
recordNode.clear()
-
- for (name, value) in record.fields.items():
- if name == self.fieldName.recordType:
- if value in recordTypes:
- recordNode.set(self.attribute.recordType.value, recordTypes[value])
- else:
- raise AssertionError("Unknown record type: %r" % (value,))
-
- else:
- if name in fieldNames:
- tag = fieldNames[name]
-
- if self.fieldName.isMultiValue(name):
- values = value
- else:
- values = (value,)
-
- for value in values:
- subNode = XMLElement(tag)
- subNode.text = value
- recordNode.append(subNode)
-
- else:
- raise AssertionError("Unknown field name: %r" % (name,))
-
+ fillRecordNode(recordNode, record)
del recordsByUID[record.uid]
if recordsByUID:
if not create:
return fail(NoSuchRecordError(recordsByUID.keys()))
- raise NotImplementedError("Add new records.")
+ for uid, record in recordsByUID.items():
+ recordNode = XMLElement(self.element.record.value)
+ fillRecordNode(recordNode, record)
+ directoryNode.append(recordNode)
self.filePath.setContent(etreeToString(directoryNode))
self.flush()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130211/c7e142ba/attachment.html>
More information about the calendarserver-changes
mailing list