[Zope-Checkins] SVN: Zope/trunk/lib/python/webdav/ - always look
for WriteLockInterface *and* IWriteLock (the z3 version of
the same interface)
Yvo Schubbe
y.2005- at wcm-solutions.de
Tue Nov 1 07:55:46 EST 2005
Log message for revision 39806:
- always look for WriteLockInterface *and* IWriteLock (the z3 version of the same interface)
- import and whitespace cleanup
Changed:
U Zope/trunk/lib/python/webdav/Lockable.py
UU Zope/trunk/lib/python/webdav/NullResource.py
U Zope/trunk/lib/python/webdav/Resource.py
UU Zope/trunk/lib/python/webdav/davcmds.py
-=-
Modified: Zope/trunk/lib/python/webdav/Lockable.py
===================================================================
--- Zope/trunk/lib/python/webdav/Lockable.py 2005-11-01 11:49:21 UTC (rev 39805)
+++ Zope/trunk/lib/python/webdav/Lockable.py 2005-11-01 12:55:46 UTC (rev 39806)
@@ -7,7 +7,7 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE
+# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""WebDAV support - lockable item.
@@ -15,17 +15,17 @@
$Id$
"""
+import Acquisition
from AccessControl import ClassSecurityInfo
from Globals import InitializeClass
from Globals import PersistentMapping
-import Acquisition
from zope.interface import implements
from EtagSupport import EtagSupport
+from interfaces import IWriteLock
from WriteLockInterface import LockItemInterface
from WriteLockInterface import WriteLockInterface
-from interfaces import IWriteLock
class ResourceLockedError(Exception): pass
@@ -132,8 +132,10 @@
except:
# The locks may be totally messed up, so we'll just delete
# and replace.
- if hasattr(self, '_dav_writelocks'): del self._dav_writelocks
- if WriteLockInterface.isImplementedBy(self):
+ if hasattr(self, '_dav_writelocks'):
+ del self._dav_writelocks
+ if IWriteLock.providedBy(self) or \
+ WriteLockInterface.isImplementedBy(self):
self._dav_writelocks = PersistentMapping()
# Call into a special hook used by LockNullResources to delete
@@ -150,4 +152,5 @@
def wl_isLocked(ob):
""" Returns true if the object is locked, returns 0 if the object
is not locked or does not implement the WriteLockInterface """
- return WriteLockInterface.isImplementedBy(ob) and ob.wl_isLocked()
+ return (IWriteLock.providedBy(ob) or
+ WriteLockInterface.isImplementedBy(ob)) and ob.wl_isLocked()
Modified: Zope/trunk/lib/python/webdav/NullResource.py
===================================================================
--- Zope/trunk/lib/python/webdav/NullResource.py 2005-11-01 11:49:21 UTC (rev 39805)
+++ Zope/trunk/lib/python/webdav/NullResource.py 2005-11-01 12:55:46 UTC (rev 39806)
@@ -7,29 +7,36 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE
+# FOR A PARTICULAR PURPOSE.
#
##############################################################################
+"""WebDAV support - null resource objects.
-"""WebDAV support - null resource objects."""
+$Id$
+"""
-__version__='$Revision: 1.43 $'[11:-2]
+import sys
-import sys, Globals, davcmds
import Acquisition, OFS.content_types
-from common import aq_base, tokenFinder, IfParser
+import Globals
+import OFS.SimpleItem
from AccessControl import getSecurityManager
-from Resource import Resource
from Globals import Persistent, DTMLFile
-from WriteLockInterface import WriteLockInterface
-import OFS.SimpleItem
+from OFS.CopySupport import CopyError
+from zExceptions import MethodNotAllowed
from zExceptions import Unauthorized, NotFound, Forbidden, BadRequest
-from zExceptions import MethodNotAllowed
+
+import davcmds
+from common import aq_base, tokenFinder, IfParser
from common import isDavCollection
from common import Locked, Conflict, PreconditionFailed, UnsupportedMediaType
-from OFS.CopySupport import CopyError
+from interfaces import IWriteLock
+from Resource import Resource
+from WriteLockInterface import WriteLockInterface
+
class NullResource(Persistent, Acquisition.Implicit, Resource):
+
"""Null resources are used to handle HTTP method calls on
objects which do not yet exist in the url namespace."""
@@ -94,7 +101,9 @@
parent = self.__parent__
ifhdr = REQUEST.get_header('If', '')
- if WriteLockInterface.isImplementedBy(parent) and parent.wl_isLocked():
+ if (IWriteLock.providedBy(parent) or
+ WriteLockInterface.isImplementedBy(parent)) and \
+ parent.wl_isLocked():
if ifhdr:
parent.dav__simpleifhandler(REQUEST, RESPONSE, col=1)
else:
@@ -172,7 +181,9 @@
raise Forbidden, 'Cannot create collection at this location.'
ifhdr = REQUEST.get_header('If', '')
- if WriteLockInterface.isImplementedBy(parent) and parent.wl_isLocked():
+ if (IWriteLock.providedBy(parent) or
+ WriteLockInterface.isImplementedBy(parent)) and \
+ parent.wl_isLocked():
if ifhdr:
parent.dav__simpleifhandler(REQUEST, RESPONSE, col=1)
else:
@@ -202,7 +213,9 @@
name = self.__name__
parent = self.__parent__
- if WriteLockInterface.isImplementedBy(parent) and parent.wl_isLocked():
+ if (IWriteLock.providedBy(parent) or
+ WriteLockInterface.isImplementedBy(parent)) and \
+ parent.wl_isLocked():
if ifhdr:
parent.dav__simpleifhandler(REQUEST, RESPONSE, col=1)
else:
@@ -234,7 +247,7 @@
else:
# The command was succesful
lock = locknull.wl_getLock(token)
- RESPONSE.setStatus(200)
+ RESPONSE.setStatus(200)
RESPONSE.setHeader('Content-Type', 'text/xml; charset="utf-8"')
RESPONSE.setHeader('Lock-Token', 'opaquelocktoken:' + token)
RESPONSE.setBody(lock.asXML())
@@ -369,7 +382,9 @@
# First we need to see if the parent of the locknull is locked, and
# if the user owns that lock (checked by handling the information in
# the If header).
- if WriteLockInterface.isImplementedBy(parent) and parent.wl_isLocked():
+ if (IWriteLock.providedBy(parent) or
+ WriteLockInterface.isImplementedBy(parent)) and \
+ parent.wl_isLocked():
itrue = parent.dav__simpleifhandler(REQUEST, RESPONSE, 'PUT',
col=1, url=parenturl,
refresh=1)
@@ -407,7 +422,8 @@
raise Forbidden, sys.exc_info()[1]
# Put the locks on the new object
- if not WriteLockInterface.isImplementedBy(ob):
+ if not (IWriteLock.providedBy(ob) or
+ WriteLockInterface.isImplementedBy(ob)):
raise MethodNotAllowed, (
'The target object type cannot be locked')
for token, lock in locks:
@@ -439,7 +455,9 @@
# If the parent object is locked, that information should be in the
# if-header if the user owns a lock on the parent
- if WriteLockInterface.isImplementedBy(parent) and parent.wl_isLocked():
+ if (IWriteLock.providedBy(parent) or
+ WriteLockInterface.isImplementedBy(parent)) and \
+ parent.wl_isLocked():
itrue = parent.dav__simpleifhandler(REQUEST, RESPONSE, 'MKCOL',
col=1, url=parenturl,
refresh=1)
@@ -466,5 +484,4 @@
RESPONSE.setBody('')
return RESPONSE
-
Globals.default__class_init__(LockNullResource)
Property changes on: Zope/trunk/lib/python/webdav/NullResource.py
___________________________________________________________________
Name: cvs2svn:cvs-rev
- 1.43
Name: svn:keywords
+ Id
Modified: Zope/trunk/lib/python/webdav/Resource.py
===================================================================
--- Zope/trunk/lib/python/webdav/Resource.py 2005-11-01 11:49:21 UTC (rev 39805)
+++ Zope/trunk/lib/python/webdav/Resource.py 2005-11-01 12:55:46 UTC (rev 39806)
@@ -15,8 +15,8 @@
$Id$
"""
+import mimetypes
import sys
-import mimetypes
from urllib import unquote
import ExtensionClass
@@ -35,6 +35,7 @@
from common import isDavCollection
from common import Locked, Conflict, PreconditionFailed
from interfaces import IDAVResource
+from interfaces import IWriteLock
from WriteLockInterface import WriteLockInterface
@@ -233,8 +234,9 @@
# We're locked, and no if header was passed in, so
# the client doesn't own a lock.
raise Locked, 'Resource is locked.'
- elif WriteLockInterface.isImplementedBy(parent) and \
- parent.wl_isLocked():
+ elif (IWriteLock.providedBy(parent) or
+ WriteLockInterface.isImplementedBy(parent)) and \
+ parent.wl_isLocked():
if ifhdr:
parent.dav__simpleifhandler(REQUEST, RESPONSE, 'DELETE', col=1)
else:
@@ -361,8 +363,9 @@
if existing:
# The destination itself exists, so we need to check its locks
destob = aq_base(parent)._getOb(name)
- if WriteLockInterface.isImplementedBy(destob) and \
- destob.wl_isLocked():
+ if (IWriteLock.providedBy(destob) or
+ WriteLockInterface.isImplementedBy(destob)) and \
+ destob.wl_isLocked():
if ifhdr:
itrue = destob.dav__simpleifhandler(
REQUEST, RESPONSE, 'COPY', refresh=1)
@@ -370,8 +373,9 @@
raise PreconditonFailed
else:
raise Locked, 'Destination is locked.'
- elif WriteLockInterface.isImplementedBy(parent) and \
- parent.wl_isLocked():
+ elif (IWriteLock.providedBy(parent) or
+ WriteLockInterface.isImplementedBy(parent)) and \
+ parent.wl_isLocked():
if ifhdr:
parent.dav__simpleifhandler(REQUEST, RESPONSE, 'COPY',
refresh=1)
@@ -456,8 +460,9 @@
if existing:
# The destination itself exists, so we need to check its locks
destob = aq_base(parent)._getOb(name)
- if WriteLockInterface.isImplementedBy(destob) and \
- destob.wl_isLocked():
+ if (IWriteLock.providedBy(destob) or
+ WriteLockInterface.isImplementedBy(destob)) and \
+ destob.wl_isLocked():
if ifhdr:
itrue = destob.dav__simpleifhandler(
REQUEST, RESPONSE, 'MOVE', url=dest, refresh=1)
@@ -465,8 +470,9 @@
raise PreconditionFailed
else:
raise Locked, 'Destination is locked.'
- elif WriteLockInterface.isImplementedBy(parent) and \
- parent.wl_isLocked():
+ elif (IWriteLock.providedBy(parent) or
+ WriteLockInterface.isImplementedBy(parent)) and \
+ parent.wl_isLocked():
# There's no existing object in the destination folder, so
# we need to check the folders locks since we're changing its
# member list
Modified: Zope/trunk/lib/python/webdav/davcmds.py
===================================================================
--- Zope/trunk/lib/python/webdav/davcmds.py 2005-11-01 11:49:21 UTC (rev 39805)
+++ Zope/trunk/lib/python/webdav/davcmds.py 2005-11-01 12:55:46 UTC (rev 39806)
@@ -7,51 +7,58 @@
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE
+# FOR A PARTICULAR PURPOSE.
#
##############################################################################
-
"""WebDAV xml request objects.
$Id$
"""
import sys
-from common import absattr, aq_base, urlfix, urlbase
-from OFS.PropertySheets import DAVProperties
-from LockItem import LockItem
-from WriteLockInterface import WriteLockInterface
-from Acquisition import aq_parent
-from xmltools import XmlParser
from cStringIO import StringIO
from urllib import quote
+
+import transaction
from AccessControl import getSecurityManager
+from Acquisition import aq_parent
+from OFS.PropertySheets import DAVProperties
+from ZConfig.url import urljoin
from zExceptions import BadRequest, Forbidden
+
+from common import absattr, aq_base, urlfix, urlbase
from common import isDavCollection
from common import PreconditionFailed
-from ZConfig.url import urljoin
-import transaction
+from interfaces import IWriteLock
+from LockItem import LockItem
+from WriteLockInterface import WriteLockInterface
+from xmltools import XmlParser
+
def safe_quote(url, mark=r'%'):
if url.find(mark) > -1:
return url
return quote(url)
+
class DAVProps(DAVProperties):
"""Emulate required DAV properties for objects which do
not themselves support properties. This is mainly so
that non-PropertyManagers can appear to support DAV
PROPFIND requests."""
+
def __init__(self, obj):
self.__obj__=obj
+
def v_self(self):
return self.__obj__
+
p_self=v_self
-
class PropFind:
"""Model a PROPFIND request."""
+
def __init__(self, request):
self.request=request
self.depth='infinity'
@@ -175,9 +182,9 @@
return result.getvalue()
-
class PropPatch:
"""Model a PROPPATCH request."""
+
def __init__(self, request):
self.request=request
self.values=[]
@@ -295,11 +302,9 @@
return result
-
-
-
class Lock:
"""Model a LOCK request."""
+
def __init__(self, request):
self.request = request
data = request.get('BODY', '')
@@ -365,7 +370,8 @@
errmsg = "403 Forbidden"
try:
- if not WriteLockInterface.isImplementedBy(obj):
+ if not (IWriteLock.providedBy(obj) or
+ WriteLockInterface.isImplementedBy(obj)):
if top:
# This is the top level object in the apply, so we
# do want an error
@@ -429,7 +435,8 @@
url = url + '/'
errmsg = None
- islockable = WriteLockInterface.isImplementedBy(obj)
+ islockable = IWriteLock.providedBy(obj) or \
+ WriteLockInterface.isImplementedBy(obj)
if islockable and obj.wl_hasLock(token):
method = getattr(obj, 'wl_delLock')
@@ -465,7 +472,8 @@
if iscol:
for ob in obj.objectValues():
if hasattr(ob, '__dav_resource__') and \
- WriteLockInterface.isImplementedBy(ob):
+ (IWriteLock.providedBy(ob) or
+ WriteLockInterface.isImplementedBy(ob)):
uri = urljoin(url, absattr(ob.id))
self.apply(ob, token, uri, result, top=0)
if not top:
@@ -492,7 +500,8 @@
errmsg = None
parent = aq_parent(obj)
- islockable = WriteLockInterface.isImplementedBy(obj)
+ islockable = IWriteLock.providedBy(obj) or \
+ WriteLockInterface.isImplementedBy(obj)
if parent and (not user.has_permission('Delete objects', parent)):
# User doesn't have permission to delete this object
errmsg = "403 Forbidden"
Property changes on: Zope/trunk/lib/python/webdav/davcmds.py
___________________________________________________________________
Name: cvs2svn:cvs-rev
- 1.23
More information about the Zope-Checkins
mailing list