python-dependency-injector/examples/advanced_usage/config_provider.py

65 lines
1.5 KiB
Python
Raw Normal View History

2015-03-10 01:43:23 +03:00
"""Config provider examples."""
2015-11-23 20:14:50 +03:00
from dependency_injector import catalogs
from dependency_injector import providers
2015-01-28 14:08:54 +03:00
class ObjectA(object):
2015-03-10 01:43:23 +03:00
"""Example class ObjectA, that has dependencies on some setting values."""
def __init__(self, fee, price, timezone):
"""Initializer."""
self.fee = fee
self.price = price
self.timezone = timezone
2015-01-28 14:08:54 +03:00
2015-11-23 20:14:50 +03:00
class Catalog(catalogs.DeclarativeCatalog):
2015-10-26 13:52:52 +03:00
"""Catalog of providers."""
2015-01-28 14:08:54 +03:00
2015-11-23 20:14:50 +03:00
config = providers.Config()
""":type: providers.Config"""
2015-01-28 14:08:54 +03:00
2015-11-23 20:14:50 +03:00
object_a = providers.Factory(ObjectA,
fee=config.FEE,
price=config.PRICE,
timezone=config.GLOBAL.TIMEZONE)
""":type: providers.Provider -> ObjectA"""
2015-01-28 14:08:54 +03:00
# Setting config value and making some tests.
Catalog.config.update_from({
2015-03-10 01:43:23 +03:00
'FEE': 1.25,
'PRICE': 2.99,
2015-01-28 14:08:54 +03:00
'GLOBAL': {
2015-03-10 01:43:23 +03:00
'TIMEZONE': 'US/Eastern'
2015-01-28 14:08:54 +03:00
}
})
object_a1 = Catalog.object_a()
2015-03-10 01:43:23 +03:00
assert object_a1.fee == 1.25
assert object_a1.price == 2.99
assert object_a1.timezone == 'US/Eastern'
2015-01-28 14:08:54 +03:00
# Changing config value one more time and making some tests.
Catalog.config.update_from({
2015-03-10 01:43:23 +03:00
'FEE': 5.25,
'PRICE': 19.99,
2015-01-28 14:08:54 +03:00
'GLOBAL': {
2015-03-10 01:43:23 +03:00
'TIMEZONE': 'US/Western'
2015-01-28 14:08:54 +03:00
}
})
object_a2 = Catalog.object_a()
2015-03-10 01:43:23 +03:00
# New one ObjectA has new config values.
assert object_a2.fee == 5.25
assert object_a2.price == 19.99
assert object_a2.timezone == 'US/Western'
2015-01-28 14:08:54 +03:00
2015-03-10 01:43:23 +03:00
# And old one has old ones.
assert object_a1.fee == 1.25
assert object_a1.price == 2.99
assert object_a1.timezone == 'US/Eastern'