[Zope-Checkins] SVN: Zope/trunk/ litmus props tests 19:
propvalnspace and 20:
Chris McDonough
chrism at plope.com
Sat Jun 16 21:02:40 EDT 2007
Log message for revision 76723:
litmus props tests 19: propvalnspace and 20:
propwformed were failing because Zope did not strip off the
xmlns: attribute attached to XML property values. We now strip
off all attributes that look like xmlns declarations.
Changed:
U Zope/trunk/doc/CHANGES.txt
U Zope/trunk/lib/python/webdav/davcmds.py
U Zope/trunk/lib/python/webdav/tests/test_davcmds.py
A Zope/trunk/lib/python/webdav/tests/test_xmltools.py
U Zope/trunk/lib/python/webdav/xmltools.py
-=-
Modified: Zope/trunk/doc/CHANGES.txt
===================================================================
--- Zope/trunk/doc/CHANGES.txt 2007-06-16 21:37:23 UTC (rev 76722)
+++ Zope/trunk/doc/CHANGES.txt 2007-06-17 01:02:36 UTC (rev 76723)
@@ -97,6 +97,11 @@
Bugs Fixed
+ - DAV: litmus props tests 19: propvalnspace and 20:
+ propwformed were failing because Zope did not strip off the
+ xmlns: attribute attached to XML property values. We now strip
+ off all attributes that look like xmlns declarations.
+
- DAV: When a client attempted to unlock a resource with a token
that the resource hadn't been locked with, in the past we
returned a 204 response. This was incorrect. The "correct"
Modified: Zope/trunk/lib/python/webdav/davcmds.py
===================================================================
--- Zope/trunk/lib/python/webdav/davcmds.py 2007-06-16 21:37:23 UTC (rev 76722)
+++ Zope/trunk/lib/python/webdav/davcmds.py 2007-06-17 01:02:36 UTC (rev 76723)
@@ -219,8 +219,7 @@
else:
# xml property
attrs={}
- prop.remap({ns:'n'})
- prop.del_attr('xmlns:n')
+ prop.remove_namespace_attrs()
for attr in prop.attrs():
attrs[attr.qname()]=attr.value()
md={'__xml_attrs__':attrs}
Modified: Zope/trunk/lib/python/webdav/tests/test_davcmds.py
===================================================================
--- Zope/trunk/lib/python/webdav/tests/test_davcmds.py 2007-06-16 21:37:23 UTC (rev 76722)
+++ Zope/trunk/lib/python/webdav/tests/test_davcmds.py 2007-06-17 01:02:36 UTC (rev 76723)
@@ -56,9 +56,45 @@
result.find('<d:status>HTTP/1.1 400 Bad Request</d:status>'),
-1)
+class TestPropPatch(unittest.TestCase):
+
+ def _getTargetClass(self):
+ from webdav.davcmds import PropPatch
+ return PropPatch
+
+ def _makeOne(self, request):
+ klass = self._getTargetClass()
+ return klass(request)
+
+ def test_parse_xml_property_values_with_namespaces(self):
+ """
+ Before Zope 2.11, litmus props tests 19: propvalnspace and 20:
+ propwformed were failing because Zope did not strip off the
+ xmlns: attribute attached to XML property values. We now strip
+ off all attributes that look like xmlns declarations.
+ """
+
+ reqbody = """<?xml version="1.0" encoding="utf-8" ?>
+ <propertyupdate xmlns='DAV:'>
+ <set>
+ <prop>
+ <t:valnspace xmlns:t='http://webdav.org/neon/litmus/'>
+ <foo xmlns='bar'/>
+ </t:valnspace>
+ </prop>
+ </set>
+ </propertyupdate>"""
+
+ request = {'BODY':reqbody}
+
+ inst = self._makeOne(request)
+ self.assertEqual(len(inst.values), 1)
+ self.assertEqual(inst.values[0][3]['__xml_attrs__'], {})
+
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(TestUnlock),
+ unittest.makeSuite(TestPropPatch),
))
if __name__ == '__main__':
Added: Zope/trunk/lib/python/webdav/tests/test_xmltools.py
===================================================================
--- Zope/trunk/lib/python/webdav/tests/test_xmltools.py (rev 0)
+++ Zope/trunk/lib/python/webdav/tests/test_xmltools.py 2007-06-17 01:02:36 UTC (rev 76723)
@@ -0,0 +1,36 @@
+import unittest
+
+class TestNode(unittest.TestCase):
+
+ def _getTargetClass(self):
+ from webdav.xmltools import Node
+ return Node
+
+ def _makeOne(self, wrapped):
+ klass = self._getTargetClass()
+ return klass(wrapped)
+
+ def test_remove_namespace_attrs(self):
+ """ A method added in Zope 2.11 which removes any attributes
+ which appear to be XML namespace declarations """
+ class DummyMinidomNode:
+ def __init__(self):
+ self.attributes = {'xmlns:foo':'foo', 'xmlns':'bar', 'a':'b'}
+ def hasAttributes(self):
+ return True
+ def removeAttribute(self, name):
+ del self.attributes[name]
+
+ wrapped = DummyMinidomNode()
+ node = self._makeOne(wrapped)
+ node.remove_namespace_attrs()
+ self.assertEqual(wrapped.attributes, {'a':'b'})
+
+
+def test_suite():
+ return unittest.TestSuite((
+ unittest.makeSuite(TestNode),
+ ))
+
+if __name__ == '__main__':
+ unittest.main(defaultTest='test_suite')
Property changes on: Zope/trunk/lib/python/webdav/tests/test_xmltools.py
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: Zope/trunk/lib/python/webdav/xmltools.py
===================================================================
--- Zope/trunk/lib/python/webdav/xmltools.py 2007-06-16 21:37:23 UTC (rev 76722)
+++ Zope/trunk/lib/python/webdav/xmltools.py 2007-06-17 01:02:36 UTC (rev 76723)
@@ -107,6 +107,19 @@
def attrs(self):
return [Node(n) for n in self.node.attributes.values()]
+ def remove_namespace_attrs(self):
+ # remove all attributes which start with "xmlns:" or
+ # are equal to "xmlns"
+ if self.node.hasAttributes():
+ toremove = []
+ for name, value in self.node.attributes.items():
+ if name.startswith('xmlns:'):
+ toremove.append(name)
+ if name == 'xmlns':
+ toremove.append(name)
+ for name in toremove:
+ self.node.removeAttribute(name)
+
def del_attr(self, name):
# NOTE: zope calls this after remapping to remove namespace
# zope passes attributes like xmlns:n
More information about the Zope-Checkins
mailing list