[CalendarServer-changes] [4286] CalendarServer/branches/release/CalendarServer-2.2-dev

source_changes at macosforge.org source_changes at macosforge.org
Fri May 15 16:16:12 PDT 2009


Revision: 4286
          http://trac.macosforge.org/projects/calendarserver/changeset/4286
Author:   wsanchez at apple.com
Date:     2009-05-15 16:16:12 -0700 (Fri, 15 May 2009)
Log Message:
-----------
Pulled up r4274 r4278 from trunk.

Modified Paths:
--------------
    CalendarServer/branches/release/CalendarServer-2.2-dev/run
    CalendarServer/branches/release/CalendarServer-2.2-dev/twext/web2/dav/davxml.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/dropbox.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/freebusyurl.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/copymove.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/delete_common.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/mkcalendar.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put_common.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_calquery.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_freebusy.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_multiget.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/resource.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/schedule.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/caldav.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/imip.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/implicit.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/ischedule.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/scheduler.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/static.py
    CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/timezoneservice.py

Property Changed:
----------------
    CalendarServer/branches/release/CalendarServer-2.2-dev/
    CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-privatecomments.txt
    CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-privatecomments.xml
    CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-schedulingchanges.txt
    CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-schedulingchanges.xml


Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/trunk:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4205-4206,4209,4213,4215-4216,4219-4220,4222,4224,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4264,4270-4273,4275-4276,4279
   + /CalendarServer/branches/users/sagen/resource-delegates-4038:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066:4068-4075
/CalendarServer/trunk:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4205-4206,4209,4213,4215-4216,4219-4220,4222,4224,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4264,4270-4276,4278-4279


Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-privatecomments.txt
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-privatecomments-00.txt:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-privatecomments-00.txt:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-privatecomments.txt:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-privatecomments-00.txt:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-privatecomments.txt:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-privatecomments.txt:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-privatecomments.txt:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-privatecomments.txt:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4209,4213,4222,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4270-4273,4275-4276,4279
   + /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-privatecomments-00.txt:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-privatecomments-00.txt:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-privatecomments.txt:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-privatecomments-00.txt:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-privatecomments.txt:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-privatecomments.txt:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-privatecomments.txt:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-privatecomments.txt:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4209,4213,4222,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4270-4276,4278-4279


Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-privatecomments.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-privatecomments-00.xml:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-privatecomments-00.xml:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-privatecomments.xml:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-privatecomments-00.xml:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-privatecomments.xml:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-privatecomments.xml:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-privatecomments.xml:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-privatecomments.xml:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4209,4213,4222,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4270-4273,4275-4276,4279
   + /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-privatecomments-00.xml:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-privatecomments-00.xml:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-privatecomments.xml:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-privatecomments-00.xml:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-privatecomments.xml:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-privatecomments.xml:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-privatecomments.xml:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-privatecomments.xml:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4209,4213,4222,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4270-4276,4278-4279


Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-schedulingchanges.txt
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-schedulingchanges-01.txt:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-schedulingchanges-01.txt:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-schedulingchanges.txt:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-schedulingchanges-01.txt:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-schedulingchanges.txt:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-schedulingchanges.txt:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-schedulingchanges.txt:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-schedulingchanges.txt:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4209,4213,4222,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4270-4273,4275-4276,4279
   + /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-schedulingchanges-01.txt:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-schedulingchanges-01.txt:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-schedulingchanges.txt:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-schedulingchanges-01.txt:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-schedulingchanges.txt:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-schedulingchanges.txt:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-schedulingchanges.txt:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-schedulingchanges.txt:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4209,4213,4222,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4270-4276,4278-4279


