import importlib import pkgutil import os import click @click.command() @click.argument("package-name") def main(package_name: str) -> None: package = importlib.import_module(package_name) package_path = os.path.dirname(package.__file__) all_imports = [] module_imports = [] for module_info in pkgutil.iter_modules([package_path]): module = importlib.import_module(f"{package_name}.{module_info.name}") module_classes = [ clazz for clazz in dir(module) if clazz != "Handler" and ( clazz.endswith("Request") or clazz.endswith("Response") or clazz.endswith("Handler") ) ] all_imports.extend(module_classes) module_imports.append( f"from .{module_info.name} import {', '.join(module_classes)}\n" ) with open(package.__file__, "w") as fp: if module_imports: fp.writelines(sorted(module_imports)) if all_imports: fp.write("__all__ = [") for target in sorted(all_imports): fp.write(f'"{target}",\n') fp.write("]\n") if __name__ == "__main__": main()