[Zope] objectTree
Oleg Broytmann
phd2@email.com
Mon, 8 Nov 1999 20:19:27 +0300 (MSK)
Hi!
While hacking load_site.py for my needs I transformed it to a program to
traverse object tree. Here is the version that just prints the tree on
the screen:
----------
import sys, getopt, os, string
defIndent = 3 # I love 3 spaces indents
def main():
user, password = 'superuser', '123'
opts, args = getopt.getopt(sys.argv[1:], 'p:u:i:')
for o, v in opts:
if o == '-p':
d, f = os.path.split(v)
if f == 'ZPublisher': sys.path.insert(0, d)
else: sys.path.insert(0, v)
elif o == '-u':
v = string.split(v, ':')
user, password = v[0], string.join(v[1:], ':')
elif o == '-i':
global defIndent
defIndent = string.atoi(v)
if not args:
print "Usage: %s [-p pathToZPublisher] [-u user:passwd] [-i indent] url" % sys.argv[0]
sys.exit(1)
url=args[0]
import ZPublisher.Client
global ServerError
ServerError=ZPublisher.Client.ServerError
object=ZPublisher.Client.Object(url, username=user, password=password)
print url
showTree(object, 0)
def call(f, *args, **kw):
# Call a function ignoring redirect bci errors.
try:
return apply(f, args, kw)
except ServerError, v:
if str(v)[:1] != '3':
raise sys.exc_info()[0], sys.exc_info()[1], sys.exc_info()[2]
def showTree(object, indent):
try:
for id in eval(call(object.objectIds)[1]):
_showTree(object, id, indent+defIndent)
except:
return
def _showTree(object, id, indent):
print "%s%s" % (' ' * indent, id)
object = object.__class__(object.url+'/'+id,
username=object.username,
password=object.password)
showTree(object, indent)
if __name__=='__main__':
main()
----------
Oleg.
----
Oleg Broytmann National Research Surgery Centre phd2@email.com
Programmers don't die, they just GOSUB without RETURN.