""" Module for listing available Python modules and objects. """ import pydoc import inspect import sys from typing import List, Dict, Any class ModuleList: """ Provides lists of available Python modules and objects for documentation. """ @staticmethod def get_standard_modules() -> List[Dict[str, Any]]: """ Get list of standard library modules. Returns: List of dictionaries with module information """ modules = [] stdlib_paths = [p for p in sys.path if 'site-packages' not in p] # Common standard library modules common_modules = [ 'os', 'sys', 'json', 'datetime', 'collections', 'itertools', 'functools', 'operator', 'string', 're', 'math', 'random', 'statistics', 'decimal', 'fractions', 'array', 'bisect', 'heapq', 'copy', 'pickle', 'sqlite3', 'hashlib', 'hmac', 'secrets', 'uuid', 'pathlib', 'shutil', 'glob', 'fnmatch', 'linecache', 'tempfile', 'fileinput', 'csv', 'configparser', 'netrc', 'xdrlib', 'plistlib', 'codecs', 'unicodedata', 'stringprep', 'readline', 'rlcompleter', 'struct', 'codecs', 'types', 'copyreg', 'pprint', 'reprlib', 'enum', 'numbers', 'collections.abc', 'io', 'argparse', 'getopt', 'logging', 'getpass', 'curses', 'platform', 'errno', 'ctypes', 'threading', 'multiprocessing', 'concurrent', 'subprocess', 'sched', 'queue', 'select', 'selectors', 'asyncio', 'socket', 'ssl', 'email', 'html', 'http', 'urllib', 'xml', 'webbrowser', 'cgi', 'cgitb', 'wsgiref', 'urllib', 'xmlrpc', 'ipaddress', 'audioop', 'aifc', 'sunau', 'wave', 'chunk', 'colorsys', 'imghdr', 'sndhdr', 'ossaudiodev', 'gettext', 'locale', 'calendar', 'cmd', 'shlex', 'tkinter', 'turtle', 'pydoc', 'doctest', 'unittest', 'test', 'lib2to3', 'typing', 'dataclasses', 'contextlib', 'abc', 'atexit', 'traceback', 'future', 'gc', 'inspect', 'site', 'fpectl', 'distutils', 'ensurepip', 'venv', 'zipapp', 'faulthandler', 'pdb', 'profile', 'pstats', 'timeit', 'trace', 'tracemalloc', 'warnings', 'contextvars', 'dataclasses', 'weakref', 'types', 'copy', 'pprint', 'reprlib', 'enum', 'numbers', 'collections.abc' ] for mod_name in common_modules: try: if mod_name in sys.modules: mod = sys.modules[mod_name] else: mod = __import__(mod_name) if inspect.ismodule(mod): modules.append({ 'name': mod_name, 'type': 'module', 'doc': inspect.getdoc(mod) or '' }) except (ImportError, AttributeError): continue return sorted(modules, key=lambda x: x['name']) @staticmethod def get_builtin_objects() -> List[Dict[str, Any]]: """ Get list of builtin objects (types, functions, etc.). Returns: List of dictionaries with builtin object information """ objects = [] builtins_module = __import__('builtins') for name in dir(builtins_module): if not name.startswith('_'): try: obj = getattr(builtins_module, name) obj_type = 'function' if inspect.isbuiltin(obj) or inspect.isfunction(obj) else 'type' objects.append({ 'name': name, 'type': obj_type, 'full_name': f'builtins.{name}', 'doc': '' }) except Exception: continue return sorted(objects, key=lambda x: x['name']) @staticmethod def get_module_contents(module_name: str) -> List[Dict[str, Any]]: """ Get list of objects in a module. Args: module_name: Name of the module Returns: List of dictionaries with object information """ objects = [] try: if module_name in sys.modules: mod = sys.modules[module_name] else: mod = __import__(module_name) if not inspect.ismodule(mod): return objects for name in dir(mod): if name.startswith('_'): continue try: obj = getattr(mod, name) obj_type = 'unknown' if inspect.ismodule(obj): obj_type = 'module' elif inspect.isclass(obj): obj_type = 'class' elif inspect.isfunction(obj) or inspect.ismethod(obj): obj_type = 'function' elif inspect.isbuiltin(obj): obj_type = 'function' else: obj_type = 'object' full_name = f"{module_name}.{name}" objects.append({ 'name': name, 'type': obj_type, 'full_name': full_name, 'doc': '' }) except Exception: continue except Exception as e: print(f"Error getting module contents for {module_name}: {e}") return sorted(objects, key=lambda x: x['name'])