[CalendarServer-changes] [180] CalendarServer/branches/users/cdaboo/quota

source_changes at macosforge.org source_changes at macosforge.org
Fri Sep 22 09:10:26 PDT 2006


Revision: 180
          http://trac.macosforge.org/projects/calendarserver/changeset/180
Author:   cdaboo at apple.com
Date:     2006-09-22 09:10:25 -0700 (Fri, 22 Sep 2006)

Log Message:
-----------
merge -r170:178 https://svn.opensource.apple.com/repository/calendarserver/CalendarServer/trunk .

Modified Paths:
--------------
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.davxml.patch
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.element.__init__.patch
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.idav.patch
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.__init__.patch
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.copymove.patch
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.delete.patch
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.proppatch.patch
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.put.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
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.log.patch
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch
    CalendarServer/branches/users/cdaboo/quota/run
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/authkerb.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/caldavxml.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/customxml.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/dateops.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/db.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/directory.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/http.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/ical.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/index.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/itip.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/delete.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/mkcalendar.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/mkcol.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/post.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/put.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/put_common.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_calquery.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_freebusy.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_multiget.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/schedule.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/schedule_common.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/principalindex.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/repository.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/static.py
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test/test_options.py

Added Paths:
-----------
    CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.pyhton.versions.patch

Removed Paths:
-------------
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test/TODO.txt

Property Changed:
----------------
    CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test/

Added: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.pyhton.versions.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.pyhton.versions.patch	                        (rev 0)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.pyhton.versions.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -0,0 +1,13 @@
+Index: twisted/python/versions.py
+===================================================================
+--- twisted/python/versions.py	(revision 18219)
++++ twisted/python/versions.py	(working copy)
+@@ -91,7 +91,7 @@
+         mod = sys.modules.get(self.package)
+         if mod:
+             rev = os.popen("svnversion %r" % (os.path.dirname(mod.__file__),)).read()
+-            return rev
++            return rev.replace("\n", "")
+ 
+     def _formatSVNVersion(self):
+         ver = self._getSVNVersion()

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.davxml.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.davxml.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.davxml.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,6 +1,6 @@
 Index: twisted/web2/dav/davxml.py
 ===================================================================
---- twisted/web2/dav/davxml.py	(revision 18209)
+--- twisted/web2/dav/davxml.py	(revision 18219)
 +++ twisted/web2/dav/davxml.py	(working copy)
 @@ -45,6 +45,7 @@
  from twisted.web2.dav.element.rfc2518 import *

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.element.__init__.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.element.__init__.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.element.__init__.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,6 +1,6 @@
 Index: twisted/web2/dav/element/__init__.py
 ===================================================================
---- twisted/web2/dav/element/__init__.py	(revision 18209)
+--- twisted/web2/dav/element/__init__.py	(revision 18219)
 +++ twisted/web2/dav/element/__init__.py	(working copy)
 @@ -35,4 +35,5 @@
      "rfc2518",

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.idav.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.idav.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.idav.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,6 +1,6 @@
 Index: twisted/web2/dav/idav.py
 ===================================================================
---- twisted/web2/dav/idav.py	(revision 18209)
+--- twisted/web2/dav/idav.py	(revision 18219)
 +++ twisted/web2/dav/idav.py	(working copy)
 @@ -180,6 +180,80 @@
              the specified principal.

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.__init__.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.__init__.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.__init__.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,6 +1,6 @@
 Index: twisted/web2/dav/method/__init__.py
 ===================================================================
---- twisted/web2/dav/method/__init__.py	(revision 18209)
+--- twisted/web2/dav/method/__init__.py	(revision 18219)
 +++ twisted/web2/dav/method/__init__.py	(working copy)
 @@ -40,6 +40,7 @@
      "proppatch",

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.copymove.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.copymove.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.copymove.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,6 +1,6 @@
 Index: twisted/web2/dav/method/copymove.py
 ===================================================================
---- twisted/web2/dav/method/copymove.py	(revision 18209)
+--- twisted/web2/dav/method/copymove.py	(revision 18219)
 +++ twisted/web2/dav/method/copymove.py	(working copy)
 @@ -38,7 +38,7 @@
  from twisted.web2.filter.location import addLocation

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.delete.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.delete.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.delete.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,8 +1,8 @@
 Index: twisted/web2/dav/method/delete.py
 ===================================================================
---- twisted/web2/dav/method/delete.py	(revision 18209)
+--- twisted/web2/dav/method/delete.py	(revision 18219)
 +++ twisted/web2/dav/method/delete.py	(working copy)
