tests: thinking about external repositories
This commit is contained in:
parent
41c5b34006
commit
44aa062756
2 changed files with 30 additions and 2 deletions
23
my/demo.py
23
my/demo.py
|
@ -2,23 +2,42 @@
|
||||||
Just a demo module for testing and documentation purposes
|
Just a demo module for testing and documentation purposes
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from .core import Paths
|
from .core import Paths, PathIsh
|
||||||
|
|
||||||
|
from typing import Optional
|
||||||
from datetime import tzinfo
|
from datetime import tzinfo
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from my.config import demo as user_config
|
from my.config import demo as user_config
|
||||||
from dataclasses import dataclass
|
from dataclasses import dataclass
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class demo(user_config):
|
class demo(user_config):
|
||||||
data_path: Paths
|
data_path: Paths
|
||||||
username: str
|
username: str
|
||||||
timezone: tzinfo = pytz.utc
|
timezone: tzinfo = pytz.utc
|
||||||
|
|
||||||
|
external: Optional[PathIsh] = None
|
||||||
|
|
||||||
|
@property
|
||||||
|
def external_module(self):
|
||||||
|
rpath = self.external
|
||||||
|
if rpath is not None:
|
||||||
|
from .cfg import set_repo
|
||||||
|
set_repo('external', rpath)
|
||||||
|
|
||||||
|
import my.config.repos.external as m # type: ignore
|
||||||
|
return m
|
||||||
|
|
||||||
|
|
||||||
from .core import make_config
|
from .core import make_config
|
||||||
config = make_config(demo)
|
config = make_config(demo)
|
||||||
|
|
||||||
|
# TODO not sure about type checking?
|
||||||
|
external = config.external_module
|
||||||
|
|
||||||
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Sequence, Iterable
|
from typing import Sequence, Iterable
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
@ -46,6 +65,6 @@ def items() -> Iterable[Item]:
|
||||||
for raw in j:
|
for raw in j:
|
||||||
yield Item(
|
yield Item(
|
||||||
username=config.username,
|
username=config.username,
|
||||||
raw=raw,
|
raw=external.identity(raw),
|
||||||
dt=dt,
|
dt=dt,
|
||||||
)
|
)
|
||||||
|
|
|
@ -11,6 +11,7 @@ def test_dynamic_config_1(tmp_path: Path) -> None:
|
||||||
class user_config:
|
class user_config:
|
||||||
username = 'user'
|
username = 'user'
|
||||||
data_path = f'{tmp_path}/*.json'
|
data_path = f'{tmp_path}/*.json'
|
||||||
|
external = f'{tmp_path}/external'
|
||||||
my.config.demo = user_config # type: ignore[misc, assignment]
|
my.config.demo = user_config # type: ignore[misc, assignment]
|
||||||
|
|
||||||
from my.demo import items
|
from my.demo import items
|
||||||
|
@ -29,6 +30,7 @@ def test_dynamic_config_2(tmp_path: Path) -> None:
|
||||||
class user_config:
|
class user_config:
|
||||||
username = 'user2'
|
username = 'user2'
|
||||||
data_path = f'{tmp_path}/*.json'
|
data_path = f'{tmp_path}/*.json'
|
||||||
|
external = f'{tmp_path}/external'
|
||||||
my.config.demo = user_config # type: ignore[misc, assignment]
|
my.config.demo = user_config # type: ignore[misc, assignment]
|
||||||
|
|
||||||
from my.demo import items
|
from my.demo import items
|
||||||
|
@ -75,6 +77,7 @@ def test_attribute_handling(tmp_path: Path) -> None:
|
||||||
|
|
||||||
username = 'UUU'
|
username = 'UUU'
|
||||||
data_path = f'{tmp_path}/*.json'
|
data_path = f'{tmp_path}/*.json'
|
||||||
|
external = f'{tmp_path}/external'
|
||||||
|
|
||||||
|
|
||||||
my.config.demo = user_config # type: ignore[misc, assignment]
|
my.config.demo = user_config # type: ignore[misc, assignment]
|
||||||
|
@ -99,4 +102,10 @@ def prepare(tmp_path: Path):
|
||||||
{"key2": 2}
|
{"key2": 2}
|
||||||
]
|
]
|
||||||
''')
|
''')
|
||||||
|
ext = tmp_path / 'external'
|
||||||
|
ext.mkdir()
|
||||||
|
(ext / '__init__.py').write_text('identity = lambda x: x')
|
||||||
yield
|
yield
|
||||||
|
ex = 'my.config.repos.external'
|
||||||
|
if ex in sys.modules:
|
||||||
|
del sys.modules[ex]
|
||||||
|
|
Loading…
Add table
Reference in a new issue