[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