cli: detect config properly in mypy check

This commit is contained in:
Dima Gerasimov 2020-05-25 10:04:58 +01:00
parent 2ede5b3a5c
commit dab29a44b5
2 changed files with 41 additions and 21 deletions

View file

@ -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')

View file

@ -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"""