[Checkins] SVN: z3c.dav/trunk/src/z3c/dav/locking.py Small change
to avoid looking up the lock manager more then once.
Michael Kerrin
michael.kerrin at openapp.ie
Thu May 31 16:26:28 EDT 2007
Log message for revision 76063:
Small change to avoid looking up the lock manager more then once.
Changed:
U z3c.dav/trunk/src/z3c/dav/locking.py
-=-
Modified: z3c.dav/trunk/src/z3c/dav/locking.py
===================================================================
--- z3c.dav/trunk/src/z3c/dav/locking.py 2007-05-31 20:18:22 UTC (rev 76062)
+++ z3c.dav/trunk/src/z3c/dav/locking.py 2007-05-31 20:26:27 UTC (rev 76063)
@@ -67,7 +67,7 @@
if not lockmanager.islockable():
return None
- return LOCKMethod(context, request)
+ return LOCKMethod(context, request, lockmanager)
class LOCKMethod(object):
@@ -77,9 +77,10 @@
interface.implements(z3c.dav.interfaces.IWebDAVMethod)
component.adapts(interface.Interface, z3c.dav.interfaces.IWebDAVRequest)
- def __init__(self, context, request):
+ def __init__(self, context, request, lockmanager):
self.context = context
self.request = request
+ self.lockmanager = lockmanager
def getTimeout(self):
"""
@@ -100,40 +101,46 @@
No supplied value -> default value.
- >>> LOCKMethod(None, TestRequest(environ = {})).getTimeout()
+ >>> LOCKMethod(None, TestRequest(environ = {}), None).getTimeout()
datetime.timedelta(0, 720)
Infinity lock timeout is too long so revert to the default timeout.
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': 'infinity'})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': 'infinity'}),
+ ... None).getTimeout()
datetime.timedelta(0, 720)
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': 'infinite'})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': 'infinite'}),
+ ... None).getTimeout()
datetime.timedelta(0, 720)
Specify a lock timeout of 500 seconds.
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': 'Second-500'})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': 'Second-500'}),
+ ... None).getTimeout()
datetime.timedelta(0, 500)
Invalid and invalid second.
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': 'XXX500'})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': 'XXX500'}),
+ ... None).getTimeout()
Traceback (most recent call last):
...
BadRequest: <zope.publisher.browser.TestRequest instance URL=http://127.0.0.1>, u'Invalid TIMEOUT header'
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': 'XXX-500'})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': 'XXX-500'}),
+ ... None).getTimeout()
Traceback (most recent call last):
...
BadRequest: <zope.publisher.browser.TestRequest instance URL=http://127.0.0.1>, u'Invalid TIMEOUT header'
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': 'Second-500x'})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': 'Second-500x'}),
+ ... None).getTimeout()
Traceback (most recent call last):
...
BadRequest: <zope.publisher.browser.TestRequest instance URL=http://127.0.0.1>, u'Invalid TIMEOUT header'
@@ -142,33 +149,39 @@
>>> timeout = 'Second-%d' %(MAXTIMEOUT + 100)
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': timeout})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': timeout}),
+ ... None).getTimeout()
datetime.timedelta(0, 720)
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': 'Second-3600'})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': 'Second-3600'}),
+ ... None).getTimeout()
datetime.timedelta(0, 3600)
Specify multiple timeout values. The first applicable time type value
is choosen.
>>> LOCKMethod(None, TestRequest(
- ... environ = {'TIMEOUT': 'Infinity, Second-3600'})).getTimeout()
+ ... environ = {'TIMEOUT': 'Infinity, Second-3600'}),
+ ... None).getTimeout()
datetime.timedelta(0, 3600)
>>> timeout = 'Infinity, Second-%d' %(MAXTIMEOUT + 10)
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': timeout})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': timeout}),
+ ... None).getTimeout()
datetime.timedelta(0, 720)
>>> timeout = 'Second-1200, Second-450, Second-500'
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': timeout})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': timeout}),
+ ... None).getTimeout()
datetime.timedelta(0, 1200)
>>> timeout = 'Second-%d, Second-450' %(MAXTIMEOUT + 10)
>>> LOCKMethod(None,
- ... TestRequest(environ = {'TIMEOUT': timeout})).getTimeout()
+ ... TestRequest(environ = {'TIMEOUT': timeout}),
+ ... None).getTimeout()
datetime.timedelta(0, 450)
"""
@@ -210,15 +223,16 @@
>>> from zope.publisher.browser import TestRequest
- >>> LOCKMethod(None, TestRequest()).getDepth()
+ >>> LOCKMethod(None, TestRequest(), None).getDepth()
'infinity'
- >>> LOCKMethod(None, TestRequest(environ = {'DEPTH': '0'})).getDepth()
+ >>> LOCKMethod(
+ ... None, TestRequest(environ = {'DEPTH': '0'}), None).getDepth()
'0'
>>> LOCKMethod(None, TestRequest(
- ... environ = {'DEPTH': 'infinity'})).getDepth()
+ ... environ = {'DEPTH': 'infinity'}), None).getDepth()
'infinity'
>>> LOCKMethod(None, TestRequest(
- ... environ = {'DEPTH': '1'})).getDepth()
+ ... environ = {'DEPTH': '1'}), None).getDepth()
Traceback (most recent call last):
...
BadRequest: <zope.publisher.browser.TestRequest instance URL=http://127.0.0.1>, u"Invalid depth header. Must be either '0' or 'infinity'"
@@ -267,9 +281,7 @@
return etree.tostring(propel)
def handleLockRefresh(self):
- lockmanager = z3c.dav.interfaces.IDAVLockmanager(self.context)
-
- if not lockmanager.islocked():
+ if not self.lockmanager.islocked():
raise z3c.dav.interfaces.PreconditionFailed(
self.context, message = u"Context is not locked.")
@@ -278,7 +290,7 @@
self.context, message = u"Lock-Token doesn't match request uri")
timeout = self.getTimeout()
- lockmanager.refreshlock(timeout)
+ self.lockmanager.refreshlock(timeout)
def handleLock(self):
errors = []
@@ -326,14 +338,12 @@
else:
owner_str = None
- lockmanager = z3c.dav.interfaces.IDAVLockmanager(self.context)
-
try:
- lockmanager.lock(scope = lockscope_str,
- type = locktype_str,
- owner = owner_str,
- duration = timeout,
- depth = depth)
+ self.lockmanager.lock(scope = lockscope_str,
+ type = locktype_str,
+ owner = owner_str,
+ duration = timeout,
+ depth = depth)
except z3c.dav.interfaces.AlreadyLocked, error:
errors.append(error)
@@ -358,7 +368,7 @@
if not lockmanager.islockable():
return None
- return UNLOCKMethod(context, request)
+ return UNLOCKMethod(context, request, lockmanager)
class UNLOCKMethod(object):
@@ -368,9 +378,10 @@
interface.implements(z3c.dav.interfaces.IWebDAVMethod)
component.adapts(interface.Interface, z3c.dav.interfaces.IWebDAVRequest)
- def __init__(self, context, request):
+ def __init__(self, context, request, lockmanager):
self.context = context
self.request = request
+ self.lockmanager = lockmanager
def UNLOCK(self):
locktoken = self.request.getHeader("lock-token", "")
@@ -381,15 +392,15 @@
raise z3c.dav.interfaces.BadRequest(
self.request, message = u"No lock-token header supplied")
- lockmanager = z3c.dav.interfaces.IDAVLockmanager(self.context)
- activelock = component.getMultiAdapter((self.context, self.request),
- IActiveLock)
- if not lockmanager.islocked() or activelock.locktoken[0] != locktoken:
+ activelock = component.getMultiAdapter(
+ (self.context, self.request), IActiveLock)
+ if not self.lockmanager.islocked() or \
+ activelock.locktoken[0] != locktoken:
raise z3c.dav.interfaces.ConflictError(
self.context, message = "object is locked or the lock isn't" \
" in the scope the passed.")
- lockmanager.unlock()
+ self.lockmanager.unlock()
self.request.response.setStatus(204)
return ""
More information about the Checkins
mailing list