[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