[Checkins] SVN: z3c.dav/trunk/src/z3c/dav/exceptions/ Only respond
with a 207 multistatus response when there are more then one
Michael Kerrin
michael.kerrin at openapp.ie
Sun Jun 10 14:53:09 EDT 2007
Log message for revision 76590:
Only respond with a 207 multistatus response when there are more then one
errors or else the context of the only error is not the context on the
original view.
Changed:
U z3c.dav/trunk/src/z3c/dav/exceptions/__init__.py
U z3c.dav/trunk/src/z3c/dav/exceptions/tests/test_multiviews.py
-=-
Modified: z3c.dav/trunk/src/z3c/dav/exceptions/__init__.py
===================================================================
--- z3c.dav/trunk/src/z3c/dav/exceptions/__init__.py 2007-06-10 18:52:48 UTC (rev 76589)
+++ z3c.dav/trunk/src/z3c/dav/exceptions/__init__.py 2007-06-10 18:53:09 UTC (rev 76590)
@@ -27,6 +27,7 @@
from zope import component
import zope.publisher.interfaces.http
from zope.app.http.interfaces import IHTTPException
+import zope.app.publisher.browser
import z3c.dav.interfaces
import z3c.dav.utils
@@ -93,11 +94,24 @@
etree = z3c.etree.getEngine()
multistatus = z3c.dav.utils.MultiStatus()
+ if len(self.error.errors) == 1 and \
+ self.error.errors[0].resource == self.error.context:
+ # If have only one error and the context on which we raised the
+ # exception, then we just try and view the default view of the
+ # error.
+ error = self.error.errors[0]
+ name = zope.app.publisher.browser.queryDefaultViewName(
+ error, self.request)
+ if name is not None:
+ view = component.queryMultiAdapter(
+ (error, self.request), name = name)
+ return view()
+
seenContext = False
for error in self.error.errors:
if error.resource == self.error.context:
seenContext = True
-
+
davwidget = component.getMultiAdapter(
(error, self.request), z3c.dav.interfaces.IDAVErrorWidget)
@@ -112,8 +126,7 @@
if not seenContext:
response = z3c.dav.utils.Response(
- z3c.dav.utils.getObjectURL(
- self.error.context, self.request))
+ z3c.dav.utils.getObjectURL(self.error.context, self.request))
response.status = 424 # Failed Dependency
multistatus.responses.append(response)
Modified: z3c.dav/trunk/src/z3c/dav/exceptions/tests/test_multiviews.py
===================================================================
--- z3c.dav/trunk/src/z3c/dav/exceptions/tests/test_multiviews.py 2007-06-10 18:52:48 UTC (rev 76589)
+++ z3c.dav/trunk/src/z3c/dav/exceptions/tests/test_multiviews.py 2007-06-10 18:53:09 UTC (rev 76590)
@@ -25,6 +25,7 @@
from zope import schema
from zope import component
from zope.traversing.browser.interfaces import IAbsoluteURL
+from zope.component.interfaces import IDefaultViewName
import z3c.dav.publisher
from z3c.etree.testing import etreeSetup, etreeTearDown, assertXMLEqual
@@ -170,6 +171,15 @@
(z3c.dav.interfaces.IPropertyNotFound,
z3c.dav.interfaces.IWebDAVRequest))
+ gsm.registerAdapter(z3c.dav.exceptions.AlreadyLockedErrorView,
+ (z3c.dav.interfaces.IAlreadyLocked,
+ z3c.dav.interfaces.IWebDAVRequest),
+ name = u"index.html")
+ gsm.registerAdapter(u"index.html",
+ (z3c.dav.interfaces.IAlreadyLocked,
+ z3c.dav.interfaces.IWebDAVRequest),
+ IDefaultViewName)
+
def tearDown(self):
super(TestMSErrorView, self).tearDown()
@@ -186,6 +196,15 @@
(z3c.dav.interfaces.IPropertyNotFound,
z3c.dav.interfaces.IWebDAVRequest))
+ gsm.unregisterAdapter(z3c.dav.exceptions.AlreadyLockedErrorView,
+ (z3c.dav.interfaces.IAlreadyLocked,
+ z3c.dav.interfaces.IWebDAVRequest),
+ name = u"index.html")
+ gsm.unregisterAdapter(u"index.html",
+ (z3c.dav.interfaces.IAlreadyLocked,
+ z3c.dav.interfaces.IWebDAVRequest),
+ IDefaultViewName)
+
def test_multi_resource_error_interface(self):
resource = Resource()
error = z3c.dav.interfaces.WebDAVErrors(resource)
@@ -268,7 +287,20 @@
<ns0:status>HTTP/1.1 424 Failed Dependency</ns0:status>
</ns0:response></ns0:multistatus>""")
+ def test_one_error_default_view(self):
+ resource = Resource()
+ error = z3c.dav.interfaces.WebDAVErrors(resource)
+ error.append(
+ z3c.dav.interfaces.AlreadyLocked(resource, "Resource is locked"))
+ request = TestRequest()
+ view = z3c.dav.exceptions.MultiStatusErrorView(error, request)
+ result = view()
+
+ self.assertEqual(request.response.getStatus(), 423)
+ self.assertEqual(result, "")
+
+
def test_suite():
suite = unittest.TestSuite((
unittest.makeSuite(TestPropstatErrorView),
More information about the Checkins
mailing list