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.
participants (1)
-
Oleg Broytmann