[ZPT] CVS: Zope/lib/python/ZTUtils - Tree.py:1.4.14.3

Martijn Pieters mj@zope.com
Fri, 4 Oct 2002 22:10:44 -0400


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

Modified Files:
      Tag: Zope-2_5-branch
	Tree.py 
Log Message:
Merge zlib compression for tree expansion maps from trunk.


=== Zope/lib/python/ZTUtils/Tree.py 1.4.14.2 => 1.4.14.3 ===
--- Zope/lib/python/ZTUtils/Tree.py:1.4.14.2	Fri Oct  4 12:51:43 2002
+++ Zope/lib/python/ZTUtils/Tree.py	Fri Oct  4 22:10:44 2002
@@ -151,6 +151,7 @@
 from binascii import b2a_base64, a2b_base64
 import string
 from string import split, join, translate
+import zlib
 
 a2u_map = string.maketrans('+/=', '-._')
 u2a_map = string.maketrans('-._', '+/=')
@@ -178,7 +179,7 @@
         frags.append(a2b_base64(s[i:i + 76]))
     return join(frags, '')
 
-def encodeExpansion(nodes):
+def encodeExpansion(nodes, compress=1):
     '''Encode the expanded node ids of a tree into a string.
 
     Accepts a list of nodes, such as that produced by root.flat().
@@ -198,8 +199,11 @@
         steps.append(node.id)
         node.expansion_number = n
         n = n + 1
-    return join(steps, ':')
-        
+    result = ':'.join(steps)
+    if compress:
+        result = ':'  + b2a(zlib.compress(result, 9))
+    return result
+
 def decodeExpansion(s, nth=None):
     '''Decode an expanded node map from a string.
 
@@ -207,6 +211,9 @@
     '''
     if len(s) > 8192: # Set limit to 8K, to avoid DoS attacks.
         raise ValueError('Encoded node map too large')
+
+    if s[0] == ':': # Compressed state
+        s = zlib.decompress(a2b(s[1:]))
     
     map = m = {}
     mstack = []