From 5f6777db19688917895697fc885d2d854778ba64 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Tue, 23 Feb 2021 10:20:04 -0500 Subject: [PATCH 1/4] Add tests for ``.as_float()`` modifier usage with wiring --- docs/main/changelog.rst | 4 ++++ tests/unit/samples/wiringsamples/module.py | 4 ++++ .../samples/wiringstringidssamples/module.py | 16 +++++++++++++++- tests/unit/wiring/test_wiring_py36.py | 4 ++++ tests/unit/wiring/test_wiring_string_ids_py36.py | 4 ++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/docs/main/changelog.rst b/docs/main/changelog.rst index 3df4dcef..cf3df9b7 100644 --- a/docs/main/changelog.rst +++ b/docs/main/changelog.rst @@ -7,6 +7,10 @@ that were made in every particular version. From version 0.7.6 *Dependency Injector* framework strictly follows `Semantic versioning`_ +Development version +------------------- +- Add tests for ``.as_float()`` modifier usage with wiring. + 4.26.0 ------ - Add wiring by string id. diff --git a/tests/unit/samples/wiringsamples/module.py b/tests/unit/samples/wiringsamples/module.py index 01031d2d..4c02b553 100644 --- a/tests/unit/samples/wiringsamples/module.py +++ b/tests/unit/samples/wiringsamples/module.py @@ -44,19 +44,23 @@ def test_function_provider(service_provider: Callable[..., Service] = Provider[C @inject def test_config_value( value_int: int = Provide[Container.config.a.b.c.as_int()], + value_float: float = Provide[Container.config.a.b.c.as_float()], value_str: str = Provide[Container.config.a.b.c.as_(str)], value_decimal: Decimal = Provide[Container.config.a.b.c.as_(Decimal)], value_required: str = Provide[Container.config.a.b.c.required()], value_required_int: int = Provide[Container.config.a.b.c.required().as_int()], + value_required_float: float = Provide[Container.config.a.b.c.required().as_float()], value_required_str: str = Provide[Container.config.a.b.c.required().as_(str)], value_required_decimal: str = Provide[Container.config.a.b.c.required().as_(Decimal)], ): return ( value_int, + value_float, value_str, value_decimal, value_required, value_required_int, + value_required_float, value_required_str, value_required_decimal, ) diff --git a/tests/unit/samples/wiringstringidssamples/module.py b/tests/unit/samples/wiringstringidssamples/module.py index f83a0a27..019e290b 100644 --- a/tests/unit/samples/wiringstringidssamples/module.py +++ b/tests/unit/samples/wiringstringidssamples/module.py @@ -3,7 +3,17 @@ from decimal import Decimal from typing import Callable -from dependency_injector.wiring import inject, Provide, Provider, as_int, as_, required, invariant, provided +from dependency_injector.wiring import ( + inject, + Provide, + Provider, + as_int, + as_float, + as_, + required, + invariant, + provided, +) from .container import Container from .service import Service @@ -44,19 +54,23 @@ def test_function_provider(service_provider: Callable[..., Service] = Provider[' @inject def test_config_value( value_int: int = Provide['config.a.b.c', as_int()], + value_float: float = Provide['config.a.b.c', as_float()], value_str: str = Provide['config.a.b.c', as_(str)], value_decimal: Decimal = Provide['config.a.b.c', as_(Decimal)], value_required: str = Provide['config.a.b.c', required()], value_required_int: int = Provide['config.a.b.c', required().as_int()], + value_required_float: float = Provide['config.a.b.c', required().as_float()], value_required_str: str = Provide['config.a.b.c', required().as_(str)], value_required_decimal: str = Provide['config.a.b.c', required().as_(Decimal)], ): return ( value_int, + value_float, value_str, value_decimal, value_required, value_required_int, + value_required_float, value_required_str, value_required_decimal, ) diff --git a/tests/unit/wiring/test_wiring_py36.py b/tests/unit/wiring/test_wiring_py36.py index 064aed9b..fd08799b 100644 --- a/tests/unit/wiring/test_wiring_py36.py +++ b/tests/unit/wiring/test_wiring_py36.py @@ -120,19 +120,23 @@ class WiringTest(unittest.TestCase): def test_configuration_option(self): ( value_int, + value_float, value_str, value_decimal, value_required, value_required_int, + value_required_float, value_required_str, value_required_decimal, ) = module.test_config_value() self.assertEqual(value_int, 10) + self.assertEqual(value_float, 10.0) self.assertEqual(value_str, '10') self.assertEqual(value_decimal, Decimal(10)) self.assertEqual(value_required, 10) self.assertEqual(value_required_int, 10) + self.assertEqual(value_required_float, 10.0) self.assertEqual(value_required_str, '10') self.assertEqual(value_required_decimal, Decimal(10)) diff --git a/tests/unit/wiring/test_wiring_string_ids_py36.py b/tests/unit/wiring/test_wiring_string_ids_py36.py index b4d41b3b..0acc99ce 100644 --- a/tests/unit/wiring/test_wiring_string_ids_py36.py +++ b/tests/unit/wiring/test_wiring_string_ids_py36.py @@ -120,19 +120,23 @@ class WiringTest(unittest.TestCase): def test_configuration_option(self): ( value_int, + value_float, value_str, value_decimal, value_required, value_required_int, + value_required_float, value_required_str, value_required_decimal, ) = module.test_config_value() self.assertEqual(value_int, 10) + self.assertEqual(value_float, 10.0) self.assertEqual(value_str, '10') self.assertEqual(value_decimal, Decimal(10)) self.assertEqual(value_required, 10) self.assertEqual(value_required_int, 10) + self.assertEqual(value_required_float, 10.0) self.assertEqual(value_required_str, '10') self.assertEqual(value_required_decimal, Decimal(10)) From 43eb15ed65ed710d1ad09be1486d3cfa761ea097 Mon Sep 17 00:00:00 2001 From: Shubhendra Singh Chauhan Date: Thu, 25 Feb 2021 20:14:15 +0530 Subject: [PATCH 2/4] fix: code quality issues (#406) * Refactor unnecessary `else` / `elif` when `if` block has a `return` statement * Remove unused imports * Use literal syntax to create data structure * revert "remove unused import" --- src/dependency_injector/wiring.py | 11 +++++------ tests/unit/providers/test_callables_py2_py3.py | 2 +- tests/unit/providers/test_coroutines_py35.py | 2 +- tests/unit/providers/test_factories_py2_py3.py | 2 +- tests/unit/providers/test_list_py2_py3.py | 2 +- tests/unit/providers/test_resource_py35.py | 2 +- tests/unit/providers/test_singletons_py2_py3.py | 2 +- tests/unit/wiring/test_wiring_string_ids_py36.py | 7 +------ 8 files changed, 12 insertions(+), 18 deletions(-) diff --git a/src/dependency_injector/wiring.py b/src/dependency_injector/wiring.py index c7debfdf..96d1e238 100644 --- a/src/dependency_injector/wiring.py +++ b/src/dependency_injector/wiring.py @@ -111,21 +111,20 @@ class ProvidersMap: ) -> Optional[providers.Provider]: if isinstance(provider, providers.Delegate): return self._resolve_delegate(provider) - elif isinstance(provider, ( + if isinstance(provider, ( providers.ProvidedInstance, providers.AttributeGetter, providers.ItemGetter, providers.MethodCaller, )): return self._resolve_provided_instance(provider) - elif isinstance(provider, providers.ConfigurationOption): + if isinstance(provider, providers.ConfigurationOption): return self._resolve_config_option(provider) - elif isinstance(provider, providers.TypedConfigurationOption): + if isinstance(provider, providers.TypedConfigurationOption): return self._resolve_config_option(provider.option, as_=provider.provides) - elif isinstance(provider, str): + if isinstance(provider, str): return self._resolve_string_id(provider, modifier) - else: - return self._resolve_provider(provider) + return self._resolve_provider(provider) def _resolve_string_id( self, diff --git a/tests/unit/providers/test_callables_py2_py3.py b/tests/unit/providers/test_callables_py2_py3.py index 0e0168fa..dcee8478 100644 --- a/tests/unit/providers/test_callables_py2_py3.py +++ b/tests/unit/providers/test_callables_py2_py3.py @@ -69,7 +69,7 @@ class CallableTests(unittest.TestCase): provider = providers.Callable(_example) \ .add_args(1, 2) \ .set_args(3, 4) - self.assertEqual(provider.args, tuple([3, 4])) + self.assertEqual(provider.args, (3, 4)) def test_set_kwargs(self): provider = providers.Callable(_example) \ diff --git a/tests/unit/providers/test_coroutines_py35.py b/tests/unit/providers/test_coroutines_py35.py index a3697044..b0dbf491 100644 --- a/tests/unit/providers/test_coroutines_py35.py +++ b/tests/unit/providers/test_coroutines_py35.py @@ -87,7 +87,7 @@ class CoroutineTests(AsyncTestCase): provider = providers.Coroutine(_example) \ .add_args(1, 2) \ .set_args(3, 4) - self.assertEqual(provider.args, tuple([3, 4])) + self.assertEqual(provider.args, (3, 4)) def test_set_kwargs(self): provider = providers.Coroutine(_example) \ diff --git a/tests/unit/providers/test_factories_py2_py3.py b/tests/unit/providers/test_factories_py2_py3.py index b6587859..edf7de07 100644 --- a/tests/unit/providers/test_factories_py2_py3.py +++ b/tests/unit/providers/test_factories_py2_py3.py @@ -228,7 +228,7 @@ class FactoryTests(unittest.TestCase): provider = providers.Factory(Example) \ .add_args(1, 2) \ .set_args(3, 4) - self.assertEqual(provider.args, tuple([3, 4])) + self.assertEqual(provider.args, (3, 4)) def test_set_kwargs(self): provider = providers.Factory(Example) \ diff --git a/tests/unit/providers/test_list_py2_py3.py b/tests/unit/providers/test_list_py2_py3.py index d11222cf..e303745b 100644 --- a/tests/unit/providers/test_list_py2_py3.py +++ b/tests/unit/providers/test_list_py2_py3.py @@ -42,7 +42,7 @@ class ListTests(unittest.TestCase): provider = providers.List() \ .add_args(1, 2) \ .set_args(3, 4) - self.assertEqual(provider.args, tuple([3, 4])) + self.assertEqual(provider.args, (3, 4)) def test_clear_args(self): provider = providers.List() \ diff --git a/tests/unit/providers/test_resource_py35.py b/tests/unit/providers/test_resource_py35.py index 4b818198..b0943968 100644 --- a/tests/unit/providers/test_resource_py35.py +++ b/tests/unit/providers/test_resource_py35.py @@ -203,7 +203,7 @@ class ResourceTests(unittest.TestCase): provider = providers.Resource(init_fn) \ .add_args(1, 2) \ .set_args(3, 4) - self.assertEqual(provider.args, tuple([3, 4])) + self.assertEqual(provider.args, (3, 4)) def test_clear_args(self): provider = providers.Resource(init_fn) \ diff --git a/tests/unit/providers/test_singletons_py2_py3.py b/tests/unit/providers/test_singletons_py2_py3.py index 6cc4c3c3..4e36f926 100644 --- a/tests/unit/providers/test_singletons_py2_py3.py +++ b/tests/unit/providers/test_singletons_py2_py3.py @@ -190,7 +190,7 @@ class _BaseSingletonTestCase(object): provider = self.singleton_cls(Example) \ .add_args(1, 2) \ .set_args(3, 4) - self.assertEqual(provider.args, tuple([3, 4])) + self.assertEqual(provider.args, (3, 4)) def test_set_kwargs(self): provider = self.singleton_cls(Example) \ diff --git a/tests/unit/wiring/test_wiring_string_ids_py36.py b/tests/unit/wiring/test_wiring_string_ids_py36.py index 0acc99ce..42002372 100644 --- a/tests/unit/wiring/test_wiring_string_ids_py36.py +++ b/tests/unit/wiring/test_wiring_string_ids_py36.py @@ -1,15 +1,10 @@ -import contextlib from decimal import Decimal -import importlib import unittest from dependency_injector.wiring import ( wire, Provide, - Closing, - register_loader_containers, - unregister_loader_containers, -) + Closing) from dependency_injector import errors # Runtime import to avoid syntax errors in samples on Python < 3.5 From 95b0356edcea7c0f5f8a69377cd5166902ca6394 Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Thu, 25 Feb 2021 09:51:33 -0500 Subject: [PATCH 3/4] Update changelog --- docs/main/changelog.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/docs/main/changelog.rst b/docs/main/changelog.rst index cf3df9b7..5204dc35 100644 --- a/docs/main/changelog.rst +++ b/docs/main/changelog.rst @@ -10,6 +10,13 @@ follows `Semantic versioning`_ Development version ------------------- - Add tests for ``.as_float()`` modifier usage with wiring. +- Make refactoring of wiring module and tests. + See PR # `#406 `_. + Thanks to `@withshubh `_ for the contribution: + - Refactor unnecessary ``else`` / ``elif`` in ``wiring`` module when ``if`` block has a + return statement. + - Remove unused imports in tests. + - Use literal syntax to create data structure in tests. 4.26.0 ------ From 3cf14c139f702bea0355a955d5ce888aa8f0aeae Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Thu, 25 Feb 2021 09:52:24 -0500 Subject: [PATCH 4/4] Add @withshubh to the list of contributors --- CONTRIBUTORS.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 54b3d582..23e26315 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -15,3 +15,4 @@ Dependency Injector Contributors + RĂ¼diger Busche (JarnoRFB) + Dmitry Rassoshenko (rda-dev) + Fotis Koutoupas (kootoopas) ++ Shubhendra Singh Chauhan (withshubh)