summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/PathBrowser.py
diff options
context:
space:
mode:
authorDavid Scherer <dscherer@cmu.edu>2000-08-15 01:13:23 (GMT)
committerDavid Scherer <dscherer@cmu.edu>2000-08-15 01:13:23 (GMT)
commit7aced17437a6b05bc4b0b5ff93aa6a5d3a374d68 (patch)
treece0576a16111fd86ac5f56ff4ec1500f29c4f8db /Lib/idlelib/PathBrowser.py
parent33a6da9971a923ceaaee1406d0feaa64b8d1759a (diff)
downloadcpython-7aced17437a6b05bc4b0b5ff93aa6a5d3a374d68.zip
cpython-7aced17437a6b05bc4b0b5ff93aa6a5d3a374d68.tar.gz
cpython-7aced17437a6b05bc4b0b5ff93aa6a5d3a374d68.tar.bz2
Initial revision
Diffstat (limited to 'Lib/idlelib/PathBrowser.py')
-rw-r--r--Lib/idlelib/PathBrowser.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/Lib/idlelib/PathBrowser.py b/Lib/idlelib/PathBrowser.py
new file mode 100644
index 0000000..7ea2410
--- /dev/null
+++ b/Lib/idlelib/PathBrowser.py
@@ -0,0 +1,95 @@
+import os
+import sys
+import imp
+
+from TreeWidget import TreeItem
+from ClassBrowser import ClassBrowser, ModuleBrowserTreeItem
+
+class PathBrowser(ClassBrowser):
+
+ def __init__(self, flist):
+ self.init(flist)
+
+ def settitle(self):
+ self.top.wm_title("Path Browser")
+ self.top.wm_iconname("Path Browser")
+
+ def rootnode(self):
+ return PathBrowserTreeItem()
+
+class PathBrowserTreeItem(TreeItem):
+
+ def GetText(self):
+ return "sys.path"
+
+ def GetSubList(self):
+ sublist = []
+ for dir in sys.path:
+ item = DirBrowserTreeItem(dir)
+ sublist.append(item)
+ return sublist
+
+class DirBrowserTreeItem(TreeItem):
+
+ def __init__(self, dir, packages=[]):
+ self.dir = dir
+ self.packages = packages
+
+ def GetText(self):
+ if not self.packages:
+ return self.dir
+ else:
+ return self.packages[-1] + ": package"
+
+ def GetSubList(self):
+ try:
+ names = os.listdir(self.dir or os.curdir)
+ except os.error:
+ return []
+ packages = []
+ for name in names:
+ file = os.path.join(self.dir, name)
+ if self.ispackagedir(file):
+ nn = os.path.normcase(name)
+ packages.append((nn, name, file))
+ packages.sort()
+ sublist = []
+ for nn, name, file in packages:
+ item = DirBrowserTreeItem(file, self.packages + [name])
+ sublist.append(item)
+ for nn, name in self.listmodules(names):
+ item = ModuleBrowserTreeItem(os.path.join(self.dir, name))
+ sublist.append(item)
+ return sublist
+
+ def ispackagedir(self, file):
+ if not os.path.isdir(file):
+ return 0
+ init = os.path.join(file, "__init__.py")
+ return os.path.exists(init)
+
+ def listmodules(self, allnames):
+ modules = {}
+ suffixes = imp.get_suffixes()
+ sorted = []
+ for suff, mode, flag in suffixes:
+ i = -len(suff)
+ for name in allnames[:]:
+ normed_name = os.path.normcase(name)
+ if normed_name[i:] == suff:
+ mod_name = name[:i]
+ if not modules.has_key(mod_name):
+ modules[mod_name] = None
+ sorted.append((normed_name, name))
+ allnames.remove(name)
+ sorted.sort()
+ return sorted
+
+def main():
+ import PyShell
+ PathBrowser(PyShell.flist)
+ if sys.stdin is sys.__stdin__:
+ mainloop()
+
+if __name__ == "__main__":
+ main()