mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-24 10:34:01 +03:00
ea1e79885c
* Get 1st stable version * Remove prototype module * Try fix copying * Add config itemselector example * Add doc blocks
48 lines
884 B
Python
48 lines
884 B
Python
"""`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
|