[Zope-Checkins] CVS: Zope/lib/python/OFS - ObjectManager.py:1.141.6.5 SimpleItemInterfaces.py:1.1.2.3

Shane Hathaway shane@digicool.com
Thu, 4 Oct 2001 16:53:34 -0400


Update of /cvs-repository/Zope/lib/python/OFS
In directory cvs.zope.org:/tmp/cvs-serv24031

Modified Files:
      Tag: ComponentArchitecture-branch
	ObjectManager.py SimpleItemInterfaces.py 
Log Message:
You can now traverse to CA objects in WebDAV and FTP


=== Zope/lib/python/OFS/ObjectManager.py 1.141.6.4 => 1.141.6.5 ===
 from zLOG import LOG, ERROR
 import sys,string,fnmatch,copy
+
 from App.ZopeComponents import listAddableTypes, AdderEntry, \
      convertMetaTypeList, Adder
 from ZPublisher.Browser import BrowserPublish
+from ZPublisher.FTP import FTPPublish
+from ZPublisher.WebDAV import WebDAVPublish
 import ComponentArchitecture
 from SimpleItemInterfaces import ObjectManagerInterface
 
@@ -676,11 +679,17 @@
             # Note that we have to tolerate failure here, because
             # Broken objects won't stat correctly. If an object fails
             # to be able to stat itself, we will ignore it.
-            try:    stat=marshal.loads(v.manage_FTPstat(REQUEST))
-            except: stat=None
+            if not FTPPublish.isImplementedBy(v):
+                v = ComponentArchitecture.getPresentation(
+                    v, '_publish', FTPPublish, v)
+            m = getattr(v, 'manage_FTPstat', None)
+            if m is not None:
+                stat=marshal.loads(m(REQUEST))
+            else:
+                stat=None
             if stat is not None:
                 out=out+((k,stat),)
-        return marshal.dumps(out)   
+        return marshal.dumps(out)
 
     def manage_FTPstat(self,REQUEST):
         "Psuedo stat used for FTP listings"
@@ -717,7 +726,7 @@
                 return NullResource(self, key, request).__of__(self)
         raise KeyError, key
 
-    def __bobo_traverse__(self, request, name=None):
+    def _browser_traverse(self, request, name=None):
         if name and name[:3] == '(p)':
             return ComponentArchitecture.getPresentation(
                 self, name[3:], BrowserPublish)
@@ -733,18 +742,41 @@
                     # Waaa. unrestrictedTraverse calls us with a fake REQUEST.
                     # There is proabably a better fix for this.
                     raise KeyError, name
-        if not BrowserPublish.isImplementedBy(subob):
-            subob = ComponentArchitecture.getPresentation(
-                subob, '_publish', BrowserPublish, subob) # Lame: use a default
+        subob = ComponentArchitecture.getPresentation(
+            subob, '_publish', BrowserPublish, subob)
         return subob
 
-    def __browser_default__(self, request):
+    def _browser_default(self, request):
         p = ComponentArchitecture.getPresentation(
             self, '_publish', BrowserPublish, None)
         if p is None:
             return (self, ())
         else:
-            return p.__browser_default__(request)
+            return p._browser_default(request)
+
+    def _ftp_traverse(self, request, name):
+        subob = self._getOb(name, None)
+        if subob is not None:
+            subob = ComponentArchitecture.getPresentation(
+                subob, '_publish', FTPPublish, subob)
+            return subob
+        p = ComponentArchitecture.getPresentation(
+            self, '_publish', FTPPublish, None)
+        if p is not None:
+            return p._ftp_traverse(request, name)
+        return getattr(self, name)
+
+    def _webdav_traverse(self, request, name):
+        subob = self._getOb(name, None)
+        if subob is not None:
+            subob = ComponentArchitecture.getPresentation(
+                subob, '_publish', WebDAVPublish, subob)
+            return subob
+        p = ComponentArchitecture.getPresentation(
+            self, '_publish', WebDAVPublish, None)
+        if p is not None:
+            return p._webdav_traverse(request, name)
+        return getattr(self, name)
 
 
 class ObjectManagerAdder (Acquisition.Implicit):


=== Zope/lib/python/OFS/SimpleItemInterfaces.py 1.1.2.2 => 1.1.2.3 ===
 import Interface
 from ComponentArchitecture.Content import Content
+from ZPublisher.FTP import FTPPublish
+from ZPublisher.Browser import BrowserPublish
 
 
 class SimpleItemInterface (Content):
@@ -8,7 +10,10 @@
     """
 
 
-class ObjectManagerInterface (SimpleItemInterface):
+class ObjectManagerInterface (SimpleItemInterface,
+                              FTPPublish,
+                              BrowserPublish,
+                              ):
     """
     """