-@@ -58,8 +58,26 @@
+@@ -58,8 +58,28 @@
      yield x
      x.getResult()
  
@@ -11,7 +11,9 @@
 +    yield myquota
 +    myquota = myquota.getResult()
 +    if myquota is not None:
-+        old_size = self.quotaSize(request)
++        old_size = waitForDeferred(self.quotaSize(request))
++        yield old_size
++        old_size = old_size.getResult()
 +    else:
 +        old_size = 0
 +

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.proppatch.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.proppatch.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.proppatch.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,6 +1,6 @@
 Index: twisted/web2/dav/method/proppatch.py
 ===================================================================
---- twisted/web2/dav/method/proppatch.py	(revision 18209)
+--- twisted/web2/dav/method/proppatch.py	(revision 18219)
 +++ twisted/web2/dav/method/proppatch.py	(working copy)
 @@ -105,7 +105,7 @@
                  if has:

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.put.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.put.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.method.put.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,6 +1,6 @@
 Index: twisted/web2/dav/method/put.py
 ===================================================================
---- twisted/web2/dav/method/put.py	(revision 18209)
+--- twisted/web2/dav/method/put.py	(revision 18219)
 +++ twisted/web2/dav/method/put.py	(working copy)
 @@ -34,7 +34,7 @@
  from twisted.web2 import responsecode

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.resource.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,8 +1,8 @@
 Index: twisted/web2/dav/resource.py
 ===================================================================
---- twisted/web2/dav/resource.py	(revision 18209)
+--- twisted/web2/dav/resource.py	(revision 18219)
 +++ twisted/web2/dav/resource.py	(working copy)
-@@ -75,7 +75,9 @@
+@@ -80,7 +80,9 @@
         stored anywhere (by this class) but instead are derived from the resource
         state or from data that is persisted elsewhere.  These are listed in the
         L{liveProperties} attribute and are handled explicitly by the
@@ -13,18 +13,9 @@
  
      3. Live properties may be acted on specially and are stored in the X{dead
         property store}.  These are not listed in the L{liveProperties} attribute,
-@@ -125,6 +127,8 @@
-         (dav_namespace, "acl-restrictions"          ), # RFC 3744, section 5.6
-         (dav_namespace, "inherited-acl-set"         ), # RFC 3744, section 5.7
-         (dav_namespace, "principal-collection-set"  ), # RFC 3744, section 5.8
-+        (dav_namespace, "quota-available-bytes"     ), # RFC 4331, section 3
-+        (dav_namespace, "quota-used-bytes"          ), # RFC 4331, section 4
- 
+@@ -134,6 +136,12 @@
          (twisted_dav_namespace, "resource-class"),
      )
