I've cooked up a quick IDLE extension that connects to ZEO and shows a DB Browser, like the class/path browser. It's already great fun (quick lookups through a Tkinter tree control beat the heck out of HTML), and although my Tk is rusty, I think that Tk's HTML widget supports just enough HTML to display management screens (that's step 2). Now, before I go off and reinvent wheels, is this a new idea or not? Code says more than 1000 words: 1. Startup script (change zope and idle locations) -------------- #/bin/sh PYTHONHOME=/opt/zope/current export PYTHONHOME PYTHONPATH=/opt/python/idle-0.5 PYTHONPATH=$PYTHONPATH:$PYTHONHOME PYTHONPATH=$PYTHONPATH:$PYTHONHOME/lib/python PYTHONPATH=$PYTHONPATH:$PYTHONHOME/Extensions PYTHONPATH=$PYTHONPATH:$PYTHONHOME/ZServer/medusa PYTHONPATH=$PYTHONPATH:$PYTHONHOME/ZServer export PYTHONPATH /usr/bin/python zidle.py -------------- 2. Zidle script -------------- if __name__ == "__main__": from ZEO import ClientStorage from ZODB import DB from Zope import ClassFactory global App global Conn global Db storage = ClientStorage.ClientStorage(('', 8001)) Db = DB(storage) Db.setClassFactory(ClassFactory.ClassFactory) Conn = Db.open() App = Conn.root()['Application'] import PyShell, sys sys.argv = ['', '-t', 'ZIdle', '-c', 'from zidle import App, Conn'] PyShell.main() -------------- 3. Browser ------------- from TreeWidget import TreeNode, TreeItem, ScrolledCanvas from WindowList import ListedToplevel import PyShell class DbBrowser: def __init__(self, dbnode): self.dbnode = dbnode self.init() def close(self, event=None): self.top.destroy() def init(self): self.top = ListedToplevel(PyShell.flist.root) self.top.protocol("WM_DELETE_WINDOW", self.close) self.top.bind("<Escape>", self.close) self.settitle() self.top.focus_set() sc = ScrolledCanvas(self.top, bg="white", highlightthickness=0, takefocus=1) sc.frame.pack(expand=1, fill="both") item = self.rootnode() self.node = TreeNode(sc.canvas, None, item) self.node.update() self.node.expand() def settitle(self): self.top.wm_title("DB Browser") self.top.wm_iconname("DB Browser") def rootnode(self): return DbBrowserTreeItem(self.dbnode) class DbBrowserTreeItem(TreeItem): def __init__(self, dbnode): self.dbnode = dbnode def GetText(self): try: return self.dbnode.title_and_id() except: return `self.dbnode` def GetIconName(self): try: if self.dbnode.isPrincipiaFolderish: return "folder" else: return "python" except: return "python" def GetSubList(self): sublist = [] for i in self.dbnode.objectIds(): sublist.append(DbBrowserTreeItem(self.dbnode[i])) return sublist def IsExpandable(self): try: return self.dbnode.isPrincipiaFolderish \ and len(self.dbnode.objectMap()) > 0 except: return 0 def main(): from zidle import App DbBrowser(App) if __name__ == "__main__": main() ---- 4. README Hit "dbbrowser.DbBrowser(App)" in the IDLE console and have fun. -- Cees de Groot http://www.cdegroot.com <[EMAIL PROTECTED]> GnuPG 1024D/E0989E8B 0016 F679 F38D 5946 4ECD 1986 F303 937F E098 9E8B _______________________________________________ Zope-Dev maillist - [EMAIL PROTECTED] http://lists.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://lists.zope.org/mailman/listinfo/zope-announce http://lists.zope.org/mailman/listinfo/zope )