Exemplo n.º 1
0
    def test_if_class_can_be_used_as_key(self):
        locator = ObjectLocator()
        test_object = TestClass1()

        locator.register(TestClass1, test_object)
        instance = locator.get(TestClass1)

        assert instance is not None
        assert isinstance(instance, TestClass1)
Exemplo n.º 2
0
    def test_if_registered_object_is_resolved_by_key(self):
        localtor = ObjectLocator()
        test_object = TestClass1()

        localtor.register(TEST_CLASS_1_NAME, test_object)
        instance = localtor.get(TEST_CLASS_1_NAME)

        assert instance is not None
        assert isinstance(instance, type(test_object))
        assert test_object is instance
Exemplo n.º 3
0
class SimpleContainer(object):
    def __init__(self, name='', locator=None):
        if locator is not None:
            if not isinstance(locator, LocatorBase):
                raise TypeError('locator must be instance of class derived from %s' % LocatorBase.__class__.__name__)
            self._locator = locator
        else:
            self._locator = ObjectLocator()
        self._name = name

    def register_object(self, key, obj):
        provider = providers.ObjectProvider(obj)
        self._register_provider_for_key(key, provider)

    def register_callable(self, key, callable_object, lifetime=InstanceLifetime.NewInstancePerCall):
        if lifetime == InstanceLifetime.NewInstancePerCall:
            provider = providers.NewInstancesProvider(callable_object)
        elif lifetime == InstanceLifetime.SingletonEager:
            provider = providers.EagerSingleInstanceProvider(callable_object)
        elif lifetime == InstanceLifetime.SingletonLazy:
            provider = providers.LazySingleInstanceProvider(callable_object)
        else:
            raise TypeError('Unsuported instance lifetime.')

        self._register_provider_for_key(key, provider)

    def register_callable_with_deps(self, key, callable_object, lifetime=InstanceLifetime.NewInstancePerCall):
        if lifetime == InstanceLifetime.NewInstancePerCall:
            provider = providers.NewInstancesWithDepsProvider(callable_object, self)
        elif lifetime == InstanceLifetime.SingletonEager:
            provider = providers.EagerSingleInstanceWithDepsProvider(callable_object, self)
        elif lifetime == InstanceLifetime.SingletonLazy:
            provider = providers.LazySingleInstanceWithDepsProvider(callable_object, self)
        else:
            raise TypeError('Unsuported instance lifetime.')

        self._register_provider_for_key(key, provider)

    def get(self, key):
        return self._resolve(key)

    def build(self, cls):
        provider = providers.NewInstancesWithDepsProvider(cls, self)
        return provider.get()

    @property
    def name(self):
        return self._name

    def _resolve(self, key):
        return self._locator.get(key).get()

    def _register_provider_for_key(self, id, provider):
        self._locator.register(id, provider)
Exemplo n.º 4
0
    def test_if_resolving_unregistered_object_raises_exception(self):
        localtor = ObjectLocator()

        with pytest.raises(KeyError):
            localtor.get(TEST_CLASS_1_NAME)