| 
									
										
										
										
											2016-08-31 00:50:55 -04:00
										 |  |  | import importlib.machinery | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | import os | 
					
						
							|  |  |  | import sys | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-23 16:46:01 -04:00
										 |  |  | from idlelib.browser import ModuleBrowser, ModuleBrowserTreeItem | 
					
						
							| 
									
										
										
										
											2016-08-31 00:50:55 -04:00
										 |  |  | from idlelib.tree import TreeItem | 
					
						
							| 
									
										
										
										
											2014-05-24 18:48:18 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-23 16:46:01 -04:00
										 |  |  | class PathBrowser(ModuleBrowser): | 
					
						
							| 
									
										
										
										
											2001-07-13 19:57:00 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-22 19:05:25 -05:00
										 |  |  |     def __init__(self, master, *, _htest=False, _utest=False): | 
					
						
							| 
									
										
										
										
											2014-05-24 18:48:18 -04:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         _htest - bool, change box location when running htest | 
					
						
							|  |  |  |         """
 | 
					
						
							| 
									
										
										
										
											2017-11-22 19:05:25 -05:00
										 |  |  |         self.master = master | 
					
						
							| 
									
										
										
										
											2014-05-24 18:48:18 -04:00
										 |  |  |         self._htest = _htest | 
					
						
							| 
									
										
										
										
											2017-09-22 16:08:44 -04:00
										 |  |  |         self._utest = _utest | 
					
						
							| 
									
										
										
										
											2017-11-22 19:05:25 -05:00
										 |  |  |         self.init() | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def settitle(self): | 
					
						
							| 
									
										
										
										
											2015-07-20 17:44:59 -04:00
										 |  |  |         "Set window titles." | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |         self.top.wm_title("Path Browser") | 
					
						
							|  |  |  |         self.top.wm_iconname("Path Browser") | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def rootnode(self): | 
					
						
							|  |  |  |         return PathBrowserTreeItem() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-31 00:50:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | 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 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-31 00:50:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | 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) | 
					
						
							| 
									
										
										
										
											2012-12-17 19:51:15 +02:00
										 |  |  |         except OSError: | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |             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): | 
					
						
							| 
									
										
										
										
											2015-07-20 17:44:59 -04:00
										 |  |  |         " Return true for directories that are packages." | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |         if not os.path.isdir(file): | 
					
						
							| 
									
										
										
										
											2015-07-20 17:44:59 -04:00
										 |  |  |             return False | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |         init = os.path.join(file, "__init__.py") | 
					
						
							|  |  |  |         return os.path.exists(init) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def listmodules(self, allnames): | 
					
						
							|  |  |  |         modules = {} | 
					
						
							| 
									
										
										
										
											2012-05-11 12:58:42 -04:00
										 |  |  |         suffixes = importlib.machinery.EXTENSION_SUFFIXES[:] | 
					
						
							| 
									
										
										
										
											2015-07-20 17:44:59 -04:00
										 |  |  |         suffixes += importlib.machinery.SOURCE_SUFFIXES | 
					
						
							|  |  |  |         suffixes += importlib.machinery.BYTECODE_SUFFIXES | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |         sorted = [] | 
					
						
							| 
									
										
										
										
											2012-10-18 18:16:44 -07:00
										 |  |  |         for suff in suffixes: | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |             i = -len(suff) | 
					
						
							|  |  |  |             for name in allnames[:]: | 
					
						
							|  |  |  |                 normed_name = os.path.normcase(name) | 
					
						
							|  |  |  |                 if normed_name[i:] == suff: | 
					
						
							|  |  |  |                     mod_name = name[:i] | 
					
						
							| 
									
										
										
										
											2006-08-22 15:45:46 +00:00
										 |  |  |                     if mod_name not in modules: | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  |                         modules[mod_name] = None | 
					
						
							|  |  |  |                         sorted.append((normed_name, name)) | 
					
						
							|  |  |  |                         allnames.remove(name) | 
					
						
							|  |  |  |         sorted.sort() | 
					
						
							|  |  |  |         return sorted | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-31 00:50:55 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2000-08-15 01:13:23 +00:00
										 |  |  | if __name__ == "__main__": | 
					
						
							| 
									
										
										
										
											2013-05-27 21:32:03 -04:00
										 |  |  |     from unittest import main | 
					
						
							|  |  |  |     main('idlelib.idle_test.test_pathbrowser', verbosity=2, exit=False) | 
					
						
							| 
									
										
										
										
											2014-05-24 18:48:18 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     from idlelib.idle_test.htest import run | 
					
						
							| 
									
										
										
										
											2023-12-03 04:28:37 -05:00
										 |  |  |     run(PathBrowser) |