diff --git a/my/__main__.py b/my/__main__.py index 4c6ac87..b465669 100644 --- a/my/__main__.py +++ b/my/__main__.py @@ -1,4 +1,5 @@ import os +from pathlib import Path import sys from subprocess import check_call, run, PIPE import traceback @@ -12,6 +13,31 @@ class Modes: CONFIG = 'config' +def run_mypy(pkg): + from my.core.init import get_mycfg_dir + mycfg_dir = get_mycfg_dir() + # todo ugh. not sure how to extract it from pkg? + + # todo dunno maybe use the same mypy config in repository? + # I'd need to install mypy.ini then?? + env = {**os.environ} + mpath = env.get('MYPYPATH') + mpath = str(mycfg_dir) + ('' if mpath is None else f':{mpath}') + env['MYPYPATH'] = mpath + + mres = run([ + 'python3', '-m', 'mypy', + '--namespace-packages', + '--color-output', # not sure if works?? + '--pretty', + '--show-error-codes', + '--show-error-context', + '--check-untyped-defs', + '-p', pkg.__name__, + ], stderr=PIPE, stdout=PIPE, env=env) + return mres + + def config_check(args): def eprint(x: str): print(x, file=sys.stderr) @@ -43,19 +69,7 @@ def config_check(args): except ImportError: warning("mypy not found, can't check config with it") else: - # todo dunno maybe use the same mypy config in repository? - # I'd need to install mypy.ini then?? - # todo how to bring it into mypypath? cooperate with core, maybe? - mres = run([ - 'python3', '-m', 'mypy', - '--namespace-packages', - '--color-output', # not sure if works?? - '--pretty', - '--show-error-codes', - '--show-error-context', - '--check-untyped-defs', - '-p', 'my.config' - ], stderr=PIPE, stdout=PIPE) + mres = run_mypy(cfg) rc = mres.returncode if rc == 0: info('mypy check: success') diff --git a/my/core/init.py b/my/core/init.py index dd21a0a..d2c7195 100644 --- a/my/core/init.py +++ b/my/core/init.py @@ -23,15 +23,11 @@ def assign_module(parent: str, name: str, module: ModuleType) -> None: del ModuleType -# separate function to present namespace pollution -def setup_config() -> None: - from pathlib import Path - import sys - import os - import warnings - from typing import Optional - import appdirs # type: ignore[import] +def get_mycfg_dir(): + import appdirs # type: ignore[import] + from pathlib import Path + import os # not sure if that's necessary, i.e. could rely on PYTHONPATH instead # on the other hand, by using MY_CONFIG we are guaranteed to load it from the desired path? mvar = os.environ.get('MY_CONFIG') @@ -39,6 +35,16 @@ def setup_config() -> None: mycfg_dir = Path(mvar) else: mycfg_dir = Path(appdirs.user_config_dir('my')) + return mycfg_dir + + +# separate function to present namespace pollution +def setup_config() -> None: + import sys + import warnings + from typing import Optional + + mycfg_dir = get_mycfg_dir() if not mycfg_dir.exists(): warnings.warn(f"""