def test_from_config(): """@TODO: Docs. Contribution is welcome.""" r = Registry("obj") r.add(foo) res = r.get_from_params(**{"obj": "foo", "a": 1, "b": 2}) assert res == {"a": 1, "b": 2} res = r.get_from_params(**{}) assert res is None
def test_name_key(): """@TODO: Docs. Contribution is welcome.""" r = Registry(name_key="_key_") r.add(foo) res = r.get_from_params(**{"_key_": "foo", "a": 1, "b": 2})() assert res == {"a": 1, "b": 2} res = r.get_from_params(**{"_target_": "foo", "a": 1, "b": 2}) assert res == {"_target_": "foo", "a": 1, "b": 2}
def test_meta_factory(): """@TODO: Docs. Contribution is welcome.""" # noqa: D202 def meta_1(fn, args, kwargs): return fn def meta_2(fn, args, kwargs): return 1 r = Registry("obj", meta_1) r.add(foo) res = r.get_from_params(**{"obj": "foo"}) assert res == foo res = r.get_from_params(**{"obj": "foo"}, meta_factory=meta_2) assert res == 1
def test_recursive_get_from_config(): def meta_factory(factory, args, kwargs): return factory(*args, **kwargs) r = Registry(meta_factory=meta_factory) r.add(foo) res = r.get_from_params(**{"_target_": "foo", "a": 1, "b": 2}) assert res == {"a": 1, "b": 2} res = r.get_from_params( **{ "_target_": "foo", "a": { "_target_": "foo", "a": { "_target_": "foo", "a": 1, "b": 2 }, "b": 2 }, "b": [{ "_target_": "foo", "a": 1, "b": 2 }, { "_target_": "foo", "a": 1, "b": 2 }], }) assert res == { "a": { "a": { "a": 1, "b": 2 }, "b": 2 }, "b": [{ "a": 1, "b": 2 }, { "a": 1, "b": 2 }] } res = r.get_from_params( **{ "a": { "_target_": "foo", "a": 1, "b": 2 }, "b": { "_target_": "foo", "a": 1, "b": 2 } }) assert res == {"a": {"a": 1, "b": 2}, "b": {"a": 1, "b": 2}} # check nested dicts support res = r.get_from_params( **{ "a": { "_target_": "foo", "a": 1, "b": 2 }, "b": { "_target_": "foo", "a": 1, "b": 2 } }) assert res == {"a": {"a": 1, "b": 2}, "b": {"a": 1, "b": 2}} res = r.get_from_params(**{ "_target_": "foo", "a": { "c": { "_target_": "foo", "a": 1, "b": 2 } }, "b": 2 }) assert res == {"a": {"c": {"a": 1, "b": 2}}, "b": 2} # check nested lists support res = r.get_from_params( **{ "_target_": "foo", "a": [[[{ "_target_": "foo", "a": 1, "b": 2 }]]], "b": { "c": 3, "d": { "e": 4 } }, }) assert res == {"a": [[[{"a": 1, "b": 2}]]], "b": {"c": 3, "d": {"e": 4}}} # check shared_params res = r.get_from_params(**{ "_target_": "foo", "a": { "_target_": "foo", "a": 1, "b": 3 } }, shared_params={"b": 2}) assert res == {"a": {"a": 1, "b": 3}, "b": 2}