""" Just an helper module for testing HPI overlays In particular the behaviour of import_original_module function The idea of testing is that overlays extend this module, and add their own items to items(), and the checker asserts all overlays have contributed. """ from my.core import __NOT_HPI_MODULE__ from dataclasses import dataclass from datetime import datetime import sys from typing import Iterator, List NOW = datetime.now() @dataclass class Item: dt: datetime message: str path: List[str] def get_pkg_path() -> List[str]: pkg = sys.modules[__package__] return list(pkg.__path__) # NOTE: since we're hacking path for my.util # imports from my. should work as expected # (even though my.config is in the private config) from my.config import demo assert demo.username == 'todo' # however, this won't work while the module is imported # from my.util import extra # assert extra.message == 'EXTRA' # but it will work when we actually call the function (see below) def items() -> Iterator[Item]: from my.config import demo assert demo.username == 'todo' # here the import works as expected, since by the time the function is called, # all overlays were already processed and paths/sys.modules restored from my.util import extra # type: ignore[attr-defined] assert extra.message == 'EXTRA' yield Item(dt=NOW, message='hpi main', path=get_pkg_path())