Rev 51: Switch DavListDirHandler and DavStatHandler. in http://bazaar.launchpad.net/%7Ebzr/bzr.webdav/webdav

Vincent Ladeuil v.ladeuil+lp at free.fr
Sun Jun 8 21:32:50 BST 2008


At http://bazaar.launchpad.net/%7Ebzr/bzr.webdav/webdav

------------------------------------------------------------
revno: 51
revision-id: v.ladeuil+lp at free.fr-20080608203248-851u25jpfvhofpwp
parent: v.ladeuil+lp at free.fr-20080608193435-02kt8x2camnawwmz
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: webdav
timestamp: Sun 2008-06-08 22:32:48 +0200
message:
  Switch DavListDirHandler and DavStatHandler.
modified:
  webdav.py                      webdav.py-20060816232542-enpjxth2743ttqpq-3
-------------- next part --------------
=== modified file 'webdav.py'
--- a/webdav.py	2008-06-08 19:34:35 +0000
+++ b/webdav.py	2008-06-08 20:32:48 +0000
@@ -150,70 +150,6 @@
             return name[where +1:]
 
 
-class DavListDirHandler(DavResponseHandler):
-    """Handle a PROPPFIND depth 1 DAV response for a directory.
-
-    The expected content is a multi-status containing a list of response
-    containing at least a href property.
-    """
-    def __init__(self):
-        DavResponseHandler.__init__(self)
-        self.dir_content = None
-
-    def _validate_handling(self):
-        if self.dir_content is not None:
-            self.expected_content_handled = True
-
-    def startElement(self, name, attrs):
-        self.chars_wanted = (self._strip_ns(name) == 'href')
-        DavResponseHandler.startElement(self, name, attrs)
-
-    def endElement(self, name):
-        stack = self.elt_stack
-        if (len(stack) == 3
-            and stack[0] == 'multistatus'
-            and stack[1] == 'response'
-             # sax guarantees that name is also href (when ns is stripped)
-            and stack[2] == 'href'):
-            if self.dir_content is None:
-                self.dir_content = []
-            self.dir_content.append(self.chars)
-        DavResponseHandler.endElement(self, name)
-
-
-def _extract_dir_content(url, infile):
-    """Extract the directory content from a DAV PROPFIND response.
-
-    :param url: The url used for the PROPFIND request.
-    :param infile: A file-like object pointing at the start of the response.
-    """
-    parser = xml.sax.make_parser()
-
-    handler = DavListDirHandler()
-    handler.set_url(url)
-    parser.setContentHandler(handler)
-    try:
-        parser.parse(infile)
-    except xml.sax.SAXParseException, e:
-        raise errors.InvalidHttpResponse(
-            url, msg='Malformed xml response: %s' % e)
-    # Reformat for bzr needs
-    dir_content = handler.dir_content
-    dir = dir_content[0]
-    dir_len = len(dir)
-    elements = []
-    for href in dir_content[1:]: # Ignore first element
-        if href.startswith(dir):
-            name = href[dir_len:]
-            if name.endswith('/'):
-                # Get rid of final '/'
-                name = name[0:-1]
-            # We receive already url-encoded strings so down-casting is
-            # safe. And bzr insists on getting strings not unicode strings.
-            elements.append(str(name))
-    return elements
-
-
 class DavStatHandler(DavResponseHandler):
     """Handle a PROPPFIND depth 0 DAV response for a file or directory.
 
@@ -336,6 +272,70 @@
     return _DAVStat(size, is_dir, is_exec)
 
 
+class DavListDirHandler(DavResponseHandler):
+    """Handle a PROPPFIND depth 1 DAV response for a directory.
+
+    The expected content is a multi-status containing a list of response
+    containing at least a href property.
+    """
+    def __init__(self):
+        DavResponseHandler.__init__(self)
+        self.dir_content = None
+
+    def _validate_handling(self):
+        if self.dir_content is not None:
+            self.expected_content_handled = True
+
+    def startElement(self, name, attrs):
+        self.chars_wanted = (self._strip_ns(name) == 'href')
+        DavResponseHandler.startElement(self, name, attrs)
+
+    def endElement(self, name):
+        stack = self.elt_stack
+        if (len(stack) == 3
+            and stack[0] == 'multistatus'
+            and stack[1] == 'response'
+             # sax guarantees that name is also href (when ns is stripped)
+            and stack[2] == 'href'):
+            if self.dir_content is None:
+                self.dir_content = []
+            self.dir_content.append(self.chars)
+        DavResponseHandler.endElement(self, name)
+
+
+def _extract_dir_content(url, infile):
+    """Extract the directory content from a DAV PROPFIND response.
+
+    :param url: The url used for the PROPFIND request.
+    :param infile: A file-like object pointing at the start of the response.
+    """
+    parser = xml.sax.make_parser()
+
+    handler = DavListDirHandler()
+    handler.set_url(url)
+    parser.setContentHandler(handler)
+    try:
+        parser.parse(infile)
+    except xml.sax.SAXParseException, e:
+        raise errors.InvalidHttpResponse(
+            url, msg='Malformed xml response: %s' % e)
+    # Reformat for bzr needs
+    dir_content = handler.dir_content
+    dir = dir_content[0]
+    dir_len = len(dir)
+    elements = []
+    for href in dir_content[1:]: # Ignore first element
+        if href.startswith(dir):
+            name = href[dir_len:]
+            if name.endswith('/'):
+                # Get rid of final '/'
+                name = name[0:-1]
+            # We receive already url-encoded strings so down-casting is
+            # safe. And bzr insists on getting strings not unicode strings.
+            elements.append(str(name))
+    return elements
+
+
 class PUTRequest(_urllib2_wrappers.Request):
 
     def __init__(self, url, data, more_headers={}, accepted_errors=None):



More information about the bazaar-commits mailing list