PageRenderTime 40ms CodeModel.GetById 14ms app.highlight 19ms RepoModel.GetById 1ms app.codeStats 1ms

/Lib/idlelib/PathBrowser.py

http://unladen-swallow.googlecode.com/
Python | 95 lines | 79 code | 16 blank | 0 comment | 23 complexity | 255d4d6243d1fbd2ec2e6a8bf7e20e56 MD5 | raw file
 1import os
 2import sys
 3import imp
 4
 5from TreeWidget import TreeItem
 6from ClassBrowser import ClassBrowser, ModuleBrowserTreeItem
 7
 8class PathBrowser(ClassBrowser):
 9
10    def __init__(self, flist):
11        self.init(flist)
12
13    def settitle(self):
14        self.top.wm_title("Path Browser")
15        self.top.wm_iconname("Path Browser")
16
17    def rootnode(self):
18        return PathBrowserTreeItem()
19
20class PathBrowserTreeItem(TreeItem):
21
22    def GetText(self):
23        return "sys.path"
24
25    def GetSubList(self):
26        sublist = []
27        for dir in sys.path:
28            item = DirBrowserTreeItem(dir)
29            sublist.append(item)
30        return sublist
31
32class DirBrowserTreeItem(TreeItem):
33
34    def __init__(self, dir, packages=[]):
35        self.dir = dir
36        self.packages = packages
37
38    def GetText(self):
39        if not self.packages:
40            return self.dir
41        else:
42            return self.packages[-1] + ": package"
43
44    def GetSubList(self):
45        try:
46            names = os.listdir(self.dir or os.curdir)
47        except os.error:
48            return []
49        packages = []
50        for name in names:
51            file = os.path.join(self.dir, name)
52            if self.ispackagedir(file):
53                nn = os.path.normcase(name)
54                packages.append((nn, name, file))
55        packages.sort()
56        sublist = []
57        for nn, name, file in packages:
58            item = DirBrowserTreeItem(file, self.packages + [name])
59            sublist.append(item)
60        for nn, name in self.listmodules(names):
61            item = ModuleBrowserTreeItem(os.path.join(self.dir, name))
62            sublist.append(item)
63        return sublist
64
65    def ispackagedir(self, file):
66        if not os.path.isdir(file):
67            return 0
68        init = os.path.join(file, "__init__.py")
69        return os.path.exists(init)
70
71    def listmodules(self, allnames):
72        modules = {}
73        suffixes = imp.get_suffixes()
74        sorted = []
75        for suff, mode, flag in suffixes:
76            i = -len(suff)
77            for name in allnames[:]:
78                normed_name = os.path.normcase(name)
79                if normed_name[i:] == suff:
80                    mod_name = name[:i]
81                    if not modules.has_key(mod_name):
82                        modules[mod_name] = None
83                        sorted.append((normed_name, name))
84                        allnames.remove(name)
85        sorted.sort()
86        return sorted
87
88def main():
89    import PyShell
90    PathBrowser(PyShell.flist)
91    if sys.stdin is sys.__stdin__:
92        mainloop()
93
94if __name__ == "__main__":
95    main()