[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)