Property changes on: CalendarServer/branches/release/CalendarServer-2.2-dev/doc/Extensions/caldav-schedulingchanges.xml
___________________________________________________________________
Modified: svn:mergeinfo
   - /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-schedulingchanges-01.xml:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-schedulingchanges-01.xml:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-schedulingchanges.xml:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-schedulingchanges-01.xml:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-schedulingchanges.xml:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-schedulingchanges.xml:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-schedulingchanges.xml:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-schedulingchanges.xml:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4209,4213,4222,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4270-4273,4275-4276,4279
   + /CalendarServer/branches/users/cdaboo/attendee-comments-2886/doc/Extensions/caldav-schedulingchanges-01.xml:2887-2910
/CalendarServer/branches/users/cdaboo/byebye-serviceslocator-2937/doc/Extensions/caldav-schedulingchanges-01.xml:2938-3097
/CalendarServer/branches/users/cdaboo/implicit-if-match-3306/doc/Extensions/caldav-schedulingchanges.xml:3307-3349
/CalendarServer/branches/users/cdaboo/implicitauto-2947/doc/Extensions/caldav-schedulingchanges-01.xml:2948-2989
/CalendarServer/branches/users/cdaboo/location-partial-accept-3573/doc/Extensions/caldav-schedulingchanges.xml:3574-3581
/CalendarServer/branches/users/sagen/resource-delegates-4038/doc/Extensions/caldav-schedulingchanges.xml:4040-4067
/CalendarServer/branches/users/sagen/resource-delegates-4066/doc/Extensions/caldav-schedulingchanges.xml:4068-4075
/CalendarServer/trunk/doc/Extensions/caldav-schedulingchanges.xml:4105-4107,4113-4116,4121-4124,4137-4139,4141-4144,4154-4159,4163-4167,4172,4174-4176,4178-4180,4191,4194,4197-4202,4209,4213,4222,4227,4231-4233,4237,4240-4242,4248,4250-4251,4257-4262,4270-4276,4278-4279

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/run
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/run	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/run	2009-05-15 23:16:12 UTC (rev 4286)
@@ -727,7 +727,7 @@
 
 caldavtester="${top}/CalDAVTester";
 
-svn_get "CalDAVTester" "${caldavtester}" "${svn_uri_base}/CalDAVTester/trunk" 4275;
+svn_get "CalDAVTester" "${caldavtester}" "${svn_uri_base}/CalDAVTester/trunk" 4277;
 
 #
 # PyFlakes

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twext/web2/dav/davxml.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twext/web2/dav/davxml.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twext/web2/dav/davxml.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -21,8 +21,16 @@
 __all__ = [
     "sname2qname",
     "qname2sname",
+    "ErrorResponse",
 ]
 