-@@ -129,6 +133,12 @@
-         (twisted_dav_namespace, "resource-class"),
-     )
  
 +    # These are live (compued) properties that may exist on only certain resources
 +    dynamicLiveProperties = (
@@ -35,26 +26,26 @@
      def deadProperties(self):
          """
          Provides internal access to the WebDAV dead property store.  You
-@@ -161,6 +171,15 @@
+@@ -166,6 +174,15 @@
          if qname[0] == twisted_private_namespace:
              return succeed(False)
  
 +        # Need to special case the dynamic live properties
-+        if (qname in self.dynamicLiveProperties):
++        if qname in self.dynamicLiveProperties:
 +            namespace, name = qname
 +            if namespace == dav_namespace:
-+                if name in ["quota-available-bytes", "quota-used-bytes"]:
-+                    d = self.quota(request)
-+                    d.addCallback(lambda qvalue: qvalue is not None)
++                if name in ("quota-available-bytes", "quota-used-bytes"):
++                    d = self.hasQuota(request)
++                    d.addCallback(lambda result: result)
 +                    return d
 +        
          return succeed(qname in self.liveProperties or self.deadProperties().contains(qname))
  
      def readProperty(self, property, request):
-@@ -263,6 +282,32 @@
-                         # TODO: Merge change from original patch
-                         lambda: self.safeAccessControlList(request)
-                     )
+@@ -272,6 +289,32 @@
+                         d.addCallback(gotACL)
+                         return d
+                     return ifAllowed((davxml.ReadACL(),), callback)
 +                    
 +                if name == "quota-available-bytes":
 +                    def callback(qvalue):
@@ -82,9 +73,9 @@
 +                    d.addCallback(callback)
 +                    return d
  
-             if namespace == twisted_dav_namespace:
+             elif namespace == twisted_dav_namespace:
                  if name == "resource-class":
-@@ -320,7 +365,8 @@
+@@ -329,7 +372,8 @@
                  qname = property.qname()
                  sname = property.sname()
  
@@ -94,7 +85,7 @@
                  raise HTTPError(StatusResponse(
                      responsecode.FORBIDDEN,
                      "Live property %s cannot be deleted." % (sname,)
-@@ -343,6 +389,14 @@
+@@ -352,6 +396,14 @@
          # FIXME: A set would be better here, that that's a python 2.4+ feature.
          qnames = list(self.liveProperties)
  
@@ -109,7 +100,7 @@
          for qname in self.deadProperties().list():
              if (qname not in qnames) and (qname[0] != twisted_private_namespace):
                  qnames.append(qname)
-@@ -347,7 +401,9 @@
+@@ -356,7 +408,9 @@
              if (qname not in qnames) and (qname[0] != twisted_private_namespace):
                  qnames.append(qname)
  
@@ -120,7 +111,7 @@
  
      def listAllprop(self, request):
          """
-@@ -1507,6 +1563,264 @@
+@@ -1501,6 +1555,265 @@
          return None
  
      ##
@@ -203,6 +194,7 @@
 +        # Check this one first
 +        if self.hasQuotaRoot(request):
 +            yield True
++            return
 +        
 +        # Look at each parent
 +        url = request.urlForResource(self)
@@ -385,10 +377,10 @@
      # HTTP
      ##
  
-@@ -1741,6 +2055,28 @@
+@@ -1702,6 +2015,28 @@
+ davxml.registerElement(TwistedACLInheritable)
+ davxml.ACE.allowed_children[(twisted_dav_namespace, "inheritable")] = (0, 1)
  
- davxml.registerElement(TwistedAccessDisabledProperty)
- 
 +"""
 +When set on a collection, this property indicates that the collection has a quota limit for
 +the size of all resources stored in the collection (and any associate meta-data such as properties).

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.dav.static	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,8 +1,8 @@
 Index: twisted/web2/dav/static.py
 ===================================================================
---- twisted/web2/dav/static.py	(revision 18209)
+--- twisted/web2/dav/static.py	(revision 18219)
 +++ twisted/web2/dav/static.py	(working copy)
-@@ -98,6 +98,61 @@
+@@ -98,6 +98,50 @@
          return succeed(davPrivilegeSet)
  
      ##
@@ -18,48 +18,37 @@
 +        @return: an L{Deferred} with a C{int} result containing the size of the resource.
 +        """
 +        if self.isCollection():
-+            return self.collectionQuotaUse(request)
++            def walktree(top):
++                """
++                Recursively descend the directory tree rooted at top,
++                calling the callback function for each regular file
++                
++                @param top: L{FilePath} for the directory to walk.
++                """
++            
++                total = 0
++                for f in top.listdir():
++                    child = top.child(f)
++                    if child.isdir():
++                        # It's a directory, recurse into it
++                        result = waitForDeferred(walktree(child))
++                        yield result
++                        total += result.getResult()
++                    elif child.isfile():
++                        # It's a file, call the callback function
++                        total += child.getsize()
++                    else:
++                        # Unknown file type, print a message
++                        pass
++            
++                yield total
++            
++            walktree = deferredGenerator(walktree)
++    
++            return walktree(self.fp)
 +        else:
 +            return succeed(self.fp.getsize())
 +
-+    def collectionQuotaUse(self, request):
-+        """
-+        Brute force determination of quota used by this collection.
-+
-+        @return: an L{Deferred} with a C{int} result containing the current used byte if this collection
-+            is quota-controlled, or C{None} if not quota controlled.
-+        """
-+        assert self.isCollection(), "Only collections can have a quota root"
-+
-+        def walktree(top):
-+            """
-+            Recursively descend the directory tree rooted at top,
-+            calling the callback function for each regular file
-+            
-+            @param top: L{FilePath} for the directory to walk.
-+            """
-+        
-+            total = 0
-+            for f in top.listdir():
-+                child = top.child(f)
-+                if child.isdir():
-+                    # It's a directory, recurse into it
-+                    result = waitForDeferred(walktree(child))
-+                    yield result
-+                    total += result.getResult()
-+                elif child.isfile():
-+                    # It's a file, call the callback function
-+                    total += child.getsize()
-+                else:
-+                    # Unknown file type, print a message
-+                    pass
-+        
-+            yield total
-+        
-+        walktree = deferredGenerator(walktree)
-+
-+        return walktree(self.fp)
-+
 +    ##
      # Workarounds for issues with File
      ##

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.log.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.log.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.log.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,6 +1,6 @@
 Index: twisted/web2/log.py
 ===================================================================
---- twisted/web2/log.py	(revision 18209)
+--- twisted/web2/log.py	(revision 18219)
 +++ twisted/web2/log.py	(working copy)
 @@ -88,7 +88,7 @@
  class LogWrapperResource(resource.WrapperResource):

Modified: CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/lib-patches/Twisted/twisted.web2.server.patch	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,16 +1,7 @@
 Index: twisted/web2/server.py
 ===================================================================
---- twisted/web2/server.py	(revision 18209)
+--- twisted/web2/server.py	(revision 18219)
 +++ 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
 @@ -156,7 +156,9 @@
          self.resources = []
          http.Request.__init__(self, *args, **kw)
@@ -22,34 +13,3 @@
          if atEnd:
              self.responseFilters.append(f)
          else:
-@@ -316,7 +318,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 +344,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 +411,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)

