python-2.5.2/win32/Lib/idlelib/PathBrowser.py
changeset 0 ae805ac0140d
equal deleted inserted replaced
-1:000000000000 0:ae805ac0140d
       
     1 import os
       
     2 import sys
       
     3 import imp
       
     4 
       
     5 from TreeWidget import TreeItem
       
     6 from ClassBrowser import ClassBrowser, ModuleBrowserTreeItem
       
     7 
       
     8 class 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 
       
    20 class 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 
       
    32 class 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 
       
    88 def main():
       
    89     import PyShell
       
    90     PathBrowser(PyShell.flist)
       
    91     if sys.stdin is sys.__stdin__:
       
    92         mainloop()
       
    93 
       
    94 if __name__ == "__main__":
       
    95     main()