59 lines
1.7 KiB
Python
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"
|