[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