[CalendarServer-changes] [6350] CalendarServer/trunk/twistedcaldav

source_changes at macosforge.org source_changes at macosforge.org
Thu Sep 23 08:31:49 PDT 2010


Revision: 6350
          http://trac.macosforge.org/projects/calendarserver/changeset/6350
Author:   cdaboo at apple.com
Date:     2010-09-23 08:31:48 -0700 (Thu, 23 Sep 2010)
Log Message:
-----------
Handle new ElementTree api in Python 2.7.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/directory/calendaruserproxyloader.py
    CalendarServer/trunk/twistedcaldav/directory/xmlaugmentsparser.py
    CalendarServer/trunk/twistedcaldav/directory/xmlfile.py
    CalendarServer/trunk/twistedcaldav/xmlutil.py

Modified: CalendarServer/trunk/twistedcaldav/directory/calendaruserproxyloader.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/calendaruserproxyloader.py	2010-09-23 04:52:57 UTC (rev 6349)
+++ CalendarServer/trunk/twistedcaldav/directory/calendaruserproxyloader.py	2010-09-23 15:31:48 UTC (rev 6350)
@@ -23,8 +23,6 @@
 ]
 
 import types
-from xml.etree.ElementTree import ElementTree
-from xml.parsers.expat import ExpatError
 
 from twisted.internet.defer import inlineCallbacks
 
@@ -32,6 +30,7 @@
 
 from twistedcaldav.config import config, fullServerPath
 from twistedcaldav.directory import calendaruserproxy
+from twistedcaldav.xmlutil import readXML
 
 log = Logger()
 
@@ -59,15 +58,10 @@
 
         # Read in XML
         try:
-            tree = ElementTree(file=self.xmlFile)
-        except ExpatError, e:
-            log.error("Unable to parse file '%s' because: %s" % (self.xmlFile, e,), raiseException=RuntimeError)
+            _ignore_tree, proxies_node = readXML(self.xmlFile, ELEMENT_PROXIES)
+        except ValueError, e:
+            log.error("XML parse error for '%s' because: %s" % (self.xmlFile, e,), raiseException=RuntimeError)
 
-        # Verify that top-level element is correct
-        proxies_node = tree.getroot()
-        if proxies_node.tag != ELEMENT_PROXIES:
-            log.error("Ignoring file '%s' because it is not a proxies file" % (self.xmlFile,), raiseException=RuntimeError)
-
         self._parseXML(proxies_node)
 
     def _parseXML(self, rootnode):

Modified: CalendarServer/trunk/twistedcaldav/directory/xmlaugmentsparser.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/xmlaugmentsparser.py	2010-09-23 04:52:57 UTC (rev 6349)
+++ CalendarServer/trunk/twistedcaldav/directory/xmlaugmentsparser.py	2010-09-23 15:31:48 UTC (rev 6350)
@@ -22,12 +22,12 @@
     "XMLAugmentsParser",
 ]
 
-from xml.etree.ElementTree import ElementTree
-from xml.parsers.expat import ExpatError
 import types
 
 from twext.python.log import Logger
 
+from twistedcaldav.xmlutil import readXML
+
 log = Logger()
 
 ELEMENT_AUGMENTS          = "augments"
@@ -68,15 +68,10 @@
 
         # Read in XML
         try:
-            tree = ElementTree(file=self.xmlFile)
-        except ExpatError, e:
-            log.error("Unable to parse file '%s' because: %s" % (self.xmlFile, e,), raiseException=RuntimeError)
+            _ignore_tree, augments_node = readXML(self.xmlFile, ELEMENT_AUGMENTS)
+        except ValueError, e:
+            log.error("XML parse error for '%s' because: %s" % (self.xmlFile, e,), raiseException=RuntimeError)
 
-        # Verify that top-level element is correct
-        augments_node = tree.getroot()
-        if augments_node.tag != ELEMENT_AUGMENTS:
-            log.error("Ignoring file '%s' because it is not a augments file" % (self.xmlFile,), raiseException=RuntimeError)
-
         self._parseXML(augments_node)
 
     def _parseXML(self, rootnode):

Modified: CalendarServer/trunk/twistedcaldav/directory/xmlfile.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/xmlfile.py	2010-09-23 04:52:57 UTC (rev 6349)
+++ CalendarServer/trunk/twistedcaldav/directory/xmlfile.py	2010-09-23 15:31:48 UTC (rev 6350)
@@ -34,11 +34,9 @@
 from twistedcaldav.config import fullServerPath
 from twistedcaldav.directory import augment
 from twistedcaldav.directory.directory import DirectoryService, DirectoryRecord, DirectoryError
-from twistedcaldav.directory.cachingdirectory import CachingDirectoryService,\
-    CachingDirectoryRecord
 from twistedcaldav.directory.xmlaccountsparser import XMLAccountsParser, XMLAccountRecord
 from twistedcaldav.scheduling.cuaddress import normalizeCUAddr
-import xml.etree.ElementTree as ET
+from twistedcaldav.xmlutil import addSubElement, createElement, elementToXML
 from uuid import uuid4
 
 
@@ -356,19 +354,19 @@
         }
         xmlType = xmlTypes[principal.recordType]
 
