core.common: move away import related stuff to my.core.utils.imports

moving without backward compatibility, since it's extremely unlikely they are used for any external modules

in fact, unclear if these methods still have much value at all, but keeping for now just in case
This commit is contained in:
Dima Gerasimov 2024-08-14 11:28:50 +03:00 committed by karlicoss
parent 66c08a6c80
commit 770dba5506
7 changed files with 44 additions and 43 deletions

View file

@ -34,37 +34,6 @@ from .compat import deprecated
# some helper functions
PathIsh = Union[Path, str]
# TODO only used in tests? not sure if useful at all.
def import_file(p: PathIsh, name: Optional[str] = None) -> types.ModuleType:
p = Path(p)
if name is None:
name = p.stem
import importlib.util
spec = importlib.util.spec_from_file_location(name, p)
assert spec is not None, f"Fatal error; Could not create module spec from {name} {p}"
foo = importlib.util.module_from_spec(spec)
loader = spec.loader; assert loader is not None
loader.exec_module(foo)
return foo
def import_from(path: PathIsh, name: str) -> types.ModuleType:
path = str(path)
try:
sys.path.append(path)
import importlib
return importlib.import_module(name)
finally:
sys.path.remove(path)
def import_dir(path: PathIsh, extra: str='') -> types.ModuleType:
p = Path(path)
if p.parts[0] == '~':
p = p.expanduser() # TODO eh. not sure about this..
return import_from(p.parent, p.name + extra)
from .logging import setup_logger, LazyLogger

View file

@ -131,12 +131,6 @@ else:
if sys.version_info[:2] >= (3, 11):
from typing import assert_never
from typing import assert_never, assert_type, Never
else:
from typing_extensions import assert_never
if sys.version_info[:2] >= (3, 11):
from typing import Never
else:
from typing_extensions import Never
from typing_extensions import assert_never, assert_type, Never

View file

@ -101,7 +101,7 @@ Please install {' '.join(requires)} as PIP packages (see the corresponding READM
def _get_dal(cfg, module_name: str):
mpath = getattr(cfg, module_name, None)
if mpath is not None:
from .common import import_dir
from .utils.imports import import_dir
return import_dir(mpath, '.dal')
else:

37
my/core/utils/imports.py Normal file
View file

@ -0,0 +1,37 @@
import importlib
import importlib.util
from pathlib import Path
import sys
from typing import Optional
from types import ModuleType
from ..common import PathIsh
# TODO only used in tests? not sure if useful at all.
def import_file(p: PathIsh, name: Optional[str] = None) -> ModuleType:
p = Path(p)
if name is None:
name = p.stem
spec = importlib.util.spec_from_file_location(name, p)
assert spec is not None, f"Fatal error; Could not create module spec from {name} {p}"
foo = importlib.util.module_from_spec(spec)
loader = spec.loader; assert loader is not None
loader.exec_module(foo)
return foo
def import_from(path: PathIsh, name: str) -> ModuleType:
path = str(path)
sys.path.append(path)
try:
return importlib.import_module(name)
finally:
sys.path.remove(path)
def import_dir(path: PathIsh, extra: str = '') -> ModuleType:
p = Path(path)
if p.parts[0] == '~':
p = p.expanduser() # TODO eh. not sure about this..
return import_from(p.parent, p.name + extra)

View file

@ -105,12 +105,13 @@ else:
def test_listify() -> None:
from ..compat import assert_type
@listify
def it() -> Iterator[int]:
yield 1
yield 2
res = it()
from typing_extensions import assert_type # TODO move to compat?
assert_type(res, List[int])
assert res == [1, 2]

View file

@ -23,7 +23,7 @@ class demo(user_config):
def external_module(self):
rpath = self.external
if rpath is not None:
from .core.common import import_dir
from .core.utils.imports import import_dir
return import_dir(rpath)
import my.config.repos.external as m # type: ignore

View file

@ -15,7 +15,7 @@ def test_hpi(prepare: str) -> None:
assert len(list(get_entries())) > 1
def test_orger(prepare: str, tmp_path: Path) -> None:
from my.core.common import import_from, import_file
from my.core.utils.imports import import_from, import_file
om = import_file(ROOT / 'orger/modules/polar.py')
# reload(om)