summaryrefslogtreecommitdiff
path: root/Lib/idlelib/pathbrowser.py
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@microsoft.com>2017-02-06 14:12:19 -0800
committerSteve Dower <steve.dower@microsoft.com>2017-02-06 14:12:19 -0800
commit5b4df5813c20fe96f117d0201965b52e86a1a66d (patch)
treed991f61bc824ca1b1b92bf7fb16fe3dacd4b1335 /Lib/idlelib/pathbrowser.py
parent3e0bdff8a0793d305b972f4a653e4698d440b3ae (diff)
parent95b272b4e0d5438a12702e51e05d03f5a5a8e505 (diff)
downloadcpython-5b4df5813c20fe96f117d0201965b52e86a1a66d.tar.gz
Includes ensurepip and venv packages in nuget package.
Diffstat (limited to 'Lib/idlelib/pathbrowser.py')
-rw-r--r--Lib/idlelib/pathbrowser.py111
1 files changed, 111 insertions, 0 deletions
diff --git a/Lib/idlelib/pathbrowser.py b/Lib/idlelib/pathbrowser.py
new file mode 100644
index 0000000000..6c19508d31
--- /dev/null
+++ b/Lib/idlelib/pathbrowser.py
@@ -0,0 +1,111 @@
+import importlib.machinery
+import os
+import sys
+
+from idlelib.browser import ClassBrowser, ModuleBrowserTreeItem
+from idlelib.pyshell import PyShellFileList
+from idlelib.tree import TreeItem
+
+
+class PathBrowser(ClassBrowser):
+
+ def __init__(self, flist, _htest=False):
+ """
+ _htest - bool, change box location when running htest
+ """
+ self._htest = _htest
+ self.init(flist)
+
+ def settitle(self):
+ "Set window titles."
+ 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 OSError:
+ 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):
+ " Return true for directories that are packages."
+ if not os.path.isdir(file):
+ return False
+ init = os.path.join(file, "__init__.py")
+ return os.path.exists(init)
+
+ def listmodules(self, allnames):
+ modules = {}
+ suffixes = importlib.machinery.EXTENSION_SUFFIXES[:]
+ suffixes += importlib.machinery.SOURCE_SUFFIXES
+ suffixes += importlib.machinery.BYTECODE_SUFFIXES
+ sorted = []
+ for suff 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 _path_browser(parent): # htest #
+ flist = PyShellFileList(parent)
+ PathBrowser(flist, _htest=True)
+ parent.mainloop()
+
+if __name__ == "__main__":
+ from unittest import main
+ main('idlelib.idle_test.test_pathbrowser', verbosity=2, exit=False)
+
+ from idlelib.idle_test.htest import run
+ run(_path_browser)