[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