Commits

Ali Gholami Rudi  committed 0902afc

stdmods: add standard_modules() for finding standard modules

  • Participants
  • Parent commits b8e5f9f

Comments (0)

Files changed (1)

File rope/base/stdmods.py

+import os
+import sys
+
+from rope.base import utils
+
+
+def _stdlib_path():
+    import inspect
+    return os.path.dirname(inspect.getsourcefile(inspect))
+
+@utils.cached(1)
+def standard_modules():
+    return python_modules() | dynload_modules()
+
+@utils.cached(1)
+def python_modules():
+    result = set()
+    lib_path = _stdlib_path()
+    if os.path.exists(lib_path):
+        for name in os.listdir(lib_path):
+            path = os.path.join(lib_path, name)
+            if os.path.isdir(path):
+                if '-' not in name:
+                    result.add(name)
+            else:
+                if name.endswith('.py'):
+                    result.add(name[:-3])
+    return result
+
+@utils.cached(1)
+def dynload_modules():
+    result = set(sys.builtin_module_names)
+    dynload_path = os.path.join(_stdlib_path(), 'lib-dynload')
+    if os.path.exists(dynload_path):
+        for name in os.listdir(dynload_path):
+            path = os.path.join(dynload_path, name)
+            if os.path.isfile(path):
+                if name.endswith('.so') or name.endswith('.dll'):
+                    result.add(os.path.splitext(name)[0])
+    return result