From 3b0ad64788134db20548599e6503083b4dc28a06 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Mon, 3 Aug 2020 17:40:01 -0400 Subject: [PATCH] Add config itemselector example --- .../configuration_itemselector.py | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 examples/providers/configuration/configuration_itemselector.py diff --git a/examples/providers/configuration/configuration_itemselector.py b/examples/providers/configuration/configuration_itemselector.py new file mode 100644 index 00000000..fd60a616 --- /dev/null +++ b/examples/providers/configuration/configuration_itemselector.py @@ -0,0 +1,47 @@ +"""`Configuration` provider dynamic item selector. + +Details: https://github.com/ets-labs/python-dependency-injector/issues/274 +""" + +import dataclasses + +from dependency_injector import providers + + +@dataclasses.dataclass +class Foo: + option1: object + option2: object + + +config = providers.Configuration(default={ + 'target': 'A', + 'items': { + 'A': { + 'option1': 60, + 'option2': 80, + }, + 'B': { + 'option1': 10, + 'option2': 20, + }, + }, +}) + +foo = providers.Factory( + Foo, + option1=config.items[config.target].option1, + option2=config.items[config.target].option2, +) + + +if __name__ == '__main__': + config.target.from_env('TARGET') + f = foo() + print(f.option1, f.option2) + + +# $ TARGET=A python configuration_itemselector.py +# 60 80 +# $ TARGET=B python configuration_itemselector.py +# 10 20