mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-25 11:04:01 +03:00
Merge branch 'release/4.36.1' into master
This commit is contained in:
commit
cf039a0c2b
|
@ -52,8 +52,8 @@ master_doc = 'index'
|
||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = u'Dependency Injector'
|
project = u'Dependency Injector'
|
||||||
copyright = u'2021, ETS Labs'
|
copyright = u'2021, Roman Mogylatov'
|
||||||
author = u'ETS Labs'
|
author = u'Roman Mogylatov'
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
|
@ -232,7 +232,7 @@ latex_elements = {
|
||||||
# author, documentclass [howto, manual, or own class]).
|
# author, documentclass [howto, manual, or own class]).
|
||||||
latex_documents = [
|
latex_documents = [
|
||||||
(master_doc, 'dependency_injector.tex', u'Dependency Injector Documentation',
|
(master_doc, 'dependency_injector.tex', u'Dependency Injector Documentation',
|
||||||
u'ETS Labs', 'manual'),
|
u'Roman Mogylatov', 'manual'),
|
||||||
]
|
]
|
||||||
|
|
||||||
# The name of an image file (relative to this directory) to place at the top of
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
@ -303,7 +303,7 @@ html_theme_options = {
|
||||||
'github_button': True,
|
'github_button': True,
|
||||||
'github_banner': True,
|
'github_banner': True,
|
||||||
'logo': 'logo.svg',
|
'logo': 'logo.svg',
|
||||||
'description': 'Dependency injection framework for Python',
|
'description': 'Dependency injection framework for Python by Roman Mogylatov',
|
||||||
'code_font_size': '10pt',
|
'code_font_size': '10pt',
|
||||||
'analytics_id': 'UA-67012059-1',
|
'analytics_id': 'UA-67012059-1',
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,7 +8,7 @@ Boto3 example
|
||||||
:description: This example demonstrates a usage of Boto3 AWS client and Dependency Injector.
|
:description: This example demonstrates a usage of Boto3 AWS client and Dependency Injector.
|
||||||
|
|
||||||
|
|
||||||
This example shows how to use ``Dependency Injector`` with `Boto3 <https://www.djangoproject.com/>`_.
|
This example shows how to use ``Dependency Injector`` with `Boto3 <https://github.com/boto/boto3>`_.
|
||||||
|
|
||||||
The source code is available on the `Github <https://github.com/ets-labs/python-dependency-injector/tree/master/examples/miniapps/boto3-session>`_.
|
The source code is available on the `Github <https://github.com/ets-labs/python-dependency-injector/tree/master/examples/miniapps/boto3-session>`_.
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,17 @@ that were made in every particular version.
|
||||||
From version 0.7.6 *Dependency Injector* framework strictly
|
From version 0.7.6 *Dependency Injector* framework strictly
|
||||||
follows `Semantic versioning`_
|
follows `Semantic versioning`_
|
||||||
|
|
||||||
|
|
||||||
|
4.36.1
|
||||||
|
------
|
||||||
|
- Fix a wiring bug with improper resolving of ``Provide[some_provider.provider]``.
|
||||||
|
- Fix a typo in ``Factory`` provider docs ``service.add_attributes(clent=client)``
|
||||||
|
`#499 <https://github.com/ets-labs/python-dependency-injector/issues/499>`_.
|
||||||
|
Thanks to `@rajanjha786 <https://github.com/rajanjha786>`_ for the contribution.
|
||||||
|
- Fix a typo in ``boto3`` example
|
||||||
|
`#511 <https://github.com/ets-labs/python-dependency-injector/issues/511>`_.
|
||||||
|
Thanks to `@whysage <https://github.com/whysage>`_ for the contribution.
|
||||||
|
|
||||||
4.36.0
|
4.36.0
|
||||||
------
|
------
|
||||||
- Add support of non-string keys for ``FactoryAggregate`` provider.
|
- Add support of non-string keys for ``FactoryAggregate`` provider.
|
||||||
|
|
|
@ -39,19 +39,29 @@ a function or method argument:
|
||||||
|
|
||||||
Specifying an annotation is optional.
|
Specifying an annotation is optional.
|
||||||
|
|
||||||
There are two types of markers:
|
To inject the provider itself use ``Provide[foo.provider]``:
|
||||||
|
|
||||||
- ``Provide[foo]`` - call the provider ``foo`` and injects the result
|
|
||||||
- ``Provider[foo]`` - injects the provider ``foo`` itself
|
|
||||||
|
|
||||||
.. code-block:: python
|
.. code-block:: python
|
||||||
|
|
||||||
|
from dependency_injector.providers import Factory
|
||||||
|
from dependency_injector.wiring import inject, Provide
|
||||||
|
|
||||||
|
|
||||||
|
@inject
|
||||||
|
def foo(bar_provider: Factory[Bar] = Provide[Container.bar.provider]):
|
||||||
|
bar = bar_provider(argument="baz")
|
||||||
|
...
|
||||||
|
You can also use ``Provider[foo]`` for injecting the provider itself:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from dependency_injector.providers import Factory
|
||||||
from dependency_injector.wiring import inject, Provider
|
from dependency_injector.wiring import inject, Provider
|
||||||
|
|
||||||
|
|
||||||
@inject
|
@inject
|
||||||
def foo(bar_provider: Callable[..., Bar] = Provider[Container.bar]):
|
def foo(bar_provider: Factory[Bar] = Provider[Container.bar]):
|
||||||
bar = bar_provider()
|
bar = bar_provider(argument="baz")
|
||||||
...
|
...
|
||||||
|
|
||||||
You can use configuration, provided instance and sub-container providers as you normally do.
|
You can use configuration, provided instance and sub-container providers as you normally do.
|
||||||
|
|
|
@ -17,7 +17,7 @@ class Container(containers.DeclarativeContainer):
|
||||||
client = providers.Factory(Client)
|
client = providers.Factory(Client)
|
||||||
|
|
||||||
service = providers.Factory(Service)
|
service = providers.Factory(Service)
|
||||||
service.add_attributes(clent=client)
|
service.add_attributes(client=client)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"""Top-level package."""
|
"""Top-level package."""
|
||||||
|
|
||||||
__version__ = '4.36.0'
|
__version__ = '4.36.1'
|
||||||
"""Version number.
|
"""Version number.
|
||||||
|
|
||||||
:type: str
|
:type: str
|
||||||
|
|
|
@ -226,7 +226,10 @@ class ProvidersMap:
|
||||||
self,
|
self,
|
||||||
original: providers.Delegate,
|
original: providers.Delegate,
|
||||||
) -> Optional[providers.Provider]:
|
) -> Optional[providers.Provider]:
|
||||||
return self._resolve_provider(original.provides)
|
provider = self._resolve_provider(original.provides)
|
||||||
|
if provider:
|
||||||
|
provider = provider.provider
|
||||||
|
return provider
|
||||||
|
|
||||||
def _resolve_config_option(
|
def _resolve_config_option(
|
||||||
self,
|
self,
|
||||||
|
@ -539,7 +542,10 @@ def _bind_injections(fn: Callable[..., Any], providers_map: ProvidersMap) -> Non
|
||||||
if isinstance(marker, Provide):
|
if isinstance(marker, Provide):
|
||||||
fn.__injections__[injection] = provider
|
fn.__injections__[injection] = provider
|
||||||
elif isinstance(marker, Provider):
|
elif isinstance(marker, Provider):
|
||||||
fn.__injections__[injection] = provider.provider
|
if isinstance(provider, providers.Delegate):
|
||||||
|
fn.__injections__[injection] = provider
|
||||||
|
else:
|
||||||
|
fn.__injections__[injection] = provider.provider
|
||||||
|
|
||||||
if injection in fn.__reference_closing__:
|
if injection in fn.__reference_closing__:
|
||||||
fn.__closing__[injection] = provider
|
fn.__closing__[injection] = provider
|
||||||
|
|
|
@ -84,7 +84,13 @@ def test_config_value_required_undefined(
|
||||||
|
|
||||||
|
|
||||||
@inject
|
@inject
|
||||||
def test_provide_provider(service_provider: Callable[..., Service] = Provider[Container.service.provider]):
|
def test_provide_provider(service_provider: Callable[..., Service] = Provide[Container.service.provider]):
|
||||||
|
service = service_provider()
|
||||||
|
return service
|
||||||
|
|
||||||
|
|
||||||
|
@inject
|
||||||
|
def test_provider_provider(service_provider: Callable[..., Service] = Provider[Container.service.provider]):
|
||||||
service = service_provider()
|
service = service_provider()
|
||||||
return service
|
return service
|
||||||
|
|
||||||
|
|
|
@ -169,6 +169,10 @@ class WiringTest(unittest.TestCase):
|
||||||
service = module.test_provide_provider()
|
service = module.test_provide_provider()
|
||||||
self.assertIsInstance(service, Service)
|
self.assertIsInstance(service, Service)
|
||||||
|
|
||||||
|
def test_provider_provider(self):
|
||||||
|
service = module.test_provider_provider()
|
||||||
|
self.assertIsInstance(service, Service)
|
||||||
|
|
||||||
def test_provided_instance(self):
|
def test_provided_instance(self):
|
||||||
class TestService:
|
class TestService:
|
||||||
foo = {
|
foo = {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user