-        element = ET.SubElement(parent, xmlType)
+        element = addSubElement(parent, xmlType)
         for value in principal.shortNames:
-            ET.SubElement(element, "uid").text = value
-        ET.SubElement(element, "guid").text = principal.guid
-        ET.SubElement(element, "name").text = principal.fullName
-        ET.SubElement(element, "first-name").text = principal.firstName
-        ET.SubElement(element, "last-name").text = principal.lastName
+            addSubElement(element, "uid", text=value)
+        addSubElement(element, "guid", text=principal.guid)
+        addSubElement(element, "name", text=principal.fullName)
+        addSubElement(element, "first-name", text=principal.firstName)
+        addSubElement(element, "last-name", text=principal.lastName)
         for value in principal.emailAddresses:
-            ET.SubElement(element, "email-address").text = value
+            addSubElement(element, "email-address", text=value)
         if principal.extras:
-            extrasElement = ET.SubElement(element, "extras")
+            extrasElement = addSubElement(element, "extras")
             for key, value in principal.extras.iteritems():
-                ET.SubElement(extrasElement, key).text = value
+                addSubElement(extrasElement, key, text=value)
 
         return element
 
@@ -392,7 +390,7 @@
 
         indent(element)
 
-        self.xmlFile.setContent(ET.tostring(element))
+        self.xmlFile.setContent(elementToXML(element))
 
 
     def createRecord(self, recordType, guid=None, shortNames=(), authIDs=set(),
@@ -413,7 +411,7 @@
         # Make sure latest XML records are read in
         accounts = self._forceReload()
 
-        accountsElement = ET.Element("accounts", realm=self.realmName)
+        accountsElement = createElement("accounts", realm=self.realmName)
         for recType in self.recordTypes():
             for xmlPrincipal in accounts[recType].itervalues():
                 if xmlPrincipal.guid == guid:
@@ -451,7 +449,7 @@
         # Make sure latest XML records are read in
         accounts = self._forceReload()
 
-        accountsElement = ET.Element("accounts", realm=self.realmName)
+        accountsElement = createElement("accounts", realm=self.realmName)
         for recType in self.recordTypes():
 
             for xmlPrincipal in accounts[recType].itervalues():
@@ -475,7 +473,7 @@
         # Make sure latest XML records are read in
         accounts = self._forceReload()
 
-        accountsElement = ET.Element("accounts", realm=self.realmName)
+        accountsElement = createElement("accounts", realm=self.realmName)
         for recType in self.recordTypes():
 
             for xmlPrincipal in accounts[recType].itervalues():
@@ -507,7 +505,7 @@
         knownGUIDs = { }
         knownShortNames = { }
 
-        accountsElement = ET.Element("accounts", realm=self.realmName)
+        accountsElement = createElement("accounts", realm=self.realmName)
         for recType in self.recordTypes():
             for xmlPrincipal in accounts[recType].itervalues():
                 self._addElement(accountsElement, xmlPrincipal)

Modified: CalendarServer/trunk/twistedcaldav/xmlutil.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/xmlutil.py	2010-09-23 04:52:57 UTC (rev 6349)
+++ CalendarServer/trunk/twistedcaldav/xmlutil.py	2010-09-23 15:31:48 UTC (rev 6350)
@@ -16,8 +16,11 @@
 
 from __future__ import with_statement
 
-from xml.etree.ElementTree import Element, ElementTree, SubElement, tostring
-from xml.parsers.expat import ExpatError
+import xml.etree.ElementTree as XML
+try:
+    from xml.etree.ElementTree import ParseError as XMLParseError
+except ImportError:
+    from xml.parsers.expat import ExpatError as XMLParseError
 
 # Utilities for working with ElementTree
 
@@ -35,8 +38,8 @@
 
     # Read in XML
     try:
-        etree = ElementTree(file=xmlfile)
-    except ExpatError, e:
+        etree = XML.ElementTree(file=xmlfile)
+    except XMLParseError, e:
         raise ValueError("Unable to parse file '%s' because: %s" % (xmlfile, e,))
 
     if expectedRootTag:
@@ -46,6 +49,9 @@
     
     return etree, etree.getroot()
 
+def elementToXML(element):
+    return XML.tostring(element)
+
 def writeXML(xmlfile, root):
     
     data = """<?xml version="1.0" encoding="utf-8"?>
@@ -70,7 +76,7 @@
                 node.getchildren()[-1].tail = "\n" + " " * level * INDENT
 
     _indentNode(root, 0)
-    data += tostring(root) + "\n"
+    data += XML.tostring(root) + "\n"
 
     with open(xmlfile, "w") as f:
         f.write(data)
@@ -78,19 +84,19 @@
 def newElementTreeWithRoot(roottag):
 
     root = createElement(roottag)
-    etree = ElementTree(root)
+    etree = XML.ElementTree(root)
     
     return etree, root
 
-def createElement(tag, text=None):
+def createElement(tag, text=None, **attrs):
 
-    child = Element(tag)
+    child = XML.Element(tag, attrs)
     child.text = text
     return child
 
 def addSubElement(parent, tag, text=None):
 
-    child = SubElement(parent, tag)
+    child = XML.SubElement(parent, tag)
     child.text = text
     return child
 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20100923/bb36b05c/attachment-0001.html>


More information about the calendarserver-changes mailing list