+from twisted.web2.http import Response
+from twisted.web2.dav.http import ErrorResponse as SuperErrorResponse
+from twisted.web2.dav.davxml import twisted_dav_namespace, WebDAVTextElement
+from twisted.web2.dav.davxml import WebDAVUnknownElement, Error
+from twisted.web2.http_headers import MimeType
+
+
 def sname2qname(sname):
     """
     Convert an sname into a qname.
@@ -59,3 +67,56 @@
         return "{%s}%s" % qname
     except TypeError:
         raise ValueError("Invalid qname: %r" % (qname,))
+
+
+
+
+
+class ErrorDescription(WebDAVTextElement):
+    """
+    The human-readable description of a failed precondition
+    """
+    namespace = twisted_dav_namespace
+    name = "error-description"
+    protected = True
+
+
+class ErrorResponse(SuperErrorResponse):
+    """
+    A L{Response} object which contains a status code and a L{davxml.Error}
+    element.
+    Renders itself as a DAV:error XML document.
+    """
+    error = None
+
+    def __init__(self, code, error, description=None):
+        """
+        @param code: a response code.
+        @param error: an L{davxml.WebDAVElement} identifying the error, or a
+            tuple C{(namespace, name)} with which to create an empty element
+            denoting the error.  (The latter is useful in the case of
+            preconditions ans postconditions, not all of which have defined
+            XML element classes.)
+        @param description: an optional string that, if present, will get
+            wrapped in a (twisted_dav_namespace, error-description) element.
+        """
+        if type(error) is tuple:
+            xml_namespace, xml_name = error
+            error = WebDAVUnknownElement()
+            error.namespace = xml_namespace
+            error.name = xml_name
+
+        if description:
+            output = Error(error, ErrorDescription(description)).toxml()
+        else:
+            output = Error(error).toxml()
+
+        Response.__init__(self, code=code, stream=output)
+
+        self.headers.setHeader("content-type", MimeType("text", "xml"))
+
+        self.error = error
+
+    def __repr__(self):
+        return "<%s %s %s>" % (self.__class__.__name__, self.code, self.error.sname())
+

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/dropbox.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/dropbox.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/dropbox.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -24,9 +24,9 @@
     "DropBoxChildResource",
 ]
 
+from twext.web2.dav.davxml import ErrorResponse
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.resource import DAVResource, TwistedACLInheritable
 
 from twistedcaldav.customxml import calendarserver_namespace

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/freebusyurl.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/freebusyurl.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/freebusyurl.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -26,7 +26,7 @@
 from twisted.python import log
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse
+from twext.web2.dav.davxml import ErrorResponse
 from twisted.web2.http import HTTPError
 from twisted.web2.http import Response
 from twisted.web2.http import StatusResponse

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/copymove.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/copymove.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/copymove.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -26,7 +26,7 @@
 from twisted.web2 import responsecode
 from twisted.web2.filter.location import addLocation
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse
+from twext.web2.dav.davxml import ErrorResponse
 from twisted.web2.dav.util import parentForURL
 from twisted.web2.http import StatusResponse, HTTPError
 

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/delete_common.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/delete_common.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/delete_common.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -21,11 +21,12 @@
 
 __all__ = ["DeleteResource"]
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.web2 import responsecode
 from twisted.web2.dav.fileop import delete
-from twisted.web2.dav.http import ResponseQueue, MultiStatusResponse,\
-    ErrorResponse
+from twisted.web2.dav.http import ResponseQueue, MultiStatusResponse
 from twisted.web2.dav.util import joinURL
 from twisted.web2.http import HTTPError, StatusResponse
 

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/mkcalendar.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/mkcalendar.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/mkcalendar.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -20,11 +20,13 @@
 
 __all__ = ["http_MKCALENDAR"]
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.python.failure import Failure
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse, MultiStatusResponse, PropertyStatusResponseQueue
+from twisted.web2.dav.http import MultiStatusResponse, PropertyStatusResponseQueue
 from twisted.web2.dav.util import davXMLFromStream
 from twisted.web2.dav.util import parentForURL
 from twisted.web2.http import HTTPError, StatusResponse

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -22,7 +22,7 @@
 
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.web2 import responsecode
-from twisted.web2.dav.http import ErrorResponse
+from twext.web2.dav.davxml import ErrorResponse
 from twisted.web2.dav.util import allDataFromStream, parentForURL
 from twisted.web2.http import HTTPError, StatusResponse
 
@@ -55,7 +55,7 @@
             # We must have some data at this point
             if calendardata is None:
                 # Use correct DAV:error response
-                raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+                raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="No calendar data"))
 
             storer = StoreCalendarObjectResource(
                 request = request,

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put_common.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/put_common.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -24,6 +24,8 @@
 import types
 import uuid
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet import reactor
 from twisted.internet.defer import Deferred, inlineCallbacks, succeed
 from twisted.internet.defer import returnValue
@@ -34,7 +36,6 @@
 from twisted.web2.dav.element.base import dav_namespace
 from twisted.web2.dav.element.base import PCDATAElement
 from twisted.web2.dav.fileop import delete
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.resource import TwistedGETContentMD5
 from twisted.web2.dav.stream import MD5StreamWrapper
 from twisted.web2.dav.util import joinURL, parentForURL
@@ -319,13 +320,13 @@
                             self.calendar = Component.fromString(self.calendar)
                     except ValueError, e:
                         log.err(str(e))
-                        raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+                        raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Can't parse calendar data"))
                         
                 # Valid calendar data check
                 result, message = self.validCalendarDataCheck()
                 if not result:
                     log.err(message)
-                    raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+                    raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=message))
                     
                 # Valid calendar data for CalDAV check
                 result, message = self.validCalDAVDataCheck()
@@ -674,8 +675,9 @@
             try:
                 result = self.calendar.truncateRecurrence(config.MaxInstancesForRRULE)
             except (ValueError, TypeError), ex:
-                log.err("Cannot truncate calendar resource: %s" % (ex,))
-                raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+                msg = "Cannot truncate calendar resource: %s" % (ex,)
+                log.err(msg)
+                raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
             if result:
                 self.calendardata = str(self.calendar)
                 return result
@@ -899,8 +901,9 @@
                 NumberOfRecurrencesWithinLimits(PCDATAElement(str(ex.max_allowed)))
             ))
         except (ValueError, TypeError), ex:
-            log.err("Cannot index calendar resource: %s" % (ex,))
-            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+            msg = "Cannot index calendar resource: %s" % (ex,)
+            log.err(msg)
+            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
 
         content_type = self.request.headers.getHeader("content-type")
         if content_type is not None:
@@ -969,8 +972,9 @@
             
                     returnValue(StatusResponse(responsecode.CREATED, "Resource created but immediately deleted by the server."))
                 else:
-                    log.err("Invalid return status code from ImplicitScheduler: %s" % (implicit_result,))
-                    raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+                    msg = "Invalid return status code from ImplicitScheduler: %s" % (implicit_result,)
+                    log.err(msg)
+                    raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
             else:
                 is_scheduling_resource, data_changed, did_implicit_action = implicit_result
 
@@ -1101,7 +1105,7 @@
                 self.rollback.Rollback()
 
             if isinstance(err, InvalidOverriddenInstanceError):
-                raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+                raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Invalid overridden instance"))
             elif isinstance(err, TooManyInstancesError):
                 raise HTTPError(ErrorResponse(
                     responsecode.FORBIDDEN,

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -28,12 +28,13 @@
 
 import string
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.web2 import responsecode
 from twisted.web2.http import HTTPError, StatusResponse
 from twisted.web2.dav import davxml
 from twisted.web2.dav.element.parser import lookupElement
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.util import davXMLFromStream
 
 from twistedcaldav import caldavxml

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_calquery.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_calquery.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_calquery.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -22,11 +22,13 @@
 
 import urllib
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import succeed, inlineCallbacks, returnValue
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
 from twisted.web2.dav.element.base import PCDATAElement
-from twisted.web2.dav.http import ErrorResponse, MultiStatusResponse
+from twisted.web2.dav.http import MultiStatusResponse
 from twisted.web2.dav.method.report import NumberOfMatchesWithinLimits
 from twisted.web2.dav.util import joinURL
 from twisted.web2.http import HTTPError, StatusResponse
@@ -71,8 +73,9 @@
     query_timezone = None
     query_tz = calendar_query.timezone
     if query_tz is not None and not query_tz.valid():
-        log.err("CalDAV:timezone must contain one VTIMEZONE component only: %s" % (query_tz,))
-        raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+        msg = "CalDAV:timezone must contain one VTIMEZONE component only: %s" % (query_tz,)
+        log.err(msg)
+        raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
     if query_tz:
         filter.settimezone(query_tz)
         query_timezone = tuple(calendar_query.timezone.calendar().subcomponents())[0]

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_freebusy.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_freebusy.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_freebusy.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -20,9 +20,10 @@
 
 __all__ = ["report_urn_ietf_params_xml_ns_caldav_free_busy_query"]
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.web2 import responsecode
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav import davxml
 from twisted.web2.dav.method.report import NumberOfMatchesWithinLimits
 from twisted.web2.http import HTTPError, Response, StatusResponse

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_multiget.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_multiget.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/method/report_multiget.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -22,10 +22,12 @@
 
 from urllib import unquote
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse, MultiStatusResponse
+from twisted.web2.dav.http import MultiStatusResponse
 from twisted.web2.dav.resource import AccessDeniedError
 from twisted.web2.dav.util import joinURL
 from twisted.web2.http import HTTPError, StatusResponse

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/resource.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/resource.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/resource.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -31,13 +31,14 @@
 
 from zope.interface import implements
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet import reactor
 from twisted.internet.defer import Deferred, maybeDeferred, succeed
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
 from twisted.web2.dav.davxml import dav_namespace
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.idav import IDAVPrincipalCollectionResource
 from twisted.web2.dav.resource import AccessDeniedError, DAVPrincipalCollectionResource
 from twisted.web2.dav.resource import TwistedACLInheritable
@@ -299,7 +300,8 @@
             if not property.valid():
                 raise HTTPError(ErrorResponse(
                     responsecode.CONFLICT,
-                    (caldav_namespace, "valid-calendar-data")
+                    (caldav_namespace, "valid-calendar-data"),
+                    description="Invalid property"
                 ))
 
         elif property.qname() == (caldav_namespace, "schedule-calendar-transp"):

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/schedule.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/schedule.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/schedule.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -24,10 +24,11 @@
     "IScheduleInboxResource",
 ]
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.util import joinURL, normalizeURL
 from twisted.web2.http import HTTPError
 from twisted.web2.http import Response
@@ -147,7 +148,8 @@
             if not property.valid():
                 raise HTTPError(ErrorResponse(
                     responsecode.CONFLICT,
-                    (caldav_namespace, "valid-calendar-data")
+                    (caldav_namespace, "valid-calendar-data"),
+                    description="Invalid property"
                 ))
 
         elif property.qname() == (caldav_namespace, "calendar-free-busy-set"):

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/caldav.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/caldav.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/caldav.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -21,11 +21,12 @@
 except ImportError:
     from md5 import new as md5
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, returnValue
 from twisted.python.failure import Failure
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.resource import AccessDeniedError
 from twisted.web2.dav.util import joinURL
 from twisted.web2.http import HTTPError

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/imip.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/imip.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/imip.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -18,8 +18,9 @@
 
 from twisted.python.failure import Failure
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.web2 import responsecode
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.http import HTTPError
 from twisted.web import client
 

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/implicit.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/implicit.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/implicit.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -14,10 +14,11 @@
 # limitations under the License.
 ##
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, returnValue, succeed
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.util import joinURL
 from twisted.web2.dav.util import parentForURL
 from twisted.web2.http import HTTPError

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/ischedule.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/ischedule.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/ischedule.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -14,6 +14,8 @@
 # limitations under the License.
 ##
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, DeferredList
 from twisted.internet.protocol import ClientCreator
 
@@ -22,7 +24,6 @@
 from twisted.web2 import responsecode
 from twisted.web2.client.http import ClientRequest
 from twisted.web2.client.http import HTTPClientProtocol
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.util import davXMLFromStream
 from twisted.web2.http import HTTPError
 from twisted.web2.http_headers import Headers

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/scheduler.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/scheduler.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/scheduling/scheduler.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -14,13 +14,15 @@
 # limitations under the License.
 ##
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import inlineCallbacks, returnValue
 
 from twisted.python.failure import Failure
 
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse, errorForFailure, messageForFailure, statusForFailure
+from twisted.web2.dav.http import errorForFailure, messageForFailure, statusForFailure
 from twisted.web2.http import HTTPError, Response, StatusResponse
 from twisted.web2.http_headers import MimeType
 
@@ -229,7 +231,7 @@
         except:
             # FIXME: Bare except
             log.err("Error while handling %s: %s" % (self.method, Failure(),))
-            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Can't parse calendar data"))
 
     def checkAuthorization(self):
         raise NotImplementedError
@@ -255,17 +257,17 @@
             self.calendar.validCalendarForCalDAV()
         except ValueError, e:
             log.err("%s request calendar component is not valid:%s %s" % (self.method, e, self.calendar,))
-            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Calendar component is not valid"))
     
         # Must have a METHOD
         if not self.calendar.isValidMethod():
             log.err("%s request must have valid METHOD property in calendar component: %s" % (self.method, self.calendar,))
-            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Must have valid METHOD property"))
         
         # Verify iTIP behavior
         if not self.calendar.isValidITIP():
             log.err("%s request must have a calendar component that satisfies iTIP requirements: %s" % (self.method, self.calendar,))
-            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Must have a calendar component that satisfies iTIP requirements"))
 
         # X-CALENDARSERVER-ACCESS is not allowed in Outbox POSTs
         if self.calendar.hasProperty(Component.ACCESS_PROPERTY):
@@ -279,12 +281,12 @@
                 vfreebusies = [v for v in self.calendar.subcomponents() if v.name() == "VFREEBUSY"]
                 if len(vfreebusies) != 1:
                     log.err("iTIP data is not valid for a VFREEBUSY request: %s" % (self.calendar,))
-                    raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+                    raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="iTIP data is not valid for a VFREEBUSY request"))
                 dtstart = vfreebusies[0].getStartDateUTC()
                 dtend = vfreebusies[0].getEndDateUTC()
                 if dtstart is None or dtend is None:
                     log.err("VFREEBUSY start/end not valid: %s" % (self.calendar,))
-                    raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+                    raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="VFREEBUSY start/end not valid"))
                 self.timeRange = TimeRange(start="20000101T000000Z", end="20070102T000000Z")
                 self.timeRange.start = dtstart
                 self.timeRange.end = dtend
@@ -576,7 +578,7 @@
             
         else:
             log.err("Unknown iTIP METHOD for security checks: %s" % (self.calendar.propertyValue("METHOD"),))
-            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description="Unknown iTIP METHOD for security checks"))
 
     def finalChecks(self):
         """
