Commit b97ac428 authored by 's avatar

Added logic to App's __bobo_traverse__ to support DAV, fixed

a bug that affected COPY in specific overwrite situations, added
a borg-specific header to dissuade ie5 from sending multiple
requests to see if we have FrontPage extensions.
parent 6e8f5d10
......@@ -85,8 +85,8 @@
__doc__='''Application support
$Id: Application.py,v 1.95 1999/03/25 17:06:06 jim Exp $'''
__version__='$Revision: 1.95 $'[11:-2]
$Id: Application.py,v 1.96 1999/03/26 19:50:37 brian Exp $'''
__version__='$Revision: 1.96 $'[11:-2]
import Globals,Folder,os,regex,sys,App.Product, App.ProductRegistry, misc_
......@@ -96,6 +96,7 @@ from DateTime import DateTime
from AccessControl.User import UserFolder
from HelpSys.HelpSys import HelpSys
from App.ApplicationManager import ApplicationManager
from webdav.NullResource import NullResource
from Globals import Persistent
from FindSupport import FindSupport
from urllib import quote
......@@ -222,14 +223,16 @@ class Application(Globals.ApplicationDefaultPermissions, Folder.Folder,
try: self._p_jar.cache.incrgc() # Perform incremental GC
except: pass
try: return getattr(self, name)
except AttributeError:
try: return self[name]
except KeyError:
raise 'NotFound',(
"Sorry, the requested document does not exist.<p>"
"\n<!--\n%s\n%s\n-->" % (name,REQUEST['REQUEST_METHOD']))
except AttributeError: pass
try: return self[name]
except KeyError: pass
method=REQUEST.get('REQUEST_METHOD', 'GET')
if not method in ('GET', 'POST'):
return NullResource(self, name, REQUEST).__of__(self)
raise 'NotFound',(
"Sorry, the requested document does not exist.<p>"
"\n<!--\n%s\n%s\n-->" % (name, method))
def PrincipiaTime(self, *args):
"""Utility function to return current date/time"""
......
......@@ -84,14 +84,15 @@
##############################################################################
__doc__="""Object Manager
$Id: ObjectManager.py,v 1.57 1999/03/25 15:45:46 jim Exp $"""
$Id: ObjectManager.py,v 1.58 1999/03/26 19:50:37 brian Exp $"""
__version__='$Revision: 1.57 $'[11:-2]
__version__='$Revision: 1.58 $'[11:-2]
import App.Management, Acquisition, App.Undo, Globals, CopySupport
import App.FactoryDispatcher, ts_regex
from Globals import HTMLFile, HTMLFile, Persistent
from Globals import MessageDialog, default__class_init__
from webdav.NullResource import NullResource
from urllib import quote
bad_id=ts_regex.compile('[^a-zA-Z0-9-_~\,\. ]').match
......@@ -463,10 +464,10 @@ class ObjectManager(
mtime=self.bobobase_modification_time().timeTime()
return marshal.dumps((mode,0,0,1,0,0,0,mtime,mtime,mtime))
def __getitem__(self, key):
v=self._getOb(key, None)
if v is not None: return v
if hasattr(self, 'REQUEST'):
request=self.REQUEST
method=request.get('REQUEST_METHOD', 'GET')
......
......@@ -84,7 +84,7 @@
##############################################################################
"""Property sheets"""
__version__='$Revision: 1.32 $'[11:-2]
__version__='$Revision: 1.33 $'[11:-2]
import time, string, App.Management, Globals
from ZPublisher.Converters import type_converters
......@@ -257,8 +257,10 @@ class PropertySheet(Persistent, Implicit):
def propertyMap(self):
# Return a tuple of mappings, giving meta-data for properties.
__traceback_info__=(`self`, `self.p_self()`, `self.id`, `self.xml_namespace()`, `hasattr(self.p_self(), '__propsets__')`)
return self.p_self()._properties
def _propdict(self):
dict={}
for p in self.propertyMap():
......
......@@ -85,11 +85,12 @@
"""WebDAV support - collection objects."""
__version__='$Revision: 1.12 $'[11:-2]
__version__='$Revision: 1.13 $'[11:-2]
import sys, os, string
from Resource import Resource
import sys, os, string, Globals
from common import urlfix, rfc1123_date
from Resource import Resource
class Collection(Resource):
......@@ -103,7 +104,8 @@ class Collection(Resource):
__ac_permissions__=(
('Add Documents, Images, and Files', ('PUT',)),
('Add Folders', ('MKCOL',)),
# ('Add Folders', ('MKCOL',)),
('Delete objects', ('DELETE',)),
)
def dav__init(self, request, response):
......@@ -117,6 +119,7 @@ class Collection(Resource):
response.setHeader('Content-Location', location)
response.setHeader('Connection', 'close', 1)
response.setHeader('Date', rfc1123_date(), 1)
response.setHeader('MS-Author-Via', 'DAV')
def PUT(self, REQUEST, RESPONSE):
"""The PUT method has no inherent meaning for collection
......@@ -139,3 +142,5 @@ class Collection(Resource):
RESPONSE.setStatus(204)
return RESPONSE
Globals.default__class_init__(Collection)
......@@ -85,9 +85,9 @@
"""WebDAV support - null resource objects."""
__version__='$Revision: 1.16 $'[11:-2]
__version__='$Revision: 1.17 $'[11:-2]
import sys, os, string, mimetypes
import sys, os, string, mimetypes, Globals
import Acquisition, OFS.content_types
from common import absattr, aq_base, urlfix
from AccessControl.Permission import Permission
......@@ -101,6 +101,15 @@ class NullResource(Persistent, Acquisition.Implicit, Resource):
__null_resource__=1
__ac_permissions__=(
('View', ('HEAD',)),
('Access contents information', ('PROPFIND',)),
('Manage properties', ('PROPPATCH',)),
('Add Documents, Images, and Files', ('PUT',)),
('Add Folders', ('MKCOL',)),
('Delete objects', ('DELETE',)),
)
def __init__(self, parent, name, request=None):
self.__name__=name
self.__parent__=parent
......@@ -175,3 +184,6 @@ class NullResource(Persistent, Acquisition.Implicit, Resource):
"""Remove a lock-null resource."""
self.dav__init(REQUEST, RESPONSE)
raise 'Method Not Allowed', 'Method not supported for this resource.'
Globals.default__class_init__(NullResource)
......@@ -85,11 +85,11 @@
"""WebDAV support - resource objects."""
__version__='$Revision: 1.23 $'[11:-2]
__version__='$Revision: 1.24 $'[11:-2]
import sys, os, string, mimetypes, davcmds, ExtensionClass
from common import absattr, aq_base, urlfix, rfc1123_date
import Globals
class Resource(ExtensionClass.Base):
"""The Resource mixin class provides basic WebDAV support for
......@@ -108,8 +108,10 @@ class Resource(ExtensionClass.Base):
__ac_permissions__=(
('View', ('HEAD',)),
('Access contents information', ('PROPFIND',)),
('Delete objects', ('DELETE',)),
('Manage properties', ('PROPPATCH',)),
('Add Documents, Images, and Files', ('PUT',)),
('Delete objects', ('DELETE',)),
('Add Folders', ('MKCOL',)),
)
def dav__init(self, request, response):
......@@ -215,7 +217,7 @@ class Resource(ExtensionClass.Base):
def PROPPATCH(self, REQUEST, RESPONSE):
"""Set and/or remove properties defined on the resource."""
self.dav__init(REQUEST, RESPONSE)
if not hasattr(self, '__propsets__'):
if not hasattr(aq_base(self), 'propertysheets'):
raise 'Method Not Allowed', (
'Method not supported for this resource.')
# TODO: add lock checking here
......@@ -280,7 +282,7 @@ class Resource(ExtensionClass.Base):
ob._delObject(id)
if existing:
object=getattr(parent, name)
obj.dav__validate(object, 'DELETE', request)
self.dav__validate(object, 'DELETE', REQUEST)
parent._delObject(name)
parent._setObject(name, ob)
ob=ob.__of__(parent)
......@@ -359,3 +361,6 @@ class Resource(ExtensionClass.Base):
"""Remove an existing lock on a resource."""
self.dav__init(REQUEST, RESPONSE)
raise 'Method Not Allowed', 'Method not supported for this resource.'
Globals.default__class_init__(Resource)
......@@ -85,7 +85,7 @@
"""WebDAV xml request objects."""
__version__='$Revision: 1.3 $'[11:-2]
__version__='$Revision: 1.4 $'[11:-2]
import sys, os, string, regex
from common import absattr, aq_base, urlfix
......@@ -103,21 +103,13 @@ class DAVProps(DAVProperties):
self.__obj__=obj
def v_self(self):
return self.__obj__
p_self=v_self
## file=open('/projects/users/davtest/var/debug.out', 'w')
## def debug(r):
## file.write(str(r))
## file.write('\n')
## file.write(r.get('BODY', 'No body'))
## file.write('\n\n')
## file.flush()
class PropFind:
"""Model a PROPFIND request."""
def __init__(self, request):
# debug(request)
self.request=request
self.depth='infinity'
self.allprop=0
......@@ -164,7 +156,7 @@ class PropFind:
iscol=hasattr(obj, '__dav_collection__')
if iscol and url[-1] != '/': url=url+'/'
result.write('<d:response>\n<d:href>%s</d:href>\n' % url)
if hasattr(obj, '__propsets__'):
if hasattr(aq_base(obj), 'propertysheets'):
propsets=obj.propertysheets.values()
obsheets=obj.propertysheets
else:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment