[ZPT] CVS: Zope/lib/python/ZTUtils - Tree.py:1.6.6.5
Martijn Pieters
mj@zope.com
Fri, 4 Oct 2002 22:10:59 -0400
Update of /cvs-repository/Zope/lib/python/ZTUtils
In directory cvs.zope.org:/tmp/cvs-serv9221/lib/python/ZTUtils
Modified Files:
Tag: Zope-2_6-branch
Tree.py
Log Message:
Merge zlib compression for tree expansion maps from trunk.
=== Zope/lib/python/ZTUtils/Tree.py 1.6.6.4 => 1.6.6.5 ===
--- Zope/lib/python/ZTUtils/Tree.py:1.6.6.4 Fri Oct 4 12:51:24 2002
+++ Zope/lib/python/ZTUtils/Tree.py Fri Oct 4 22:10:58 2002
@@ -150,6 +150,7 @@
from binascii import b2a_base64, a2b_base64
from string import translate, maketrans
+import zlib
a2u_map = maketrans('+/=', '-._')
u2a_map = maketrans('-._', '+/=')
@@ -177,7 +178,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().
@@ -197,7 +198,10 @@
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.
@@ -206,6 +210,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 = []