@@ -778,8 +780,9 @@
             yield self.checkAttendeeAsOriginator()
             
         else:
-            log.err("Unknown iTIP METHOD for security checks: %s" % (self.calendar.propertyValue("METHOD"),))
-            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data")))
+            msg = "Unknown iTIP METHOD for security checks: %s" % (self.calendar.propertyValue("METHOD"),)
+            log.err(msg)
+            raise HTTPError(ErrorResponse(responsecode.FORBIDDEN, (caldav_namespace, "valid-calendar-data"), description=msg))
 
 class IMIPScheduler(Scheduler):
 

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/static.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/static.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/static.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -39,13 +39,14 @@
 import errno
 from urlparse import urlsplit
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.internet.defer import fail, succeed, inlineCallbacks, returnValue, maybeDeferred
 from twisted.python.failure import Failure
 from twisted.web2 import responsecode, http, http_headers
 from twisted.web2.http import HTTPError, StatusResponse
 from twisted.web2.dav import davxml
 from twisted.web2.dav.fileop import mkcollection, rmdir
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.idav import IDAVResource
 from twisted.web2.dav.noneprops import NonePropertyStore
 from twisted.web2.dav.resource import AccessDeniedError

Modified: CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/timezoneservice.py
===================================================================
--- CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/timezoneservice.py	2009-05-15 23:15:45 UTC (rev 4285)
+++ CalendarServer/branches/release/CalendarServer-2.2-dev/twistedcaldav/timezoneservice.py	2009-05-15 23:16:12 UTC (rev 4286)
@@ -22,9 +22,10 @@
     "TimezoneServiceResource",
 ]
 
+from twext.web2.dav.davxml import ErrorResponse
+
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
-from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.http import HTTPError
 from twisted.web2.http import Response
 from twisted.web2.http_headers import MimeType
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090515/2aa2d98a/attachment-0001.html>


More information about the calendarserver-changes mailing list