Files
eco/tests/test_config_lazy_init.py
2026-05-26 21:27:48 +02:00

59 lines
1.7 KiB
Python

import pytest
from eco.utilities.config import Component, Namespace
class BadThing:
def __init__(self, value, name=None):
raise ValueError("boom")
class DependencyThing:
def __init__(self, name=None):
self.name = name
class NeedsDependency:
def __init__(self, dependency, name=None):
self.dependency = dependency
def test_lazy_init_failure_includes_manual_instantiation_string():
ns = Namespace(name="test")
ns.append_obj(BadThing, 1, lazy=True, name="bad")
with pytest.raises(ValueError) as exc_info:
ns.init_name("bad", raise_errors=True)
assert exc_info.value.args[0] == "boom"
manual = exc_info.value.args[-1]
assert manual.startswith("Manual instantiation attempt:")
assert "from test_config_lazy_init import BadThing" in manual
assert manual == (
"Manual instantiation attempt: "
"from test_config_lazy_init import BadThing; "
"BadThing(1, name='bad')"
)
assert ns.failed_items_excpetion["bad"].args[-1] == manual
def test_append_obj_from_config_resolves_component_dependencies_eagerly_for_non_lazy_nodes():
ns = Namespace(name="test")
ns.append_obj(DependencyThing, lazy=True, name="dependency")
ns.append_obj_from_config(
{
"type": f"{__name__}:NeedsDependency",
"name": "needs_dependency",
"args": [Component("dependency")],
"kwargs": {},
"lazy": False,
}
)
root = ns.initialized_items["needs_dependency"]
assert isinstance(root.dependency, DependencyThing)
assert root.dependency is not ns.get_obj("dependency")
assert root.dependency.name == "dependency"