mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-25 19:14:00 +03:00
Move "provided" attribute (#306)
* Update typing stub * Move attribute * Add typing test * Update docs * Add test * Update changelog
This commit is contained in:
parent
452a13c9f7
commit
ff4d24706e
|
@ -9,6 +9,7 @@ follows `Semantic versioning`_
|
||||||
|
|
||||||
Develop
|
Develop
|
||||||
-------
|
-------
|
||||||
|
- Move ``.provided`` attribute to ``providers.Provider``.
|
||||||
- Update all links in documentation and examples to use ``https://`` instead of ``http``.
|
- Update all links in documentation and examples to use ``https://`` instead of ``http``.
|
||||||
|
|
||||||
4.0.4
|
4.0.4
|
||||||
|
|
|
@ -35,24 +35,4 @@ You can do nested constructions:
|
||||||
:emphasize-lines: 26-32
|
:emphasize-lines: 26-32
|
||||||
:lines: 3-
|
:lines: 3-
|
||||||
|
|
||||||
The ``.provided`` attribute is available for the next providers:
|
|
||||||
|
|
||||||
- :py:class:`Factory` and its subclasses
|
|
||||||
- :py:class:`Singleton` and its subclasses
|
|
||||||
- :py:class:`Callable` and its subclasses
|
|
||||||
- :py:class:`Object`
|
|
||||||
- :py:class:`List`
|
|
||||||
- :py:class:`Selector`
|
|
||||||
- :py:class:`Dependency`
|
|
||||||
|
|
||||||
When you create a new provider subclass and want to implement the ``.provided`` attribute, you
|
|
||||||
should use the :py:class:`ProvidedInstance` provider. Add the ``.provided`` property
|
|
||||||
implementation to a new subclass:
|
|
||||||
|
|
||||||
.. code-block:: python
|
|
||||||
|
|
||||||
@property
|
|
||||||
def provided(self):
|
|
||||||
return ProvidedInstance(self)
|
|
||||||
|
|
||||||
.. disqus::
|
.. disqus::
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -42,14 +42,14 @@ class Provider(Generic[T]):
|
||||||
def delegate(self) -> Provider: ...
|
def delegate(self) -> Provider: ...
|
||||||
@property
|
@property
|
||||||
def provider(self) -> Provider: ...
|
def provider(self) -> Provider: ...
|
||||||
|
@property
|
||||||
|
def provided(self) -> ProvidedInstance: ...
|
||||||
def _copy_overridings(self, copied: Provider, memo: Optional[Dict[Any, Any]]) -> None: ...
|
def _copy_overridings(self, copied: Provider, memo: Optional[Dict[Any, Any]]) -> None: ...
|
||||||
|
|
||||||
|
|
||||||
class Object(Provider, Generic[T]):
|
class Object(Provider, Generic[T]):
|
||||||
def __init__(self, provides: T) -> None: ...
|
def __init__(self, provides: T) -> None: ...
|
||||||
def __call__(self, *args: Injection, **kwargs: Injection) -> T: ...
|
def __call__(self, *args: Injection, **kwargs: Injection) -> T: ...
|
||||||
@property
|
|
||||||
def provided(self) -> ProvidedInstance: ...
|
|
||||||
|
|
||||||
|
|
||||||
class Delegate(Provider):
|
class Delegate(Provider):
|
||||||
|
@ -63,8 +63,6 @@ class Dependency(Provider, Generic[T]):
|
||||||
def __init__(self, instance_of: Type[T] = object) -> None: ...
|
def __init__(self, instance_of: Type[T] = object) -> None: ...
|
||||||
def __call__(self, *args: Injection, **kwargs: Injection) -> T: ...
|
def __call__(self, *args: Injection, **kwargs: Injection) -> T: ...
|
||||||
@property
|
@property
|
||||||
def provided(self) -> ProvidedInstance: ...
|
|
||||||
@property
|
|
||||||
def instance_of(self) -> Type[T]: ...
|
def instance_of(self) -> Type[T]: ...
|
||||||
def provided_by(self, provider: Provider) -> OverridingContext: ...
|
def provided_by(self, provider: Provider) -> OverridingContext: ...
|
||||||
|
|
||||||
|
@ -85,8 +83,6 @@ class Callable(Provider, Generic[T]):
|
||||||
@property
|
@property
|
||||||
def provides(self) -> T: ...
|
def provides(self) -> T: ...
|
||||||
@property
|
@property
|
||||||
def provided(self) -> ProvidedInstance: ...
|
|
||||||
@property
|
|
||||||
def args(self) -> Tuple[Injection]: ...
|
def args(self) -> Tuple[Injection]: ...
|
||||||
def add_args(self, *args: Injection) -> Callable[T]: ...
|
def add_args(self, *args: Injection) -> Callable[T]: ...
|
||||||
def set_args(self, *args: Injection) -> Callable[T]: ...
|
def set_args(self, *args: Injection) -> Callable[T]: ...
|
||||||
|
@ -173,8 +169,6 @@ class Factory(Provider, Generic[T]):
|
||||||
@property
|
@property
|
||||||
def provides(self) -> T: ...
|
def provides(self) -> T: ...
|
||||||
@property
|
@property
|
||||||
def provided(self) -> ProvidedInstance: ...
|
|
||||||
@property
|
|
||||||
def args(self) -> Tuple[Injection]: ...
|
def args(self) -> Tuple[Injection]: ...
|
||||||
def add_args(self, *args: Injection) -> Factory[T]: ...
|
def add_args(self, *args: Injection) -> Factory[T]: ...
|
||||||
def set_args(self, *args: Injection) -> Factory[T]: ...
|
def set_args(self, *args: Injection) -> Factory[T]: ...
|
||||||
|
@ -217,8 +211,6 @@ class BaseSingleton(Provider, Generic[T]):
|
||||||
@property
|
@property
|
||||||
def cls(self) -> T: ...
|
def cls(self) -> T: ...
|
||||||
@property
|
@property
|
||||||
def provided(self) -> ProvidedInstance: ...
|
|
||||||
@property
|
|
||||||
def args(self) -> Tuple[Injection]: ...
|
def args(self) -> Tuple[Injection]: ...
|
||||||
def add_args(self, *args: Injection) -> Factory[T]: ...
|
def add_args(self, *args: Injection) -> Factory[T]: ...
|
||||||
def set_args(self, *args: Injection) -> Factory[T]: ...
|
def set_args(self, *args: Injection) -> Factory[T]: ...
|
||||||
|
@ -266,8 +258,6 @@ class List(Provider):
|
||||||
def __init__(self, *args: Injection): ...
|
def __init__(self, *args: Injection): ...
|
||||||
def __call__(self, *args: Injection, **kwargs: Injection) -> _List[Any]: ...
|
def __call__(self, *args: Injection, **kwargs: Injection) -> _List[Any]: ...
|
||||||
@property
|
@property
|
||||||
def provided(self) -> ProvidedInstance: ...
|
|
||||||
@property
|
|
||||||
def args(self) -> Tuple[Injection]: ...
|
def args(self) -> Tuple[Injection]: ...
|
||||||
def add_args(self, *args: Injection) -> List: ...
|
def add_args(self, *args: Injection) -> List: ...
|
||||||
def set_args(self, *args: Injection) -> List: ...
|
def set_args(self, *args: Injection) -> List: ...
|
||||||
|
@ -288,8 +278,6 @@ class Selector(Provider):
|
||||||
def __call__(self, *args: Injection, **kwargs: Injection) -> Any: ...
|
def __call__(self, *args: Injection, **kwargs: Injection) -> Any: ...
|
||||||
def __getattr__(self, name: str) -> Provider: ...
|
def __getattr__(self, name: str) -> Provider: ...
|
||||||
@property
|
@property
|
||||||
def provided(self) -> ProvidedInstance: ...
|
|
||||||
@property
|
|
||||||
def providers(self) -> Dict[str, Provider]: ...
|
def providers(self) -> Dict[str, Provider]: ...
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -273,6 +273,11 @@ cdef class Provider(object):
|
||||||
"""
|
"""
|
||||||
return Delegate(self)
|
return Delegate(self)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def provided(self):
|
||||||
|
"""Return :py:class:`ProvidedInstance` provider."""
|
||||||
|
return ProvidedInstance(self)
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
"""Providing strategy implementation.
|
"""Providing strategy implementation.
|
||||||
|
|
||||||
|
@ -333,11 +338,6 @@ cdef class Object(Provider):
|
||||||
"""
|
"""
|
||||||
return self.__str__()
|
return self.__str__()
|
||||||
|
|
||||||
@property
|
|
||||||
def provided(self):
|
|
||||||
"""Return :py:class:`ProvidedInstance` provider."""
|
|
||||||
return ProvidedInstance(self)
|
|
||||||
|
|
||||||
cpdef object _provide(self, tuple args, dict kwargs):
|
cpdef object _provide(self, tuple args, dict kwargs):
|
||||||
"""Return provided instance.
|
"""Return provided instance.
|
||||||
|
|
||||||
|
@ -498,11 +498,6 @@ cdef class Dependency(Provider):
|
||||||
"""
|
"""
|
||||||
return self.__str__()
|
return self.__str__()
|
||||||
|
|
||||||
@property
|
|
||||||
def provided(self):
|
|
||||||
"""Return :py:class:`ProvidedInstance` provider."""
|
|
||||||
return ProvidedInstance(self)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def instance_of(self):
|
def instance_of(self):
|
||||||
"""Return class of required dependency."""
|
"""Return class of required dependency."""
|
||||||
|
@ -793,11 +788,6 @@ cdef class Callable(Provider):
|
||||||
"""Return wrapped callable."""
|
"""Return wrapped callable."""
|
||||||
return self.__provides
|
return self.__provides
|
||||||
|
|
||||||
@property
|
|
||||||
def provided(self):
|
|
||||||
"""Return :py:class:`ProvidedInstance` provider."""
|
|
||||||
return ProvidedInstance(self)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self):
|
def args(self):
|
||||||
"""Return positional argument injections."""
|
"""Return positional argument injections."""
|
||||||
|
@ -1651,11 +1641,6 @@ cdef class Factory(Provider):
|
||||||
"""Return provided type."""
|
"""Return provided type."""
|
||||||
return self.__instantiator.provides
|
return self.__instantiator.provides
|
||||||
|
|
||||||
@property
|
|
||||||
def provided(self):
|
|
||||||
"""Return :py:class:`ProvidedInstance` provider."""
|
|
||||||
return ProvidedInstance(self)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self):
|
def args(self):
|
||||||
"""Return positional argument injections."""
|
"""Return positional argument injections."""
|
||||||
|
@ -1989,11 +1974,6 @@ cdef class BaseSingleton(Provider):
|
||||||
"""Return provided type."""
|
"""Return provided type."""
|
||||||
return self.__instantiator.cls
|
return self.__instantiator.cls
|
||||||
|
|
||||||
@property
|
|
||||||
def provided(self):
|
|
||||||
"""Return :py:class:`ProvidedInstance` provider."""
|
|
||||||
return ProvidedInstance(self)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self):
|
def args(self):
|
||||||
"""Return positional argument injections."""
|
"""Return positional argument injections."""
|
||||||
|
@ -2422,11 +2402,6 @@ cdef class List(Provider):
|
||||||
"""
|
"""
|
||||||
return represent_provider(provider=self, provides=list(self.args))
|
return represent_provider(provider=self, provides=list(self.args))
|
||||||
|
|
||||||
@property
|
|
||||||
def provided(self):
|
|
||||||
"""Return :py:class:`ProvidedInstance` provider."""
|
|
||||||
return ProvidedInstance(self)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def args(self):
|
def args(self):
|
||||||
"""Return positional argument injections."""
|
"""Return positional argument injections."""
|
||||||
|
@ -2608,11 +2583,6 @@ cdef class Selector(Provider):
|
||||||
address=hex(id(self)),
|
address=hex(id(self)),
|
||||||
)
|
)
|
||||||
|
|
||||||
@property
|
|
||||||
def provided(self):
|
|
||||||
"""Return :py:class:`ProvidedInstance` provider."""
|
|
||||||
return ProvidedInstance(self)
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def providers(self):
|
def providers(self):
|
||||||
"""Return providers."""
|
"""Return providers."""
|
||||||
|
|
6
tests/typing/provider.py
Normal file
6
tests/typing/provider.py
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
from dependency_injector import providers
|
||||||
|
|
||||||
|
|
||||||
|
# Test 1: to check .provided attribute
|
||||||
|
provider1: providers.Provider[int] = providers.Object(1)
|
||||||
|
provided: providers.ProvidedInstance = provider1.provided
|
|
@ -137,3 +137,10 @@ class ProvidedInstancePuzzleTests(unittest.TestCase):
|
||||||
'foo-bar',
|
'foo-bar',
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class ProvidedInstanceInBaseClassTests(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_provided_attribute(self):
|
||||||
|
provider = providers.Provider()
|
||||||
|
assert isinstance(provider.provided, providers.ProvidedInstance)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user