python-dependency-injector/examples/providers/configuration/configuration_itemselector.py

48 lines
1.0 KiB
Python
Raw Permalink Normal View History

"""`Configuration` provider dynamic item selector."""
import dataclasses
from dependency_injector import containers, providers
@dataclasses.dataclass
class Foo:
option1: object
option2: object
class Container(containers.DeclarativeContainer):
config = providers.Configuration(default={
2021-09-30 22:32:21 +03:00
"target": "A",
"items": {
"A": {
"option1": 60,
"option2": 80,
},
2021-09-30 22:32:21 +03:00
"B": {
"option1": 10,
"option2": 20,
},
},
})
foo_factory = providers.Factory(
Foo,
option1=config.items[config.target].option1,
option2=config.items[config.target].option2,
)
2021-09-30 22:32:21 +03:00
if __name__ == "__main__":
container = Container()
2021-09-30 22:32:21 +03:00
container.config.target.from_env("TARGET")
foo = container.foo_factory()
print(foo.option1, foo.option2)
# $ TARGET=A python configuration_itemselector.py
# 60 80
# $ TARGET=B python configuration_itemselector.py
# 10 20