From 6d48fc25343601c21c8c3b13241ba417b0a2104e Mon Sep 17 00:00:00 2001 From: carefree0910 Date: Tue, 26 Dec 2023 00:15:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E4=BA=86=20`import=5Fmodules?= =?UTF-8?q?`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cftool/misc.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/cftool/misc.py b/cftool/misc.py index a1b6593..4abf87a 100644 --- a/cftool/misc.py +++ b/cftool/misc.py @@ -14,6 +14,7 @@ import hashlib import zipfile import operator +import importlib import threading import unicodedata @@ -37,6 +38,7 @@ from typing import Protocol from typing import Coroutine from typing import NamedTuple +from pathlib import Path from argparse import Namespace from datetime import datetime from datetime import timedelta @@ -495,6 +497,21 @@ def get_err_msg(err: Exception) -> str: return " | ".join(map(repr, sys.exc_info()[:2] + (str(err),))) +def import_modules(path: Union[str, Path], prefix: str) -> None: + if isinstance(path, str): + path = Path(path) + _globals = inspect.stack()[1][0].f_globals + for path in path.parent.glob("*.py"): + if path.stem == "__init__": + continue + module = importlib.import_module(f"{prefix}.{path.stem}") + if "__all__" in module.__dict__: + names = module.__dict__["__all__"] + else: + names = [x for x in module.__dict__ if not x.startswith("_")] + _globals.update({k: getattr(module, k) for k in names}) + + async def retry( fn: Callable[[], Coroutine[None, None, TRetryResponse]], num_retry: Optional[int] = None,