Modified: CalendarServer/branches/users/cdaboo/quota/run
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/run	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/run	2006-09-22 16:10:25 UTC (rev 180)
@@ -415,7 +415,7 @@
       ;;
   esac;
   svn_uri="${proto}://svn.twistedmatrix.com/svn/Twisted/branches/dav-acl-1608";
-  svn_get "Twisted" "${twisted}" "${svn_uri}" 18205;
+  svn_get "Twisted" "${twisted}" "${svn_uri}" 18218;
 fi;
 py_install "Twisted" "${twisted}";
  

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/authkerb.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/authkerb.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/authkerb.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -29,7 +29,6 @@
      that implements full GSSAPI authentication.
 """
 
-
 __all__ = [
     "BasicKerberosCredentials",
     "BasicKerberosAuthorizer",

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/caldavxml.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/caldavxml.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/caldavxml.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -27,8 +27,6 @@
 See draft spec: http://ietf.webdav.org/caldav/draft-dusseault-caldav.txt
 """
 
-__version__ = "0.0"
-
 from twisted.python import log
 from twisted.web2.dav import davxml
 

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/customxml.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/customxml.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/customxml.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -29,8 +29,6 @@
 from twisted.web2.dav.resource import twisted_dav_namespace
 from twisted.web2.dav import davxml
 
-__version__ = "0.0"
-
 class TwistedGUIDProperty (davxml.WebDAVTextElement):
     """
     Contains the GUID value for a directory record corresponding to a principal.

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/dateops.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/dateops.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/dateops.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 Date/time Utilities
 """
 
