[CalendarServer-changes] [128]
CalendarServer/branches/users/cdaboo/quota
source_changes at macosforge.org
source_changes at macosforge.org
Tue Sep 12 14:02:27 PDT 2006
Revision: 128
Author: cdaboo at apple.com
Date: 2006-09-12 14:02:19 -0700 (Tue, 12 Sep 2006)
Log Message:
-----------
merge -r119:HEAD https://svn.opensource.apple.com/repository/calendarserver/CalendarServer/trunk
Modified Paths:
--------------
CalendarServer/branches/users/cdaboo/quota/run
Added Paths:
-----------
CalendarServer/branches/users/cdaboo/quota/lib-patches/
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.basic.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.digest.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.interfaces.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.wrapper.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.filter.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.test.test_httpauth.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil/
CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil/setup.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/
CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/base.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/icalendar.patch
Removed Paths:
-------------
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.basic.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.digest.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.interfaces.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.wrapper.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.filter.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.test.test_httpauth.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil/
CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil/setup.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/
CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/base.patch
CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/icalendar.patch
CalendarServer/branches/users/cdaboo/quota/patches/
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches (from rev 127, CalendarServer/trunk/lib-patches)
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted (from rev 127, CalendarServer/trunk/lib-patches/Twisted)
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.basic.patch
===================================================================
--- CalendarServer/trunk/lib-patches/Twisted/twisted.web2.auth.basic.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.basic.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,13 +0,0 @@
-Index: twisted/web2/auth/basic.py
-===================================================================
---- twisted/web2/auth/basic.py (revision 17932)
-+++ twisted/web2/auth/basic.py (working copy)
-@@ -20,7 +20,7 @@
- def getChallenge(self, peer):
- return {'realm': self.realm}
-
-- def decode(self, response, method=None):
-+ def decode(self, response, request):
- try:
- creds = (response + '===').decode('base64')
- except:
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.basic.patch (from rev 127, CalendarServer/trunk/lib-patches/Twisted/twisted.web2.auth.basic.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.basic.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.basic.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,13 @@
+Index: twisted/web2/auth/basic.py
+===================================================================
+--- twisted/web2/auth/basic.py (revision 17932)
++++ twisted/web2/auth/basic.py (working copy)
+@@ -20,7 +20,7 @@
+ def getChallenge(self, peer):
+ return {'realm': self.realm}
+
+- def decode(self, response, method=None):
++ def decode(self, response, request):
+ try:
+ creds = (response + '===').decode('base64')
+ except:
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.digest.patch
===================================================================
--- CalendarServer/trunk/lib-patches/Twisted/twisted.web2.auth.digest.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.digest.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,19 +0,0 @@
-Index: twisted/web2/auth/digest.py
-===================================================================
---- twisted/web2/auth/digest.py (revision 17932)
-+++ twisted/web2/auth/digest.py (working copy)
-@@ -154,7 +154,7 @@
- 'algorithm': self.algorithm,
- 'realm': self.realm}
-
-- def decode(self, response, method='GET'):
-+ def decode(self, response, request):
- def unq(s):
- if s[0] == s[-1] == '"':
- return s[1:-1]
-@@ -172,4 +172,4 @@
-
- del self.outstanding[auth['opaque']]
-
-- return DigestedCredentials(username, method, self.realm, auth)
-+ return DigestedCredentials(username, request.method, self.realm, auth)
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.digest.patch (from rev 127, CalendarServer/trunk/lib-patches/Twisted/twisted.web2.auth.digest.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.digest.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.digest.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,19 @@
+Index: twisted/web2/auth/digest.py
+===================================================================
+--- twisted/web2/auth/digest.py (revision 17932)
++++ twisted/web2/auth/digest.py (working copy)
+@@ -154,7 +154,7 @@
+ 'algorithm': self.algorithm,
+ 'realm': self.realm}
+
+- def decode(self, response, method='GET'):
++ def decode(self, response, request):
+ def unq(s):
+ if s[0] == s[-1] == '"':
+ return s[1:-1]
+@@ -172,4 +172,4 @@
+
+ del self.outstanding[auth['opaque']]
+
+- return DigestedCredentials(username, method, self.realm, auth)
++ return DigestedCredentials(username, request.method, self.realm, auth)
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.interfaces.patch
===================================================================
--- CalendarServer/trunk/lib-patches/Twisted/twisted.web2.auth.interfaces.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.interfaces.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,24 +0,0 @@
-Index: twisted/web2/auth/interfaces.py
-===================================================================
---- twisted/web2/auth/interfaces.py (revision 17932)
-+++ twisted/web2/auth/interfaces.py (working copy)
-@@ -13,7 +13,7 @@
- @return: dictionary of challenge arguments
- """
-
-- def decode(response, method=None):
-+ def decode(response, request):
- """Create a credentials object from the given response.
- May raise twisted.cred.error.LoginFailed if the response is invalid.
-
-@@ -20,8 +20,8 @@
- @type response: C{str}
- @param response: scheme specific response string
-
-- @type method: C{str}
-- @param method: the method by which this response was sent
-+ @type request: L{twisted.web2.server.Request}
-+ @param request: the request being processed
-
- @return: ICredentials
- """
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.interfaces.patch (from rev 127, CalendarServer/trunk/lib-patches/Twisted/twisted.web2.auth.interfaces.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.interfaces.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.interfaces.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,24 @@
+Index: twisted/web2/auth/interfaces.py
+===================================================================
+--- twisted/web2/auth/interfaces.py (revision 17932)
++++ twisted/web2/auth/interfaces.py (working copy)
+@@ -13,7 +13,7 @@
+ @return: dictionary of challenge arguments
+ """
+
+- def decode(response, method=None):
++ def decode(response, request):
+ """Create a credentials object from the given response.
+ May raise twisted.cred.error.LoginFailed if the response is invalid.
+
+@@ -20,8 +20,8 @@
+ @type response: C{str}
+ @param response: scheme specific response string
+
+- @type method: C{str}
+- @param method: the method by which this response was sent
++ @type request: L{twisted.web2.server.Request}
++ @param request: the request being processed
+
+ @return: ICredentials
+ """
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.wrapper.patch
===================================================================
--- CalendarServer/trunk/lib-patches/Twisted/twisted.web2.auth.wrapper.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.wrapper.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,13 +0,0 @@
-Index: twisted/web2/auth/wrapper.py
-===================================================================
---- twisted/web2/auth/wrapper.py (revision 17932)
-+++ twisted/web2/auth/wrapper.py (working copy)
-@@ -87,7 +87,7 @@
- return UnauthorizedResource(self.credentialFactories)
-
- try:
-- creds = factory.decode(response, req.method)
-+ creds = factory.decode(response, req)
- except error.LoginFailed:
- return UnauthorizedResource(self.credentialFactories)
-
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.wrapper.patch (from rev 127, CalendarServer/trunk/lib-patches/Twisted/twisted.web2.auth.wrapper.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.wrapper.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.auth.wrapper.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,13 @@
+Index: twisted/web2/auth/wrapper.py
+===================================================================
+--- twisted/web2/auth/wrapper.py (revision 17932)
++++ twisted/web2/auth/wrapper.py (working copy)
+@@ -87,7 +87,7 @@
+ return UnauthorizedResource(self.credentialFactories)
+
+ try:
+- creds = factory.decode(response, req.method)
++ creds = factory.decode(response, req)
+ except error.LoginFailed:
+ return UnauthorizedResource(self.credentialFactories)
+
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.filter.patch
===================================================================
--- CalendarServer/trunk/lib-patches/Twisted/twisted.web2.dav.filter.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.filter.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,82 +0,0 @@
-Index: twisted/web2/dav/filter/__init__.py
-===================================================================
---- twisted/web2/dav/filter/__init__.py (revision 0)
-+++ twisted/web2/dav/filter/__init__.py (revision 0)
-@@ -0,0 +1,31 @@
-+##
-+# Copyright (c) 2006 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.
-+#
-+# DRI: Cyrus Daboo, cdaboo at apple.com
-+##
-+
-+"""
-+Output filters.
-+"""
-+
-+__all__ = [
-+ "location",
-+]
-Index: twisted/web2/dav/filter/location.py
-===================================================================
---- twisted/web2/dav/filter/location.py (revision 0)
-+++ twisted/web2/dav/filter/location.py (revision 0)
-@@ -0,0 +1,41 @@
-+"""
-+Filter that adds a Location header to a response if the status is 201 Created.
-+"""
-+
-+__all__ = ['locationfilter']
-+
-+from twisted.web2 import responsecode
-+import urlparse
-+
-+def addlocation(request, location):
-+ """
-+ Ensure that the supplied location URI is added to any response to this request.
-+
-+ @param request: L{IRequest} the request whose response is to be modified.
-+ @param location: the C{str} containing the path relative URI for the location header value.
-+ """
-+
-+ def locationfilter(request, response): #@UnusedVariable
-+ """
-+ Add a Location header to the response if the status is 201. Note that the location
-+ value must be a valid URI (already % encoded etc).
-+
-+ @param request: L{IRequest} for the current request.
-+ @param response: L{IResponse} for the response to add the header to.
-+ @return: the original L{IResponse} with (or without) the added header.
-+ """
-+
-+ if (response.code == responsecode.CREATED):
-+ # Check to see whether we have an absolute URI or not. If not, have the request
-+ # turn it into an absolute URI.
-+ (scheme, host, path, params, querystring, fragment) = urlparse.urlparse(location)
-+ if scheme == '':
-+ abslocation = request.unparseURL(path=location)
-+ else:
-+ abslocation = location
-+
-+ response.headers.setHeader('location', abslocation)
-+ return response
-+
-+ request.addResponseFilter(locationfilter)
-+ return
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.filter.patch (from rev 127, CalendarServer/trunk/lib-patches/Twisted/twisted.web2.dav.filter.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.filter.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.filter.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,82 @@
+Index: twisted/web2/dav/filter/__init__.py
+===================================================================
+--- twisted/web2/dav/filter/__init__.py (revision 0)
++++ twisted/web2/dav/filter/__init__.py (revision 0)
+@@ -0,0 +1,31 @@
++##
++# Copyright (c) 2006 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.
++#
++# DRI: Cyrus Daboo, cdaboo at apple.com
++##
++
++"""
++Output filters.
++"""
++
++__all__ = [
++ "location",
++]
+Index: twisted/web2/dav/filter/location.py
+===================================================================
+--- twisted/web2/dav/filter/location.py (revision 0)
++++ twisted/web2/dav/filter/location.py (revision 0)
+@@ -0,0 +1,41 @@
++"""
++Filter that adds a Location header to a response if the status is 201 Created.
++"""
++
++__all__ = ['locationfilter']
++
++from twisted.web2 import responsecode
++import urlparse
++
++def addlocation(request, location):
++ """
++ Ensure that the supplied location URI is added to any response to this request.
++
++ @param request: L{IRequest} the request whose response is to be modified.
++ @param location: the C{str} containing the path relative URI for the location header value.
++ """
++
++ def locationfilter(request, response): #@UnusedVariable
++ """
++ Add a Location header to the response if the status is 201. Note that the location
++ value must be a valid URI (already % encoded etc).
++
++ @param request: L{IRequest} for the current request.
++ @param response: L{IResponse} for the response to add the header to.
++ @return: the original L{IResponse} with (or without) the added header.
++ """
++
++ if (response.code == responsecode.CREATED):
++ # Check to see whether we have an absolute URI or not. If not, have the request
++ # turn it into an absolute URI.
++ (scheme, host, path, params, querystring, fragment) = urlparse.urlparse(location)
++ if scheme == '':
++ abslocation = request.unparseURL(path=location)
++ else:
++ abslocation = location
++
++ response.headers.setHeader('location', abslocation)
++ return response
++
++ request.addResponseFilter(locationfilter)
++ return
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch
===================================================================
--- CalendarServer/trunk/lib-patches/Twisted/twisted.web2.dav.resource.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,13 +0,0 @@
-Index: twisted/web2/dav/resource.py
-===================================================================
---- twisted/web2/dav/resource.py (revision 18074)
-+++ twisted/web2/dav/resource.py (working copy)
-@@ -599,7 +599,7 @@
- else:
- factory = request.credentialFactories[authHeader[0]]
-
-- creds = factory.decode(authHeader[1], request.method)
-+ creds = factory.decode(authHeader[1], request)
-
- # Try to match principals in each principal collection on
- # the resource
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch (from rev 127, CalendarServer/trunk/lib-patches/Twisted/twisted.web2.dav.resource.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,13 @@
+Index: twisted/web2/dav/resource.py
+===================================================================
+--- twisted/web2/dav/resource.py (revision 18074)
++++ twisted/web2/dav/resource.py (working copy)
+@@ -599,7 +599,7 @@
+ else:
+ factory = request.credentialFactories[authHeader[0]]
+
+- creds = factory.decode(authHeader[1], request.method)
++ creds = factory.decode(authHeader[1], request)
+
+ # Try to match principals in each principal collection on
+ # the resource
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static.patch
===================================================================
--- CalendarServer/trunk/lib-patches/Twisted/twisted.web2.dav.static.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,13 +0,0 @@
-Index: twisted/web2/dav/static.py
-===================================================================
---- twisted/web2/dav/static.py (revision 18074)
-+++ twisted/web2/dav/static.py (working copy)
-@@ -34,6 +34,8 @@
- from twisted.internet.defer import succeed, deferredGenerator, waitForDeferred
- from twisted.web2.static import File
- from twisted.web2 import dirlist
-+from twisted.web2 import http
-+from twisted.web2 import responsecode
- from twisted.web2.dav import davxml
- from twisted.web2.dav.idav import IDAVResource
- from twisted.web2.dav.resource import DAVResource
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static.patch (from rev 127, CalendarServer/trunk/lib-patches/Twisted/twisted.web2.dav.static.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,13 @@
+Index: twisted/web2/dav/static.py
+===================================================================
+--- twisted/web2/dav/static.py (revision 18074)
++++ twisted/web2/dav/static.py (working copy)
+@@ -34,6 +34,8 @@
+ from twisted.internet.defer import succeed, deferredGenerator, waitForDeferred
+ from twisted.web2.static import File
+ from twisted.web2 import dirlist
++from twisted.web2 import http
++from twisted.web2 import responsecode
+ from twisted.web2.dav import davxml
+ from twisted.web2.dav.idav import IDAVResource
+ from twisted.web2.dav.resource import DAVResource
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch
===================================================================
--- CalendarServer/trunk/lib-patches/Twisted/twisted.web2.server.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,44 +0,0 @@
-Index: twisted/web2/server.py
-===================================================================
---- twisted/web2/server.py (revision 17932)
-+++ twisted/web2/server.py (working copy)
-@@ -11,7 +11,7 @@
- import cStringIO as StringIO
-
- import cgi, time, urlparse
--from urllib import unquote
-+from urllib import quote, unquote
- from urlparse import urlsplit
-
- import weakref
-@@ -316,7 +316,12 @@
- if newpath is StopTraversal:
- # We need to rethink how to do this.
- #if newres is res:
-- self._rememberURLForResource(path, res)
-+ if path:
-+ url = "/" + "/".join(path)
-+ else:
-+ url = "/"
-+
-+ self._rememberURLForResource(quote(url), res)
- return res
- #else:
- # raise ValueError("locateChild must not return StopTraversal with a resource other than self.")
-@@ -337,7 +342,7 @@
- self.prepath.append(self.postpath.pop(0))
-
- child = self._getChild(None, newres, newpath, updatepaths=updatepaths)
-- self._rememberURLForResource(url, child)
-+ self._rememberURLForResource(quote(url), child)
-
- return child
-
-@@ -404,6 +409,7 @@
- segments = path.split("/")
- assert segments[0] == "", "URL path didn't begin with '/': %s" % (path,)
- segments = segments[1:]
-+ segments = map(unquote, segments)
-
- def notFound(f):
- f.trap(http.HTTPError)
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch (from rev 127, CalendarServer/trunk/lib-patches/Twisted/twisted.web2.server.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,44 @@
+Index: twisted/web2/server.py
+===================================================================
+--- twisted/web2/server.py (revision 17932)
++++ twisted/web2/server.py (working copy)
+@@ -11,7 +11,7 @@
+ import cStringIO as StringIO
+
+ import cgi, time, urlparse
+-from urllib import unquote
++from urllib import quote, unquote
+ from urlparse import urlsplit
+
+ import weakref
+@@ -316,7 +316,12 @@
+ if newpath is StopTraversal:
+ # We need to rethink how to do this.
+ #if newres is res:
+- self._rememberURLForResource(path, res)
++ if path:
++ url = "/" + "/".join(path)
++ else:
++ url = "/"
++
++ self._rememberURLForResource(quote(url), res)
+ return res
+ #else:
+ # raise ValueError("locateChild must not return StopTraversal with a resource other than self.")
+@@ -337,7 +342,7 @@
+ self.prepath.append(self.postpath.pop(0))
+
+ child = self._getChild(None, newres, newpath, updatepaths=updatepaths)
+- self._rememberURLForResource(url, child)
++ self._rememberURLForResource(quote(url), child)
+
+ return child
+
+@@ -404,6 +409,7 @@
+ segments = path.split("/")
+ assert segments[0] == "", "URL path didn't begin with '/': %s" % (path,)
+ segments = segments[1:]
++ segments = map(unquote, segments)
+
+ def notFound(f):
+ f.trap(http.HTTPError)
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.test.test_httpauth.patch
===================================================================
--- CalendarServer/trunk/lib-patches/Twisted/twisted.web2.test.test_httpauth.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.test.test_httpauth.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,71 +0,0 @@
-Index: twisted/web2/test/test_httpauth.py
-===================================================================
---- twisted/web2/test/test_httpauth.py (revision 17932)
-+++ twisted/web2/test/test_httpauth.py (working copy)
-@@ -2,6 +2,7 @@
- from twisted.internet import defer
- from twisted.cred import error
- from twisted.web2.auth import basic, digest, wrapper
-+from twisted.web2.test.test_server import SimpleRequest
-
- from twisted.web2.test import test_server
-
-@@ -25,7 +26,7 @@
- self.username,
- self.password))
-
-- creds = self.credentialFactory.decode(response)
-+ creds = self.credentialFactory.decode(response, SimpleRequest(None, 'GET', '/'))
- self.failUnless(creds.checkPassword(self.password))
-
- def testIncorrectPassword(self):
-@@ -33,7 +34,7 @@
- self.username,
- 'incorrectPassword'))
-
-- creds = self.credentialFactory.decode(response)
-+ creds = self.credentialFactory.decode(response, SimpleRequest(None, 'GET', '/'))
- self.failIf(creds.checkPassword(self.password))
-
- def testIncorrectPadding(self):
-@@ -43,7 +44,7 @@
-
- response = response.strip('=')
-
-- creds = self.credentialFactory.decode(response)
-+ creds = self.credentialFactory.decode(response, SimpleRequest(None, 'GET', '/'))
- self.failUnless(creds.checkPassword(self.password))
-
- def testInvalidCredentials(self):
-@@ -51,7 +52,7 @@
-
- self.assertRaises(error.LoginFailed,
- self.credentialFactory.decode,
-- response)
-+ response, SimpleRequest(None, 'GET', '/'))
-
- challengeResponse = ('digest', {'nonce': '178288758716122392881254770685',
- 'qop': 'auth', 'realm': 'test realm',
-@@ -74,7 +75,7 @@
- def testResponse(self):
- challenge = self.credentialFactory.getChallenge(None)
-
-- creds = self.credentialFactory.decode(authRequest, 'GET')
-+ creds = self.credentialFactory.decode(authRequest, SimpleRequest(None, 'GET', '/'))
- self.failUnless(creds.checkPassword('password'))
-
- def testFailsWithDifferentMethod(self):
-@@ -80,11 +81,11 @@
- def testFailsWithDifferentMethod(self):
- challenge = self.credentialFactory.getChallenge(None)
-
-- creds = self.credentialFactory.decode(authRequest, 'POST')
-+ creds = self.credentialFactory.decode(authRequest, SimpleRequest(None, 'POST', '/'))
- self.failIf(creds.checkPassword('password'))
-
- def testNoUsername(self):
-- self.assertRaises(error.LoginFailed, self.credentialFactory.decode, namelessAuthRequest, 'GET')
-+ self.assertRaises(error.LoginFailed, self.credentialFactory.decode, namelessAuthRequest, SimpleRequest(None, 'GET', '/'))
-
- from zope.interface import Interface, implements
- from twisted.cred import portal, checkers
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.test.test_httpauth.patch (from rev 127, CalendarServer/trunk/lib-patches/Twisted/twisted.web2.test.test_httpauth.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.test.test_httpauth.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.test.test_httpauth.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,71 @@
+Index: twisted/web2/test/test_httpauth.py
+===================================================================
+--- twisted/web2/test/test_httpauth.py (revision 17932)
++++ twisted/web2/test/test_httpauth.py (working copy)
+@@ -2,6 +2,7 @@
+ from twisted.internet import defer
+ from twisted.cred import error
+ from twisted.web2.auth import basic, digest, wrapper
++from twisted.web2.test.test_server import SimpleRequest
+
+ from twisted.web2.test import test_server
+
+@@ -25,7 +26,7 @@
+ self.username,
+ self.password))
+
+- creds = self.credentialFactory.decode(response)
++ creds = self.credentialFactory.decode(response, SimpleRequest(None, 'GET', '/'))
+ self.failUnless(creds.checkPassword(self.password))
+
+ def testIncorrectPassword(self):
+@@ -33,7 +34,7 @@
+ self.username,
+ 'incorrectPassword'))
+
+- creds = self.credentialFactory.decode(response)
++ creds = self.credentialFactory.decode(response, SimpleRequest(None, 'GET', '/'))
+ self.failIf(creds.checkPassword(self.password))
+
+ def testIncorrectPadding(self):
+@@ -43,7 +44,7 @@
+
+ response = response.strip('=')
+
+- creds = self.credentialFactory.decode(response)
++ creds = self.credentialFactory.decode(response, SimpleRequest(None, 'GET', '/'))
+ self.failUnless(creds.checkPassword(self.password))
+
+ def testInvalidCredentials(self):
+@@ -51,7 +52,7 @@
+
+ self.assertRaises(error.LoginFailed,
+ self.credentialFactory.decode,
+- response)
++ response, SimpleRequest(None, 'GET', '/'))
+
+ challengeResponse = ('digest', {'nonce': '178288758716122392881254770685',
+ 'qop': 'auth', 'realm': 'test realm',
+@@ -74,7 +75,7 @@
+ def testResponse(self):
+ challenge = self.credentialFactory.getChallenge(None)
+
+- creds = self.credentialFactory.decode(authRequest, 'GET')
++ creds = self.credentialFactory.decode(authRequest, SimpleRequest(None, 'GET', '/'))
+ self.failUnless(creds.checkPassword('password'))
+
+ def testFailsWithDifferentMethod(self):
+@@ -80,11 +81,11 @@
+ def testFailsWithDifferentMethod(self):
+ challenge = self.credentialFactory.getChallenge(None)
+
+- creds = self.credentialFactory.decode(authRequest, 'POST')
++ creds = self.credentialFactory.decode(authRequest, SimpleRequest(None, 'POST', '/'))
+ self.failIf(creds.checkPassword('password'))
+
+ def testNoUsername(self):
+- self.assertRaises(error.LoginFailed, self.credentialFactory.decode, namelessAuthRequest, 'GET')
++ self.assertRaises(error.LoginFailed, self.credentialFactory.decode, namelessAuthRequest, SimpleRequest(None, 'GET', '/'))
+
+ from zope.interface import Interface, implements
+ from twisted.cred import portal, checkers
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil (from rev 127, CalendarServer/trunk/lib-patches/dateutil)
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil/setup.patch
===================================================================
--- CalendarServer/trunk/lib-patches/dateutil/setup.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil/setup.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,27 +0,0 @@
---- setup.py.orig 2006-02-02 16:09:41.000000000 -0800
-+++ setup.py 2006-02-02 16:23:30.000000000 -0800
-@@ -3,12 +3,13 @@
- from distutils.core import setup
- import glob
- import os
-+import sys
-+
-+datadir = get_python_lib(1)[len(sys.prefix)+1:]
-
- if os.path.isfile("MANIFEST"):
- os.unlink("MANIFEST")
-
--PYTHONLIB = get_python_lib(1)
--
- setup(name="python-dateutil",
- version = "1.0",
- description = "Extensions to the standard python 2.3+ datetime module",
-@@ -22,6 +23,6 @@
- datetime module, available in Python 2.3+.
- """,
- packages = ["dateutil", "dateutil.zoneinfo"],
-- data_files = [(PYTHONLIB+"/dateutil/zoneinfo",
-- glob.glob("dateutil/zoneinfo/zoneinfo*.tar.*"))],
-+ data_files = [(os.path.join(datadir, "dateutil", "zoneinfo"),
-+ glob.glob(os.path.join("dateutil", "zoneinfo", "zoneinfo*.tar.*")))],
- )
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil/setup.patch (from rev 127, CalendarServer/trunk/lib-patches/dateutil/setup.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil/setup.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/dateutil/setup.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,27 @@
+--- setup.py.orig 2006-02-02 16:09:41.000000000 -0800
++++ setup.py 2006-02-02 16:23:30.000000000 -0800
+@@ -3,12 +3,13 @@
+ from distutils.core import setup
+ import glob
+ import os
++import sys
++
++datadir = get_python_lib(1)[len(sys.prefix)+1:]
+
+ if os.path.isfile("MANIFEST"):
+ os.unlink("MANIFEST")
+
+-PYTHONLIB = get_python_lib(1)
+-
+ setup(name="python-dateutil",
+ version = "1.0",
+ description = "Extensions to the standard python 2.3+ datetime module",
+@@ -22,6 +23,6 @@
+ datetime module, available in Python 2.3+.
+ """,
+ packages = ["dateutil", "dateutil.zoneinfo"],
+- data_files = [(PYTHONLIB+"/dateutil/zoneinfo",
+- glob.glob("dateutil/zoneinfo/zoneinfo*.tar.*"))],
++ data_files = [(os.path.join(datadir, "dateutil", "zoneinfo"),
++ glob.glob(os.path.join("dateutil", "zoneinfo", "zoneinfo*.tar.*")))],
+ )
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject (from rev 127, CalendarServer/trunk/lib-patches/vObject)
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/base.patch
===================================================================
--- CalendarServer/trunk/lib-patches/vObject/base.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/base.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,74 +0,0 @@
-Index: src/vobject/base.py
-===================================================================
---- src/vobject/base.py (revision 147)
-+++ src/vobject/base.py (working copy)
-@@ -1,5 +1,6 @@
- """vobject module for reading vCard and vCalendar files."""
-
-+import copy
- import re
- import sys
- import logging
-@@ -56,6 +57,12 @@
- self.parentBehavior = None
- self.isNative = False
-
-+ def copy(self, copyit):
-+ self.group = copyit.group
-+ self.behavior = copyit.behavior
-+ self.parentBehavior = copyit.parentBehavior
-+ self.isNative = copyit.isNative
-+
- def validate(self, *args, **kwds):
- """Call the behavior's validate method, or return True."""
- if self.behavior:
-@@ -250,6 +257,21 @@
- if qp:
- self.value = str(self.value).decode('quoted-printable')
-
-+ @classmethod
-+ def duplicate(clz, copyit):
-+ newcopy = clz('', {}, '')
-+ newcopy.copy(copyit)
-+ return newcopy
-+
-+ def copy(self, copyit):
-+ super(ContentLine, self).copy(copyit)
-+ self.name = copyit.name
-+ self.value = copy.copy(copyit.value)
-+ self.encoded = self.encoded
-+ self.params = copy.copy(copyit.params)
-+ self.singletonparams = copy.copy(copyit.singletonparams)
-+ self.lineNumber = copyit.lineNumber
-+
- def __eq__(self, other):
- try:
- return (self.name == other.name) and (self.params == other.params) and (self.value == other.value)
-@@ -361,6 +383,27 @@
-
- self.autoBehavior()
-
-+ @classmethod
-+ def duplicate(clz, copyit):
-+ newcopy = clz()
-+ newcopy.copy(copyit)
-+ return newcopy
-+
-+ def copy(self, copyit):
-+ super(Component, self).copy(copyit)
-+
-+ # deep copy of contents
-+ self.contents = {}
-+ for key, lvalue in copyit.contents.items():
-+ newvalue = []
-+ for value in lvalue:
-+ newitem = value.duplicate(value)
-+ newvalue.append(newitem)
-+ self.contents[key] = newvalue
-+
-+ self.name = copyit.name
-+ self.useBegin = copyit.useBegin
-+
- def setProfile(self, name):
- """Assign a PROFILE to this unnamed component.
-
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/base.patch (from rev 127, CalendarServer/trunk/lib-patches/vObject/base.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/base.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/base.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,74 @@
+Index: src/vobject/base.py
+===================================================================
+--- src/vobject/base.py (revision 147)
++++ src/vobject/base.py (working copy)
+@@ -1,5 +1,6 @@
+ """vobject module for reading vCard and vCalendar files."""
+
++import copy
+ import re
+ import sys
+ import logging
+@@ -56,6 +57,12 @@
+ self.parentBehavior = None
+ self.isNative = False
+
++ def copy(self, copyit):
++ self.group = copyit.group
++ self.behavior = copyit.behavior
++ self.parentBehavior = copyit.parentBehavior
++ self.isNative = copyit.isNative
++
+ def validate(self, *args, **kwds):
+ """Call the behavior's validate method, or return True."""
+ if self.behavior:
+@@ -250,6 +257,21 @@
+ if qp:
+ self.value = str(self.value).decode('quoted-printable')
+
++ @classmethod
++ def duplicate(clz, copyit):
++ newcopy = clz('', {}, '')
++ newcopy.copy(copyit)
++ return newcopy
++
++ def copy(self, copyit):
++ super(ContentLine, self).copy(copyit)
++ self.name = copyit.name
++ self.value = copy.copy(copyit.value)
++ self.encoded = self.encoded
++ self.params = copy.copy(copyit.params)
++ self.singletonparams = copy.copy(copyit.singletonparams)
++ self.lineNumber = copyit.lineNumber
++
+ def __eq__(self, other):
+ try:
+ return (self.name == other.name) and (self.params == other.params) and (self.value == other.value)
+@@ -361,6 +383,27 @@
+
+ self.autoBehavior()
+
++ @classmethod
++ def duplicate(clz, copyit):
++ newcopy = clz()
++ newcopy.copy(copyit)
++ return newcopy
++
++ def copy(self, copyit):
++ super(Component, self).copy(copyit)
++
++ # deep copy of contents
++ self.contents = {}
++ for key, lvalue in copyit.contents.items():
++ newvalue = []
++ for value in lvalue:
++ newitem = value.duplicate(value)
++ newvalue.append(newitem)
++ self.contents[key] = newvalue
++
++ self.name = copyit.name
++ self.useBegin = copyit.useBegin
++
+ def setProfile(self, name):
+ """Assign a PROFILE to this unnamed component.
+
Deleted: CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/icalendar.patch
===================================================================
--- CalendarServer/trunk/lib-patches/vObject/icalendar.patch 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/icalendar.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,83 +0,0 @@
-Index: src/vobject/icalendar.py
-===================================================================
---- src/vobject/icalendar.py (revision 147)
-+++ src/vobject/icalendar.py (working copy)
-@@ -374,8 +374,17 @@
- try:
- dtstart = self.dtstart.value
- except AttributeError, KeyError:
-- # if there's no dtstart, just return None
-- return None
-+ # Special for VTODO - try DUE property instead
-+ try:
-+ if self.name == "VTODO":
-+ dtstart = self.due.value
-+ else:
-+ # if there's no dtstart, just return None
-+ return None
-+ except AttributeError, KeyError:
-+ # if there's no due, just return None
-+ return None
-+
- # rrulestr complains about unicode, so cast to str
- rule = dateutil.rrule.rrulestr(str(line.value),
- dtstart=dtstart)
-@@ -380,7 +389,7 @@
- rule = dateutil.rrule.rrulestr(str(line.value),
- dtstart=dtstart)
- until = rule._until
-- if until is not None and until.tzinfo != dtstart.tzinfo:
-+ if until is not None and isinstance(dtstart, datetime.datetime) and (until.tzinfo != dtstart.tzinfo):
- # dateutil converts the UNTIL date to a datetime,
- # check to see if the UNTIL parameter value was a date
- vals = dict(pair.split('=') for pair in
-@@ -417,7 +426,16 @@
- return rruleset
-
- def setrruleset(self, rruleset):
-- dtstart = self.dtstart.value
-+
-+ # Get DTSTART from component (or DUE if no DTSTART in a VTODO)
-+ try:
-+ dtstart = self.dtstart.value
-+ except AttributeError, KeyError:
-+ if self.name == "VTODO":
-+ dtstart = self.due.value
-+ else:
-+ raise
-+
- isDate = datetime.date == type(dtstart)
- if isDate:
- dtstart = datetime.datetime(dtstart.year,dtstart.month, dtstart.day)
-@@ -573,6 +591,8 @@
- if obj.value.tzinfo is None:
- obj.params['X-VOBJ-FLOATINGTIME-ALLOWED'] = ['TRUE']
- if obj.params.get('TZID'):
-+ # Keep a copy of the original TZID around
-+ obj.params['X-VOBJ-ORIGINAL-TZID'] = obj.params['TZID']
- del obj.params['TZID']
- return obj
-
-@@ -585,6 +605,10 @@
- obj.value = dateTimeToString(obj.value, cls.forceUTC)
- if not cls.forceUTC and tzid is not None:
- obj.tzid_param = tzid
-+ if obj.params.get('X-VOBJ-ORIGINAL-TZID'):
-+ if not hasattr(obj, 'tzid_param'):
-+ obj.tzid_param = obj.params['X-VOBJ-ORIGINAL-TZID']
-+ del obj.params['X-VOBJ-ORIGINAL-TZID']
-
- return obj
-
-@@ -605,7 +629,10 @@
- obj.value=str(obj.value)
- obj.value=parseDtstart(obj)
- if getattr(obj, 'value_param', 'DATE-TIME').upper() == 'DATE-TIME':
-- if hasattr(obj, 'tzid_param'): del obj.tzid_param
-+ if hasattr(obj, 'tzid_param'):
-+ # Keep a copy of the original TZID around
-+ obj.params['X-VOBJ-ORIGINAL-TZID'] = obj.tzid_param
-+ del obj.tzid_param
- return obj
-
- @staticmethod
Copied: CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/icalendar.patch (from rev 127, CalendarServer/trunk/lib-patches/vObject/icalendar.patch)
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/icalendar.patch (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/vObject/icalendar.patch 2006-09-12 21:02:19 UTC (rev 128)
@@ -0,0 +1,83 @@
+Index: src/vobject/icalendar.py
+===================================================================
+--- src/vobject/icalendar.py (revision 147)
++++ src/vobject/icalendar.py (working copy)
+@@ -374,8 +374,17 @@
+ try:
+ dtstart = self.dtstart.value
+ except AttributeError, KeyError:
+- # if there's no dtstart, just return None
+- return None
++ # Special for VTODO - try DUE property instead
++ try:
++ if self.name == "VTODO":
++ dtstart = self.due.value
++ else:
++ # if there's no dtstart, just return None
++ return None
++ except AttributeError, KeyError:
++ # if there's no due, just return None
++ return None
++
+ # rrulestr complains about unicode, so cast to str
+ rule = dateutil.rrule.rrulestr(str(line.value),
+ dtstart=dtstart)
+@@ -380,7 +389,7 @@
+ rule = dateutil.rrule.rrulestr(str(line.value),
+ dtstart=dtstart)
+ until = rule._until
+- if until is not None and until.tzinfo != dtstart.tzinfo:
++ if until is not None and isinstance(dtstart, datetime.datetime) and (until.tzinfo != dtstart.tzinfo):
+ # dateutil converts the UNTIL date to a datetime,
+ # check to see if the UNTIL parameter value was a date
+ vals = dict(pair.split('=') for pair in
+@@ -417,7 +426,16 @@
+ return rruleset
+
+ def setrruleset(self, rruleset):
+- dtstart = self.dtstart.value
++
++ # Get DTSTART from component (or DUE if no DTSTART in a VTODO)
++ try:
++ dtstart = self.dtstart.value
++ except AttributeError, KeyError:
++ if self.name == "VTODO":
++ dtstart = self.due.value
++ else:
++ raise
++
+ isDate = datetime.date == type(dtstart)
+ if isDate:
+ dtstart = datetime.datetime(dtstart.year,dtstart.month, dtstart.day)
+@@ -573,6 +591,8 @@
+ if obj.value.tzinfo is None:
+ obj.params['X-VOBJ-FLOATINGTIME-ALLOWED'] = ['TRUE']
+ if obj.params.get('TZID'):
++ # Keep a copy of the original TZID around
++ obj.params['X-VOBJ-ORIGINAL-TZID'] = obj.params['TZID']
+ del obj.params['TZID']
+ return obj
+
+@@ -585,6 +605,10 @@
+ obj.value = dateTimeToString(obj.value, cls.forceUTC)
+ if not cls.forceUTC and tzid is not None:
+ obj.tzid_param = tzid
++ if obj.params.get('X-VOBJ-ORIGINAL-TZID'):
++ if not hasattr(obj, 'tzid_param'):
++ obj.tzid_param = obj.params['X-VOBJ-ORIGINAL-TZID']
++ del obj.params['X-VOBJ-ORIGINAL-TZID']
+
+ return obj
+
+@@ -605,7 +629,10 @@
+ obj.value=str(obj.value)
+ obj.value=parseDtstart(obj)
+ if getattr(obj, 'value_param', 'DATE-TIME').upper() == 'DATE-TIME':
+- if hasattr(obj, 'tzid_param'): del obj.tzid_param
++ if hasattr(obj, 'tzid_param'):
++ # Keep a copy of the original TZID around
++ obj.params['X-VOBJ-ORIGINAL-TZID'] = obj.tzid_param
++ del obj.tzid_param
+ return obj
+
+ @staticmethod
Modified: CalendarServer/branches/users/cdaboo/quota/run
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/run 2006-09-12 01:08:48 UTC (rev 127)
+++ CalendarServer/branches/users/cdaboo/quota/run 2006-09-12 21:02:19 UTC (rev 128)
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
##
# Copyright (c) 2005-2006 Apple Computer, Inc. All rights reserved.
@@ -93,7 +93,7 @@
fi;
top="$(cd "${wd}/.." && pwd -L)"
-patches="${wd}/patches";
+patches="${wd}/lib-patches";
twisted="${top}/Twisted";
dav="${twisted}/twisted/web2/dav"
caldav="${wd}";
@@ -319,6 +319,7 @@
echo "";
echo "Building PyOpenSSL...";
cd "${ssl}";
+ "${python}" ./setup.py build_ext -I/usr/kerberos/include;
"${python}" ./setup.py build;
fi;
fi;
@@ -411,7 +412,7 @@
svn_uri="svn://svn.twistedmatrix.com/svn/Twisted/branches/acl-1608-8";
fi;
- svn_get "Twisted" "${twisted}" "${svn_uri}" 18078;
+ svn_get "Twisted" "${twisted}" "${svn_uri}" 18092;
fi;
py_install "Twisted" "${twisted}";
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20060912/dd57ea55/attachment.html
More information about the calendarserver-changes
mailing list