mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-22 09:36:48 +03:00
Refactor dependency_injector.providers package internals
This commit is contained in:
parent
f595b7f670
commit
3a7b9c1e98
|
@ -6,8 +6,6 @@ from dependency_injector.providers.base import (
|
|||
Static,
|
||||
StaticProvider,
|
||||
ExternalDependency,
|
||||
OverridingContext,
|
||||
override,
|
||||
)
|
||||
from dependency_injector.providers.callable import (
|
||||
Callable,
|
||||
|
@ -29,6 +27,10 @@ from dependency_injector.providers.config import (
|
|||
Config,
|
||||
ChildConfig,
|
||||
)
|
||||
from dependency_injector.providers.utils import (
|
||||
OverridingContext,
|
||||
override,
|
||||
)
|
||||
|
||||
|
||||
__all__ = (
|
||||
|
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
import six
|
||||
|
||||
from dependency_injector.providers.utils import OverridingContext
|
||||
from dependency_injector.errors import Error
|
||||
|
||||
from dependency_injector.utils import (
|
||||
is_provider,
|
||||
ensure_is_provider,
|
||||
|
@ -356,67 +356,3 @@ class ExternalDependency(Provider):
|
|||
return represent_provider(provider=self, provides=self.instance_of)
|
||||
|
||||
__repr__ = __str__
|
||||
|
||||
|
||||
class OverridingContext(object):
|
||||
"""Provider overriding context.
|
||||
|
||||
:py:class:`OverridingContext` is used by :py:meth:`Provider.override` for
|
||||
implemeting ``with`` contexts. When :py:class:`OverridingContext` is
|
||||
closed, overriding that was created in this context is dropped also.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
with provider.override(another_provider):
|
||||
assert provider.is_overridden
|
||||
assert not provider.is_overridden
|
||||
"""
|
||||
|
||||
def __init__(self, overridden, overriding):
|
||||
"""Initializer.
|
||||
|
||||
:param overridden: Overridden provider.
|
||||
:type overridden: :py:class:`Provider`
|
||||
|
||||
:param overriding: Overriding provider.
|
||||
:type overriding: :py:class:`Provider`
|
||||
"""
|
||||
self.overridden = overridden
|
||||
self.overriding = overriding
|
||||
|
||||
def __enter__(self):
|
||||
"""Do nothing."""
|
||||
return self.overriding
|
||||
|
||||
def __exit__(self, *_):
|
||||
"""Exit overriding context."""
|
||||
self.overridden.reset_last_overriding()
|
||||
|
||||
|
||||
def override(overridden):
|
||||
"""Decorator for overriding providers.
|
||||
|
||||
This decorator overrides ``overridden`` provider by decorated one.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
@Factory
|
||||
class SomeClass(object):
|
||||
pass
|
||||
|
||||
|
||||
@override(SomeClass)
|
||||
@Factory
|
||||
class ExtendedSomeClass(SomeClass.cls):
|
||||
pass
|
||||
|
||||
:param overridden: Provider that should be overridden.
|
||||
:type overridden: :py:class:`Provider`
|
||||
|
||||
:return: Overriding provider.
|
||||
:rtype: :py:class:`Provider`
|
||||
"""
|
||||
def decorator(overriding):
|
||||
overridden.override(overriding)
|
||||
return overriding
|
||||
return decorator
|
||||
|
|
|
@ -3,14 +3,11 @@
|
|||
import six
|
||||
|
||||
from dependency_injector.providers.base import Provider
|
||||
|
||||
from dependency_injector.injections import (
|
||||
_parse_args_injections,
|
||||
_parse_kwargs_injections,
|
||||
)
|
||||
|
||||
from dependency_injector.utils import represent_provider
|
||||
|
||||
from dependency_injector.errors import Error
|
||||
|
||||
|
||||
|
|
|
@ -3,10 +3,8 @@
|
|||
import six
|
||||
|
||||
from dependency_injector.providers.base import Provider
|
||||
|
||||
from dependency_injector.errors import Error
|
||||
|
||||
from dependency_injector.utils import represent_provider
|
||||
from dependency_injector.errors import Error
|
||||
|
||||
|
||||
@six.python_2_unicode_compatible
|
||||
|
|
|
@ -1,13 +1,11 @@
|
|||
"""Dependency injector creational providers."""
|
||||
|
||||
from dependency_injector.providers.callable import Callable
|
||||
|
||||
from dependency_injector.utils import (
|
||||
is_attribute_injection,
|
||||
is_method_injection,
|
||||
GLOBAL_LOCK,
|
||||
)
|
||||
|
||||
from dependency_injector.errors import Error
|
||||
|
||||
|
||||
|
|
65
dependency_injector/providers/utils.py
Normal file
65
dependency_injector/providers/utils.py
Normal file
|
@ -0,0 +1,65 @@
|
|||
"""Dependency injector provider utils."""
|
||||
|
||||
|
||||
class OverridingContext(object):
|
||||
"""Provider overriding context.
|
||||
|
||||
:py:class:`OverridingContext` is used by :py:meth:`Provider.override` for
|
||||
implemeting ``with`` contexts. When :py:class:`OverridingContext` is
|
||||
closed, overriding that was created in this context is dropped also.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
with provider.override(another_provider):
|
||||
assert provider.is_overridden
|
||||
assert not provider.is_overridden
|
||||
"""
|
||||
|
||||
def __init__(self, overridden, overriding):
|
||||
"""Initializer.
|
||||
|
||||
:param overridden: Overridden provider.
|
||||
:type overridden: :py:class:`Provider`
|
||||
|
||||
:param overriding: Overriding provider.
|
||||
:type overriding: :py:class:`Provider`
|
||||
"""
|
||||
self.overridden = overridden
|
||||
self.overriding = overriding
|
||||
|
||||
def __enter__(self):
|
||||
"""Do nothing."""
|
||||
return self.overriding
|
||||
|
||||
def __exit__(self, *_):
|
||||
"""Exit overriding context."""
|
||||
self.overridden.reset_last_overriding()
|
||||
|
||||
|
||||
def override(overridden):
|
||||
"""Decorator for overriding providers.
|
||||
|
||||
This decorator overrides ``overridden`` provider by decorated one.
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
@Factory
|
||||
class SomeClass(object):
|
||||
pass
|
||||
|
||||
|
||||
@override(SomeClass)
|
||||
@Factory
|
||||
class ExtendedSomeClass(SomeClass.cls):
|
||||
pass
|
||||
|
||||
:param overridden: Provider that should be overridden.
|
||||
:type overridden: :py:class:`Provider`
|
||||
|
||||
:return: Overriding provider.
|
||||
:rtype: :py:class:`Provider`
|
||||
"""
|
||||
def decorator(overriding):
|
||||
overridden.override(overriding)
|
||||
return overriding
|
||||
return decorator
|
Loading…
Reference in New Issue
Block a user