[CalendarServer-changes] [8903] CalendarServer/trunk/txdav/xml
source_changes at macosforge.org
source_changes at macosforge.org
Fri Mar 16 17:12:13 PDT 2012
Revision: 8903
http://trac.macosforge.org/projects/calendarserver/changeset/8903
Author: wsanchez at apple.com
Date: 2012-03-16 17:12:13 -0700 (Fri, 16 Mar 2012)
Log Message:
-----------
Add AbstractWebDAVDocument
Modified Paths:
--------------
CalendarServer/trunk/txdav/xml/parser_sax.py
Added Paths:
-----------
CalendarServer/trunk/txdav/xml/parser_base.py
Added: CalendarServer/trunk/txdav/xml/parser_base.py
===================================================================
--- CalendarServer/trunk/txdav/xml/parser_base.py (rev 0)
+++ CalendarServer/trunk/txdav/xml/parser_base.py 2012-03-17 00:12:13 UTC (rev 8903)
@@ -0,0 +1,74 @@
+##
+# Copyright (c) 2005-2012 Apple Computer, Inc. All rights reserved.
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to deal
+# in the Software without restriction, including without limitation the rights
+# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+# copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in all
+# copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+# SOFTWARE.
+##
+
+__all__ = [
+ "AbstractWebDAVDocument",
+]
+
+from cStringIO import StringIO
+
+from txdav.xml.base import WebDAVElement
+
+
+class AbstractWebDAVDocument(object):
+ """
+ WebDAV XML document.
+ """
+ @classmethod
+ def fromStream(cls, source):
+ raise NotImplementedError()
+
+ @classmethod
+ def fromString(cls, source):
+ source = StringIO(source)
+ try:
+ return cls.fromStream(source)
+ finally:
+ source.close()
+
+ def __init__(self, root_element):
+ """
+ root_element must be a WebDAVElement instance.
+ """
+ super(AbstractWebDAVDocument, self).__init__()
+
+ if not isinstance(root_element, WebDAVElement):
+ raise ValueError("Not a WebDAVElement: %r" % (root_element,))
+
+ self.root_element = root_element
+
+ def __str__(self):
+ return self.toxml()
+
+ def __eq__(self, other):
+ if isinstance(other, AbstractWebDAVDocument):
+ return self.root_element == other.root_element
+ else:
+ return NotImplemented
+
+ def writeXML(self, output):
+ raise NotImplementedError()
+
+ def toxml(self):
+ output = StringIO()
+ self.writeXML(output)
+ return output.getvalue()
Modified: CalendarServer/trunk/txdav/xml/parser_sax.py
===================================================================
--- CalendarServer/trunk/txdav/xml/parser_sax.py 2012-03-17 00:11:47 UTC (rev 8902)
+++ CalendarServer/trunk/txdav/xml/parser_sax.py 2012-03-17 00:12:13 UTC (rev 8903)
@@ -24,12 +24,12 @@
"WebDAVDocument",
]
-import cStringIO as StringIO
import xml.dom.minidom
import xml.sax
-from txdav.xml.base import WebDAVElement, WebDAVUnknownElement, PCDATAElement
+from txdav.xml.base import WebDAVUnknownElement, PCDATAElement
from txdav.xml.element import _elements_by_qname
+from txdav.xml.parser_base import AbstractWebDAVDocument
from txdav.xml.xmlext import Print as xmlPrint
@@ -149,63 +149,29 @@
raise AssertionError("skipped entities are not allowed")
-class WebDAVDocument (object):
+class WebDAVDocument(AbstractWebDAVDocument):
"""
WebDAV XML document.
"""
- def _parse(source_is_string):
- def parse(source):
- handler = WebDAVContentHandler()
- parser = xml.sax.make_parser()
+ @classmethod
+ def fromStream(cls, source):
+ handler = WebDAVContentHandler()
+ parser = xml.sax.make_parser()
- parser.setContentHandler(handler)
- parser.setFeature(xml.sax.handler.feature_namespaces, True)
+ parser.setContentHandler(handler)
+ parser.setFeature(xml.sax.handler.feature_namespaces, True)
- if source_is_string: source = StringIO.StringIO(source)
+ try:
+ parser.parse(source)
+ except xml.sax.SAXParseException, e:
+ raise ValueError(e)
- try:
- parser.parse(source)
- except xml.sax.SAXParseException, e:
- raise ValueError(e)
+ #handler.dom.root_element.validate()
- #handler.dom.root_element.validate()
-
- return handler.dom
-
- return parse
+ return handler.dom
- fromStream = staticmethod(_parse(False))
- fromString = staticmethod(_parse(True ))
-
- def __init__(self, root_element):
- """
- root_element must be a WebDAVElement instance.
- """
- super(WebDAVDocument, self).__init__()
-
- if not isinstance(root_element, WebDAVElement):
- raise ValueError("Not a WebDAVElement: %r" % (root_element,))
-
- self.root_element = root_element
-
- def __str__(self):
- output = StringIO.StringIO()
- self.writeXML(output)
- return output.getvalue()
-
- def __eq__(self, other):
- if isinstance(other, WebDAVDocument):
- return self.root_element == other.root_element
- else:
- return NotImplemented
-
def writeXML(self, output):
document = xml.dom.minidom.Document()
self.root_element.addToDOM(document, None)
#document.normalize()
xmlPrint(document, output)
-
- def toxml(self):
- output = StringIO.StringIO()
- self.writeXML(output)
- return output.getvalue()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20120316/6cfcbebc/attachment-0001.html>
More information about the calendarserver-changes
mailing list