[Zope] ZopeTree: another patch

Jean Jordaan jean@upfrontsystems.co.za
Fri, 28 Mar 2003 16:04:39 +0200


This is a multi-part message in MIME format.
--------------040308090509020909010506
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Hi Philipp and all

Herewith, another patch against ZopeTree-1-1. It corrects
a bug in the previous patch, and changes the functionality
to allow pre-expanded trees.

What the patch does:

   - TreeObjectWrapper.__init__: signature changed to
     (self, obj, path=None), making path optional and
     getting it from obj if not provided. (Breaks backward
     compatability.)

   - ZopeTree.__init__: expanded_nodes=[] added as keyword
     argument, so that the tree may be primed by passing in
     a list of expanded nodes. If request_variable is on
     request, the tree has been browsed, and request_variable
     overrides expanded_nodes.

     If ZopeTree is passed a TreeObjectWrapper instance,
     get path from it; otherwise get it using getPhysicalPath.

     Included path in the cookie which is set, to stop
     Mozilla from setting multiple cookies at different
     paths.

-- 
Jean Jordaan
http://www.upfrontsystems.co.za

--------------040308090509020909010506
Content-Type: text/plain;
 name="ZopeTree-cookie-path.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="ZopeTree-cookie-path.patch"

diff -u /usr/local/zope/Products/ZopeTree/TreeObjectWrapper.py ZopeTree/TreeObjectWrapper.py
--- /usr/local/zope/Products/ZopeTree/TreeObjectWrapper.py	Thu Mar 13 10:34:38 2003
+++ ZopeTree/TreeObjectWrapper.py	Fri Mar 28 10:46:22 2003
@@ -29,8 +29,11 @@
 
     __allow_access_to_unprotected_subobjects__ = 1
 
-    def __init__(self, path, obj):
-        self.path = path
+    def __init__(self, obj, path=None):
+        if path:
+            self.path = path 
+        else:
+            self.path = '/'.join(obj.getPhysicalPath());
         self.object = obj
         self.id = obj.getId()
         self.folderish = obj.isPrincipiaFolderish
@@ -44,7 +47,7 @@
         for id in objectIds:
             path = posix_path_join(self.path, id)
             obj = getattr(self.object, id)
-            children.append(TreeObjectWrapper(path, obj))
+            children.append(TreeObjectWrapper(obj, path))
         return children
 
     def getFolderishChildren(self):
diff -u /usr/local/zope/Products/ZopeTree/ZopeTree.py ZopeTree/ZopeTree.py
--- /usr/local/zope/Products/ZopeTree/ZopeTree.py	Thu Mar 27 09:27:54 2003
+++ ZopeTree/ZopeTree.py	Fri Mar 28 15:47:24 2003
@@ -100,15 +100,17 @@
 
     __allow_access_to_unprotected_subobjects__ = 1
 
-    def __init__(self, root_object, id_attr='getId', children_attr='objectValues',
-                 request=None, request_variable='tree-expansion'):
+    def __init__(self, root_object, id_attr='getId',
+                 children_attr='objectValues', request=None,
+                 request_variable='tree-expansion', expanded_nodes=[]):
         tree_expansion = request.get(request_variable, "")
+        path = getattr(root_object, 'path', None) 
+        if not path:
+            path = '/'.join(root_object.getPhysicalPath())
         if tree_expansion:
-            request.RESPONSE.setCookie(request_variable, tree_expansion) # set a cookie right away
+            request.RESPONSE.setCookie(request_variable, tree_expansion, path=path) # set a cookie right away
             expanded_nodes = self.decodeTreeExpansion(tree_expansion)
-        else:
-            expanded_nodes = []
-        
+
         Node.__init__(self, root_object, 0, id_attr, children_attr, expanded_nodes)
         self.expand()
 

--------------040308090509020909010506--