[Zope-Checkins] CVS: Zope/lib/python/ZPublisher - FTP.py:1.1.2.1 WebDAV.py:1.1.2.1 BaseRequest.py:1.39.20.4 Browser.py:1.1.2.2 HTTPRequest.py:1.55.4.1
Shane Hathaway
shane@digicool.com
Thu, 4 Oct 2001 16:51:45 -0400
Update of /cvs-repository/Zope/lib/python/ZPublisher
In directory cvs.zope.org:/tmp/cvs-serv23399
Modified Files:
Tag: ComponentArchitecture-branch
BaseRequest.py Browser.py HTTPRequest.py
Added Files:
Tag: ComponentArchitecture-branch
FTP.py WebDAV.py
Log Message:
Changed names of traversal methods from __bobo_traverse__ and added a
_finalTraverse() method to BaseRequest.
=== Added File Zope/lib/python/ZPublisher/FTP.py ===
import Interface
class FTPPublish (Interface.Base):
def _ftp_traverse(request, name):
"""
"""
def manage_FTPlist():
"""
"""
def manage_FTPstat():
"""
"""
def manage_FTPget():
"""
"""
def manage_delObjects(ids):
"""
"""
def manage_addFolder(id):
"""
"""
def manage_renameObject(id, new_id):
"""
"""
def PUT():
"""
"""
class BaseLeafFTPPublish:
__implements__ = FTPPublish
def _ftp_traverse(self, request, name):
"""
This is called with the name of a method such as 'manage_FTPget'.
"""
return getattr(self, name)
def manage_FTPlist(self):
"""
"""
import marshal
stat=marshal.loads(self.manage_FTPstat(REQUEST))
id = self.getId()
return marshal.dumps((id,stat))
def manage_FTPstat(self, REQUEST):
"psuedo stat, used by FTP for directory listings"
from AccessControl.User import nobody
from Acquisition import aq_base
from AccessControl import getSecurityManager
import time
import marshal
mode=0100000
# check read permissions
if (hasattr(aq_base(self),'manage_FTPget') and
hasattr(self.manage_FTPget, '__roles__')):
try:
if getSecurityManager().validateValue(self.manage_FTPget):
mode=mode | 0440
except: pass
if nobody.allowed(self.manage_FTPget,
self.manage_FTPget.__roles__):
mode=mode | 0004
# check write permissions
if hasattr(aq_base(self),'PUT') and hasattr(self.PUT, '__roles__'):
try:
if getSecurityManager().validateValue(self.PUT):
mode=mode | 0220
except: pass
if nobody.allowed(self.PUT, self.PUT.__roles__):
mode=mode | 0002
# get size
if hasattr(aq_base(self), 'get_size'):
size=self.get_size()
elif hasattr(aq_base(self),'manage_FTPget'):
size=len(self.manage_FTPget())
else:
size=0
# get modification time
if hasattr(aq_base(self), 'bobobase_modification_time'):
mtime=self.bobobase_modification_time().timeTime()
else:
mtime=time.time()
# get owner and group
owner=group='Zope'
if hasattr(aq_base(self), 'get_local_roles'):
for user, roles in self.get_local_roles():
if 'Owner' in roles:
owner=user
break
return marshal.dumps((mode,0,0,1,owner,group,size,mtime,mtime,mtime))
def manage_FTPget(self):
"""
"""
print 'cp4'
raise NotImplemented
def manage_delObjects(self, ids):
"""
"""
print 'cp5'
raise 'NotSupported'
def manage_addFolder(self, id):
"""
"""
print 'cp6'
raise 'NotSupported'
def manage_renameObject(self, id, new_id):
"""
"""
print 'cp7'
raise 'NotSupported'
def PUT(self, BODY):
"""
"""
print 'cp8'
raise NotImplemented
def get_size(self):
return len(self.manage_FTPget())
=== Added File Zope/lib/python/ZPublisher/WebDAV.py ===
import Interface
class WebDAVPublish (Interface.Base):
def _webdav_traverse(request, name):
"""
"""
def manage_FTPget():
"""
"""
def PUT():
"""
"""
class BaseLeafWebDAVPublish:
__implements__ = WebDAVPublish
def _webdav_traverse(self, request, name):
"""
This is called with the name of a method such as 'manage_FTPget'.
"""
return getattr(self, name)
def manage_FTPget(self):
"""
"""
print 'cp4'
raise NotImplemented
def PUT(self, BODY):
"""
"""
print 'cp8'
raise NotImplemented
=== Zope/lib/python/ZPublisher/BaseRequest.py 1.39.20.3 => 1.39.20.4 ===
return object, roles
- def _addDefaultView(self, object, path):
+ def _finalTraverse(self, object):
+ roles = UNSPECIFIED_ROLES
+ if (hasattr(object, '__call__') and
+ hasattr(object.__call__,'__roles__')):
+ roles=object.__call__.__roles__
+ return object, roles
+
+ def _addDefaultView(self, object, path, m_name='_browser_default'):
"""
returns (object, entry_name)
"""
psteps = None
- default = getattr(object, '__browser_default__', None)
+ default = getattr(object, m_name, None)
if default is not None:
o, add_steps = default(self)
if add_steps:
if len(add_steps) > 1:
path.extend(add_steps[1:])
return o, add_steps[0]
- default = self._request_method
- if default == 'GET' or default == 'POST':
+ m = self._request_method
+ if m == 'GET' or m == 'POST':
default = 'index_html'
+ else:
+ default = m
if default and getattr(object, default, None) is not None:
return object, default
return object, None
- def _traverseName(self, object, entry_name):
+ def _traverseName(self, object, entry_name, m_name="__bobo_traverse__"):
"""
Returns object, roles.
"""
@@ -307,8 +316,9 @@
else:
raise StopTraversal, self.response.forbiddenError(entry_name)
- if hasattr(object,'__bobo_traverse__'):
- subobject=object.__bobo_traverse__(self, entry_name)
+ traverse_method = getattr(object, m_name, None)
+ if traverse_method is not None:
+ subobject = traverse_method(self, entry_name)
if type(subobject) is type(()) and len(subobject) > 1:
# Add additional parents into the path
parents = self['PARENTS']
@@ -472,9 +482,9 @@
self._hacked_path = 1
if not entry_name:
# Finished traversal.
- if (hasattr(object, '__call__') and
- hasattr(object.__call__,'__roles__')):
- roles=object.__call__.__roles__
+ object, r = self._finalTraverse(object)
+ if r is not UNSPECIFIED_ROLES:
+ roles = r
if self._hacked_path:
URL = self['URL']
i=rfind(URL,'/')
=== Zope/lib/python/ZPublisher/Browser.py 1.1.2.1 => 1.1.2.2 ===
class BrowserPublish (Interface.Base):
- def __bobo_traverse__(self, request, name):
+ def _browser_traverse(request, name):
"""
"""
- def __browser_default__(self, request):
+ def _browser_default(request):
"""
"""
@@ -36,7 +36,7 @@
def __init__(self, content):
self._content = content
- def __bobo_traverse__(self, request, name):
+ def _browser_traverse(self, request, name):
if name[:3] == '(p)':
return ComponentArchitecture.getPresentation(
self._content, name[3:], BrowserPublish)
@@ -44,10 +44,10 @@
# Can't traverse beyond leaf content.
raise NotFound, name
- def __browser_default__(self, request):
+ def _browser_default(self, request):
p = ComponentArchitecture.getPresentation(
self._content, '', BrowserPublish)
- return p.__browser_default__(request)
+ return p._browser_default(request)
ComponentArchitecture.providePresentation(
=== Zope/lib/python/ZPublisher/HTTPRequest.py 1.55 => 1.55.4.1 ===
return name, password
+ def _traverseName(self, object, entry_name, m_name=None):
+ """
+ Returns object, roles.
+ """
+ if m_name is None:
+ if self.environ.get('WEBDAV_SOURCE_PORT', 0):
+ m_name = '_webdav_traverse'
+ else:
+ m_name = '_browser_traverse'
+ return BaseRequest._traverseName(self, object, entry_name, m_name)