diff --git a/puppeter/container.py b/puppeter/container.py index 36d9db6..1296178 100644 --- a/puppeter/container.py +++ b/puppeter/container.py @@ -4,9 +4,12 @@ class NamedBean(cls): def __init__(self, *args): self.wrapped = cls(*args) - def get_bean_name(self): + def bean_name(self): return bean_name + def __repr__(self): + return '@Named(\'%s\') %s' % (bean_name, repr(self.wrapped)) + def __getattr__(self, name): return getattr(self.wrapped, name) return NamedBean @@ -14,29 +17,21 @@ def __getattr__(self, name): def bind(cls, impl_cls): - try: - lst = __beans[cls] - except: - lst = [] - __beans[cls] = lst - lst.append(__Bean(cls, impl_cls=impl_cls)) + beans = __get_all_beans(cls) + beans.append(__Bean(cls, impl_cls=impl_cls)) def bind_to_instance(cls, impl): - try: - lst = __beans[cls] - except: - lst = [] - __beans[cls] = lst - lst.append(__Bean(cls, impl=impl)) + beans = __get_all_beans(cls) + beans.append(__Bean(cls, impl=impl)) def get_all(cls): + beans = __get_all_beans(cls) try: - beans = __beans[cls] - return list(map(lambda bean: bean.impl(), beans)) - except: - return [] + return tuple(map(lambda bean: bean.impl(), beans)) + except Exception: + return tuple() def get(cls): @@ -63,8 +58,10 @@ def get_named(cls, bean_name): def __get_all_beans(cls): try: return __beans[cls] - except: - return [] + except KeyError: + lst = [] + __beans[cls] = lst + return lst class __Bean: @@ -79,13 +76,9 @@ def impl_cls_name(self): return self.__impl_cls def name(self): - if self.__impl is not None: - return self.__impl.get_bean_name() - else: - return self.__impl_cls().get_bean_name() + return self.impl().bean_name() def impl(self): - if self.__impl is not None: - return self.__impl - else: - return self.__impl_cls() + if self.__impl is None: + self.__impl = self.__impl_cls() + return self.__impl diff --git a/puppeter/domain/__init__.py b/puppeter/domain/__init__.py index 8f47b0e..e69de29 100644 --- a/puppeter/domain/__init__.py +++ b/puppeter/domain/__init__.py @@ -1 +0,0 @@ -PRELOADED = True diff --git a/puppeter/domain/model/installer.py b/puppeter/domain/model/installer.py index 75ca32c..8ed86f5 100644 --- a/puppeter/domain/model/installer.py +++ b/puppeter/domain/model/installer.py @@ -13,9 +13,11 @@ def __init__(self): self.__mode = Mode.Agent def raw_options(self): + # noinspection PyUnresolvedReferences + installer_type = self.bean_name() return { 'mode': self.__mode.name, - 'type': self.get_bean_name() + 'type': installer_type } def read_raw_options(self, options): diff --git a/puppeter/persistence/__init__.py b/puppeter/persistence/__init__.py index 8f47b0e..e69de29 100644 --- a/puppeter/persistence/__init__.py +++ b/puppeter/persistence/__init__.py @@ -1 +0,0 @@ -PRELOADED = True diff --git a/puppeter/presentation/__init__.py b/puppeter/presentation/__init__.py index 8f47b0e..e69de29 100644 --- a/puppeter/presentation/__init__.py +++ b/puppeter/presentation/__init__.py @@ -1 +0,0 @@ -PRELOADED = True diff --git a/tests/domain/model/test_installer.py b/tests/domain/model/test_installer.py index 6c0b1f6..f970616 100644 --- a/tests/domain/model/test_installer.py +++ b/tests/domain/model/test_installer.py @@ -3,7 +3,7 @@ def test_rubygems_installer_named_bean(): from puppeter.domain.model.installer import RubygemsInstaller installer = RubygemsInstaller() # when - bean_name = installer.get_bean_name() + bean_name = installer.bean_name() # then assert bean_name is 'gem' @@ -60,4 +60,17 @@ def test_getting_impl_from_container(): # then assert installer.mode() is Mode.Agent - assert installer.get_bean_name() is 'pc3x' + assert installer.bean_name() is 'pc3x' + + +def test_getting_all_impls_from_container(): + # given + from puppeter.domain.model.installer import Installer, Collection5xInstaller + from puppeter import container + + # when + installers = container.get_all(Installer) + + # then + assert len(installers) >= 4 + assert len(tuple(filter(lambda cls: isinstance(cls, Collection5xInstaller), installers))) == 1