[CalendarServer-changes] [10688] CalendarServer/trunk/twext/who

source_changes at macosforge.org source_changes at macosforge.org
Mon Feb 11 15:14:20 PST 2013


Revision: 10688
          http://trac.calendarserver.org//changeset/10688
Author:   wsanchez at apple.com
Date:     2013-02-11 15:14:20 -0800 (Mon, 11 Feb 2013)
Log Message:
-----------
Get rid of unknownFieldNames attribute; use unknownFieldElements only.
Add tests for unknown field elements being captured.

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 22:43:01 UTC (rev 10687)
+++ CalendarServer/trunk/twext/who/test/test_xml.py	2013-02-11 23:14:20 UTC (rev 10688)
@@ -150,11 +150,16 @@
 
 
 class BaseTest(object):
-    def _testService(self):
+    def _testService(self, xmlData=None):
         if not hasattr(self, "_service"):
+            if xmlData is None:
+                xmlData = testXMLConfig
+
             filePath = FilePath(self.mktemp())
-            filePath.setContent(testXMLConfig)
+            filePath.setContent(xmlData)
+
             self._service = DirectoryService(filePath)
+
         return self._service
 
 
@@ -248,24 +253,48 @@
         )
 
 
-    def test_unknownRecordTypes(self):
+    def test_unknownRecordTypesClean(self):
         service = self._testService()
-        service.loadRecords()
         self.assertEquals(set(service.unknownRecordTypes), set())
 
 
-    def test_unknownFieldElements(self):
+    def test_unknownRecordTypesDirty(self):
+        service = self._testService(xmlData=
+"""<?xml version="1.0" encoding="utf-8"?>
+
+<directory realm="Unknown Record Types">
+  <record type="camera">
+    <uid>__d600__</uid>
+    <short-name>d600</short-name>
+    <full-name>Nikon D600</full-name>
+  </record>
+</directory>
+"""
+        )
+        self.assertEquals(set(service.unknownRecordTypes), set(("camera",)))
+
+
+    def test_unknownFieldElementsClean(self):
         service = self._testService()
-        service.loadRecords()
         self.assertEquals(set(service.unknownFieldElements), set())
 
 
-    def test_unknownFieldNames(self):
-        service = self._testService()
-        service.loadRecords()
-        self.assertEquals(set(service.unknownFieldNames), set())
+    def test_unknownFieldElementsDirty(self):
+        service = self._testService(xmlData=
+"""<?xml version="1.0" encoding="utf-8"?>
 
+<directory realm="Unknown Record Types">
+  <record type="user">
+    <uid>__wsanchez__</uid>
+    <short-name>wsanchez</short-name>
+    <political-affiliation>Community and Freedom Party</political-affiliation>
+  </record>
+</directory>
+"""
+        )
+        self.assertEquals(set(service.unknownFieldElements), set(("political-affiliation",)))
 
+
     @inlineCallbacks
     def test_updateRecord(self):
         service = self._testService()

Modified: CalendarServer/trunk/twext/who/xml.py
===================================================================
--- CalendarServer/trunk/twext/who/xml.py	2013-02-11 22:43:01 UTC (rev 10687)
+++ CalendarServer/trunk/twext/who/xml.py	2013-02-11 23:14:20 UTC (rev 10688)
@@ -195,11 +195,6 @@
         return self._unknownFieldElements
 
     @property
-    def unknownFieldNames(self):
-        self.loadRecords()
-        return self._unknownFieldNames
-
-    @property
     def index(self):
         self.loadRecords()
         return self._index
@@ -256,13 +251,12 @@
 
         unknownRecordTypes   = set()
         unknownFieldElements = set()
-        unknownFieldNames    = set()
 
         records = set()
 
-        for recordNode in directoryNode.getchildren():
+        for recordNode in directoryNode:
             try:
-                records.add(self.parseRecordNode(recordNode))
+                records.add(self.parseRecordNode(recordNode, unknownFieldElements))
             except UnknownRecordTypeParseError, e:
                 unknownRecordTypes.add(e.token)
 
@@ -290,7 +284,6 @@
 
         self._unknownRecordTypes   = unknownRecordTypes
         self._unknownFieldElements = unknownFieldElements
-        self._unknownFieldNames    = unknownFieldNames
 
         self._index = index
 
@@ -300,7 +293,7 @@
         return etree
 
 
-    def parseRecordNode(self, recordNode, unknownFieldNamesSet=None):
+    def parseRecordNode(self, recordNode, unknownFieldElements=None):
         recordTypeAttribute = recordNode.get(self.attribute.recordType.value, "").encode("utf-8")
         if recordTypeAttribute:
             try:
@@ -313,18 +306,18 @@
         fields = {}
         fields[self.fieldName.recordType] = recordType
 
-        for fieldNode in recordNode.getchildren():
+        for fieldNode in recordNode:
             try:
                 fieldElement = self.element.lookupByValue(fieldNode.tag)
             except ValueError:
-                if unknownFieldNamesSet is not None:
-                    unknownFieldNamesSet.add(fieldNode.tag)
+                if unknownFieldElements is not None:
+                    unknownFieldElements.add(fieldNode.tag)
 
             try:
                 fieldName = fieldElement.fieldName
             except AttributeError:
-                if unknownFieldNamesSet is not None:
-                    unknownFieldNamesSet.add(fieldNode.tag)
+                if unknownFieldElements is not None:
+                    unknownFieldElements.add(fieldNode.tag)
 
             value = fieldNode.text.encode("utf-8")
 
@@ -349,7 +342,6 @@
         self._realmName            = None
         self._unknownRecordTypes   = None
         self._unknownFieldElements = None
-        self._unknownFieldNames    = None
         self._index                = None
         self._cacheTag             = None
         self._lastRefresh          = 0
@@ -446,7 +438,7 @@
 
         # Walk through the record nodes in the XML tree and apply
         # updates.
-        for recordNode in directoryNode.getchildren():
+        for recordNode in directoryNode:
             uid = self._uidForRecordNode(recordNode)
 
             record = recordsByUID.get(uid, None)
@@ -475,7 +467,7 @@
         # Walk through the record nodes in the XML tree and start
         # zapping.
         #
-        for recordNode in directoryNode.getchildren():
+        for recordNode in directoryNode:
             uid = self._uidForRecordNode(recordNode)
 
             if uid in uids:
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20130211/a97e4e40/attachment.html>


More information about the calendarserver-changes mailing list