-__version__ = "0.0"
-
 __all__ = [
     "normalizeToUTC",
     "normalizeForIndex",

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/db.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/db.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/db.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -21,21 +21,16 @@
 different types of index we need in the server.
 """
 
+__all__ = ["AbstractIndex"]
+
 from pysqlite2 import dbapi2 as sqlite
 from twisted.python import log
 from twisted.python.failure import Failure
 import os
 
-__version__ = "0.0"
-
-__all__ = ["AbstractIndex"]
-
 db_basename = ".db.sqlite"
 
 class AbstractIndex(object):
-    """
-    """
-
     def __init__(self, resource, returnUTF8 = True):
         """
         @param resource: the L{twistedcaldav.static.CalDAVFile} resource to

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/directory.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/directory.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/directory.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -19,6 +19,15 @@
 """
 Implements a directory-backed principal hierarchy.
 """
+
+__all__ = [
+    "DirectoryPrincipalFile",
+    "DirectoryUserPrincipalProvisioningResource",
+    "DirectoryGroupPrincipalProvisioningResource",
+    "DirectoryResourcePrincipalProvisioningResource",
+    "DirectoryPrincipalProvisioningResource",
+]
+
 from zope.interface import implements
 
 from twisted.cred import checkers, credentials, error
@@ -30,7 +39,6 @@
 from twisted.web2 import responsecode
 from twisted.web2.dav import davxml
 from twisted.web2.dav.auth import IPrincipalCredentials
-from twisted.web2.dav.resource import TwistedAccessDisabledProperty
 from twisted.web2.dav.static import DAVFile
 from twisted.web2.dav.util import joinURL
 from twisted.web2.http import HTTPError
@@ -49,15 +57,6 @@
 import os
 import unicodedata
 
-__all__ = [
-    "DirectoryPrincipalFile",
-    "DirectoryUserPrincipalProvisioningResource",
-    "DirectoryGroupPrincipalProvisioningResource",
-    "DirectoryResourcePrincipalProvisioningResource",
-    "DirectoryPrincipalProvisioningResource",
-]
-
-
 class DirectoryCredentialsChecker:
     implements(checkers.ICredentialsChecker)
 
@@ -250,21 +249,20 @@
         @param calhome: L{DAVFile} for the container of the calendar home of this user.
         @param enable: C{True} to enable, C{False} to disable.
         """
-        
         # Get home collection resource
         calrsrc = calhome.getChild(self.principalUID())
 
         # Handle access for the calendar home
         if enable:
-            calrsrc.removeDeadProperty(TwistedAccessDisabledProperty)
+            calrsrc.disable(False)
         else:
-            calrsrc.writeDeadProperty(TwistedAccessDisabledProperty())
+            calrsrc.disable(True)
 
     def remove(self, calhome):
         """
         Remove this principal by hiding (archiving) any calendars owned by it. This is done
-        by turning on the TwistedAccessDisabledProperty and renaming the calendar home to ensure
-        a future user with the same id won't see the old calendars.
+        by turning on the disabling and renaming the calendar home to ensure a future user
+        with the same id won't see the old calendars.
         
         @param calhome: L{DAVFile} for the container of the calendar home of this user.
         """
@@ -273,7 +271,7 @@
         calrsrc = calhome.getChild(self.principalUID())
 
         # Disable access for the calendar home
-        calrsrc.writeDeadProperty(TwistedAccessDisabledProperty())
+        calrsrc.disable(True)
         
         # Rename the calendar home to the original name with the GUID appended
         newname = self.principalUID() + "-" + self.getPropertyValue(customxml.TwistedGUIDProperty)
@@ -292,8 +290,7 @@
                     (calrsrc.fp.path, calrsrc.fp.sibling(newname).path))
             
             # Remove the disabled property to prevent lock out in the future
-            calrsrc.removeDeadProperty(TwistedAccessDisabledProperty())
-           
+            calrsrc.disable(False)
 
 class DirectoryTypePrincipalProvisioningResource (CalendarPrincipalCollectionResource, DAVFile):
     """

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/http.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/http.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/http.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -16,11 +16,11 @@
 # DRI: Wilfredo Sanchez, wsanchez at apple.com
 ##
 
-__version__ = "0.0"
+__all__ = [
+    "ScheduleResponseResponse",
+    "ScheduleResponseQueue"
+]
 
-__all__ = ["ScheduleResponseResponse", "ScheduleResponseQueue"]
-
-
 from twisted.python import log
 from twisted.python.failure import Failure
 from twisted.web2 import responsecode

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/ical.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/ical.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/ical.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 iCalendar Utilities
 """
 
-__version__ = "0.0"
-
 __all__ = [
     "Property",
     "Component",

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/index.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/index.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/index.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -23,10 +23,12 @@
 change.
 """
 
-__version__ = "0.0"
+__all__ = [
+    "AbstractIndex",
+    "Index",
+    "IndexSchedule",
+]
 
-__all__ = ["Index"]
-
 import os
 import datetime
 
@@ -665,7 +667,6 @@
     """
     Schedule collection index - does not require UID uniqueness.
     """
-    
     def __init__(self, resource):
         """
         @param resource: the L{twistedcaldav.static.CalDAVFile} resource to

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/itip.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/itip.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/itip.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -18,16 +18,20 @@
 
 """
 iTIP (RFC2446) processing.
+"""
 
-This is currently used for handling auto-replies to schedule request arriving in an Inbox. It is called in a delayed
-fashion via reactor.callLater.
+#
+# This is currently used for handling auto-replies to schedule requests arriving
+# in an inbox. It is called in a delayed fashion via reactor.callLater.
+#
+# We assume that all the components/calendars we deal with have been determined
+# as being 'valid for CalDAV/iTIP', i.e. they contain UIDs, single component
+# types, etc.
+#
+# The logic for component matching needs a lot more work as it currently does not
+# know how to deal with overridden instances.
+#
 
-BTW We assume that all the components/calendars we deal with have been determined as being 'valid for CalDAV/iTIP'.
-i.e. they contain UIDs, single component types etc.
-
-NB The logic for component matching needs a lot more work as it currently does not know how to deal with overridden instances.
-"""
-
 import datetime
 import logging
 import md5

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/delete.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/delete.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/delete.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV DELETE method.
 """
 
-__version__ = "0.0"
-
 __all__ = ["http_DELETE"]
 
 from twisted.internet.defer import maybeDeferred

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/mkcalendar.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/mkcalendar.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/mkcalendar.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV MKCALENDAR method.
 """
 
-__version__ = "0.0"
-
 __all__ = ["http_MKCALENDAR"]
 
 from twisted.internet.defer import deferredGenerator

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/mkcol.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/mkcol.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/mkcol.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV MKCOL method.
 """
 
-__version__ = "0.0"
-
 __all__ = ["http_MKCOL"]
 
 from twisted.internet.defer import deferredGenerator, waitForDeferred

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/post.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/post.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/post.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV POST method.
 """
 
-__version__ = "0.0"
-
 __all__ = ["http_POST"]
 
 from twisted.internet.defer import deferredGenerator, waitForDeferred

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/put.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/put.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/put.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV PUT method.
 """
 
-__version__ = "0.0"
-
 __all__ = ["http_PUT"]
 
 from twisted.internet.defer import deferredGenerator, waitForDeferred

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/put_common.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/put_common.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/put_common.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 PUT/COPY/MOVE common behavior.
 """
 
-__version__ = "0.0"
-
 __all__ = ["storeCalendarObjectResource"]
 
 from twisted.internet.defer import deferredGenerator

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_calquery.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_calquery.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_calquery.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV calendar-query report
 """
 
-__version__ = "0.0"
-
 __all__ = ["report_urn_ietf_params_xml_ns_caldav_calendar_query"]
 
 from twisted.internet.defer import deferredGenerator, succeed, waitForDeferred

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_freebusy.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_freebusy.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_freebusy.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV freebusy report
 """
 
-__version__ = "0.0"
-
 __all__ = ["report_urn_ietf_params_xml_ns_caldav_free_busy_query"]
 
 from twisted.internet.defer import deferredGenerator, waitForDeferred

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_multiget.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_multiget.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/report_multiget.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV multiget report
 """
 
-__version__ = "0.0"
-
 __all__ = ["report_urn_ietf_params_xml_ns_caldav_calendar_multiget"]
 
 from twisted.internet.defer import deferredGenerator, waitForDeferred

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/schedule.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/schedule.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/schedule.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV SCHEDULE method.
 """
 
-__version__ = "0.0"
-
 __all__ = ["http_SCHEDULE"]
 
 from twisted.internet.defer import deferredGenerator, waitForDeferred

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/schedule_common.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/schedule_common.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/method/schedule_common.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV Schedule processing.
 """
 
-__version__ = "0.0"
-
 __all__ = ["processScheduleRequest"]
 
 from twisted.internet import reactor

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/principalindex.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/principalindex.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/principalindex.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -25,18 +25,16 @@
 
 """
 
-from twistedcaldav import customxml
-from twistedcaldav.db import AbstractIndex
-from twistedcaldav.db import db_basename
-
-__version__ = "0.0"
-
 __all__ = [
     "UserIndex",
     "GroupIndex",
     "ResourceIndex",
 ]
 
+from twistedcaldav import customxml
+from twistedcaldav.db import AbstractIndex
+from twistedcaldav.db import db_basename
+
 schema_version = "1"
 collection_types = {
     "Users"    : "User Principals",

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/repository.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/repository.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/repository.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -22,6 +22,8 @@
 properties, access control etc setup.
 """
 
+__all__ = ["RepositoryBuilder"]
+
 from twisted.python import log
 from twisted.python.filepath import FilePath
 from twisted.web2.dav import davxml
@@ -29,8 +31,6 @@
 from twisted.web2.dav.element.base import PCDATAElement
 from twisted.web2.dav.element.parser import lookupElement
 from twisted.web2.dav.resource import TwistedACLInheritable
-from twisted.web2.dav.resource import TwistedACLProperty
-from twisted.web2.dav.resource import TwistedPrincipalCollectionSetProperty
 from twisted.web2.dav.static import DAVFile
 from twisted.web2.dav.util import joinURL
 from twistedcaldav import caldavxml
@@ -102,28 +102,30 @@
 ELEMENT_AUTORESPOND = "autorespond"
 ATTRIBUTE_REPEAT = "repeat"
 
-classMap = {"DAVFile":                                        DAVFile,
-            "CalDAVFile":                                     CalDAVFile,
-            "CalendarPrincipalProvisioningResource":          CalendarPrincipalProvisioningResource,
-            "CalendarUserPrincipalProvisioningResource":      CalendarUserPrincipalProvisioningResource,
-            "CalendarPrincipalFile":                          CalendarPrincipalFile,
-            "CalendarHomeProvisioningFile":                   CalendarHomeProvisioningFile,
-            "CalendarHomeFile":                               CalendarHomeFile,
-            "DirectoryPrincipalProvisioningResource":         DirectoryPrincipalProvisioningResource,
-            "DirectoryUserPrincipalProvisioningResource":     DirectoryUserPrincipalProvisioningResource,
-            "DirectoryGroupPrincipalProvisioningResource":    DirectoryGroupPrincipalProvisioningResource,
-            "DirectoryResourcePrincipalProvisioningResource": DirectoryResourcePrincipalProvisioningResource,
+classMap = {
+    "DAVFile":                                        DAVFile,
+    "CalDAVFile":                                     CalDAVFile,
+    "CalendarPrincipalProvisioningResource":          CalendarPrincipalProvisioningResource,
+    "CalendarUserPrincipalProvisioningResource":      CalendarUserPrincipalProvisioningResource,
+    "CalendarPrincipalFile":                          CalendarPrincipalFile,
+    "CalendarHomeProvisioningFile":                   CalendarHomeProvisioningFile,
+    "CalendarHomeFile":                               CalendarHomeFile,
+    "DirectoryPrincipalProvisioningResource":         DirectoryPrincipalProvisioningResource,
+    "DirectoryUserPrincipalProvisioningResource":     DirectoryUserPrincipalProvisioningResource,
+    "DirectoryGroupPrincipalProvisioningResource":    DirectoryGroupPrincipalProvisioningResource,
+    "DirectoryResourcePrincipalProvisioningResource": DirectoryResourcePrincipalProvisioningResource,
 }
 
-urld = ["CalendarPrincipalProvisioningResource",
-        "CalendarUserPrincipalProvisioningResource",
-        "DirectoryPrincipalProvisioningResource",
-        "DirectoryUserPrincipalProvisioningResource",
-        "DirectoryGroupPrincipalProvisioningResource",
-        "DirectoryResourcePrincipalProvisioningResource",
-        ]
+urld = [
+    "CalendarPrincipalProvisioningResource",
+    "CalendarUserPrincipalProvisioningResource",
+    "DirectoryPrincipalProvisioningResource",
+    "DirectoryUserPrincipalProvisioningResource",
+    "DirectoryGroupPrincipalProvisioningResource",
+    "DirectoryResourcePrincipalProvisioningResource",
+]
 
-class RepositoryBuilder(object):
+class RepositoryBuilder (object):
     """
     Builds a repository hierarchy at a supplied document root file system path,
     and optionally provisions accounts.
@@ -189,7 +191,7 @@
             elif child._get_localName() == ELEMENT_ACCOUNTS:
                 self.accounts.parseXML(child)
 
-class DocRoot(object):
+class DocRoot (object):
     """
     Represents the hierarchy of resource collections that form the CalDAV repository.
     """
@@ -231,10 +233,10 @@
                 return
             
             # Create the private property
-            pcs = TwistedPrincipalCollectionSetProperty(davxml.HRef.fromString(self.principalCollection.uri))
+            pcs = davxml.PrincipalCollectionSet(davxml.HRef.fromString(self.principalCollection.uri))
             self.collection.resource.writeDeadProperty(pcs)
 
-class Collection(object):
+class Collection (object):
     """
     Contains information about a collection in the repository.
     """
@@ -362,7 +364,7 @@
 
         return self.resource
 
-class Prop(object):
+class Prop (object):
     """
     Parses a property from XML.
     """
@@ -394,7 +396,7 @@
 
         return propClazz(*children)
         
-class ACL(object):
+class ACL (object):
     """
     Parses a DAV:ACL from XML.
     """
@@ -498,7 +500,7 @@
                    item = davxml.HRef.fromString("")
         return davxml.Inherited(item)
     
-class Provisioner(object):
+class Provisioner (object):
     """
     Manages account provisioning.
     """
@@ -647,8 +649,8 @@
                 inbox.writeDeadProperty(customxml.TwistedScheduleAutoRespond())
 
             outbox = home.getChild("outbox")
-            if outbox.hasDeadProperty(TwistedACLProperty()):
-                outbox.removeDeadProperty(TwistedACLProperty())
+            if outbox.hasDeadProperty(davxml.ACL()):
+                outbox.removeDeadProperty(davxml.ACL())
 
         calendars = []
         for calendar in item.calendars:
@@ -680,7 +682,7 @@
             fbset = caldavxml.CalendarFreeBusySet(*[davxml.HRef.fromString(uri) for uri in calendars])
             inbox.writeDeadProperty(fbset)
 
-class ProvisionPrincipal(object):
+class ProvisionPrincipal (object):
     """
     Contains provision information for one user.
     """
@@ -759,5 +761,3 @@
                 self.acl.parseXML(child)
             elif child._get_localName() == ELEMENT_AUTORESPOND:
                 self.autorespond = True
-
-           

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/static.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/static.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/static.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -20,8 +20,6 @@
 CalDAV-aware static resources.
 """
 
-__version__ = "0.0"
-
 __all__ = [
     "CalDAVFile",
     "ScheduleInboxFile",
@@ -41,17 +39,16 @@
 from twisted.python import log
 from twisted.python.filepath import FilePath
 from twisted.web2 import responsecode
+from twisted.web2.http import HTTPError, StatusResponse
 from twisted.web2.dav import davxml
 from twisted.web2.dav.auth import TwistedPasswordProperty
 from twisted.web2.dav.fileop import mkcollection, rmdir
 from twisted.web2.dav.http import ErrorResponse
 from twisted.web2.dav.idav import IDAVResource
 from twisted.web2.dav.resource import TwistedACLInheritable
-from twisted.web2.dav.resource import TwistedACLProperty
 from twisted.web2.dav.resource import TwistedQuotaRootProperty
 from twisted.web2.dav.static import DAVFile
 from twisted.web2.dav.util import parentForURL, joinURL, bindMethods
-from twisted.web2.http import HTTPError, StatusResponse
 
 from twistedcaldav import caldavxml
 from twistedcaldav import customxml
@@ -607,6 +604,31 @@
             if not child_fp.exists(): child_fp.makedirs()
             self.putChild(name, clazz(child_fp.path))
 
+    def disable(self, disabled=True):
+        """
+        Completely disables all access to this resource, regardless of ACL
+        settings.
+        @param disabled: If true, disabled all access. If false, enables access.
+        """
+        if disabled:
+            self.writeDeadProperty(AccessDisabled)
+        else:
+            self.removeDeadProperty(AccessDisabled)
+
+    def isDisabled(self):
+        """
+        @return: C{True} if access to this resource is disabled, C{False}
+            otherwise.
+        """
+        return self.hasDeadProperty(AccessDisabled)
+
+    # FIXME: Perhaps this is better done in authorize() instead.
+    def accessControlList(self, *args, **kwargs):
+        if self.isDisabled():
+            return succeed(None)
+
+        return super(CalendarHomeFile, self).accessControlList(*args, **kwargs)
+
     def createSimilarFile(self, path):
         return CalDAVFile(path)
 
@@ -810,8 +832,8 @@
                 inbox.writeDeadProperty(customxml.TwistedScheduleAutoRespond())
 
             outbox = home.getChild("outbox")
-            if outbox.hasDeadProperty(TwistedACLProperty()):
-                outbox.removeDeadProperty(TwistedACLProperty())
+            if outbox.hasDeadProperty(davxml.ACL()):
+                outbox.removeDeadProperty(davxml.ACL())
 
         calendars = []
         for calendar in cals:
@@ -978,6 +1000,16 @@
         )
 
 ##
+# Utilities
+##
+
+class AccessDisabled (davxml.WebDAVEmptyElement):
+    namespace = davxml.twisted_private_namespace
+    name = "caldav-access-disabled"
+
+davxml.registerElement(AccessDisabled)
+
+##
 # Attach methods
 ##
 


Property changes on: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test
___________________________________________________________________
Name: svn:ignore
   + xmldata
oddata
newdata


Deleted: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test/TODO.txt
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test/TODO.txt	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test/TODO.txt	2006-09-22 16:10:25 UTC (rev 180)
@@ -1,2 +0,0 @@
-Tests to write:
-- Make sure index behaviour is correct after COPY, MOVE, DELETE

Modified: CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test/test_options.py
===================================================================
--- CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test/test_options.py	2006-09-22 14:25:41 UTC (rev 179)
+++ CalendarServer/branches/users/cdaboo/quota/twistedcaldav/test/test_options.py	2006-09-22 16:10:25 UTC (rev 180)
@@ -71,8 +71,6 @@
 
         return self.send(request, do_test)
 
-    test_allow_header_acl.todo = "ACLs are unimplemented."
-
     def test_allow_header_deltav(self):
         """
         Allow header advertises REPORT

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20060922/667c668e/attachment.html


More information about the calendarserver-changes mailing list