mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			95 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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 mod_name not in modules:
 | |
|                         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()
 | 
