Source code for zsl.application.containers.container

"""
:mod:`zsl.application.containers.container`
-------------------------------------------
"""
import inspect


[docs] class IoCContainer: """Collection of DI modules set as class attributes. This is used for declarative DI configuration, which can be easily extended upon. >>> class MyContainer(IoCContainer): ... cache = MyCacheModule ... redis = MyRedisModule >>> class MyTestContainer(MyContainer): ... redis = MockRedisModule """
[docs] @classmethod def modules(cls): """Collect all the public class attributes. All class attributes should be a DI modules, this method collects them and returns as a list. :return: list of DI modules :rtype: list[Union[Module, Callable]] """ members = inspect.getmembers(cls, lambda a: not (inspect.isroutine(a) and a.__name__ == 'modules')) modules = [module for name, module in members if not name.startswith('_')] return modules