From cdfc5b72959ec9b0c536506c89830ee96728971d Mon Sep 17 00:00:00 2001 From: Udi Shalev Date: Sat, 18 May 2024 18:52:16 +0300 Subject: [PATCH] change _AutoWire class and AutoWire to _Injector and inject --- README.md | 10 +++++----- examples/example1.py | 6 +++--- examples/example2.py | 4 ++-- pyinject/__init__.py | 4 ++-- pyinject/decorators.py | 6 +++--- pyinject/overrider.py | 4 ++-- tests/test_autowire.py | 4 ++-- tests/test_dependencies_manager.py | 6 +++--- tests/test_dependency_overrider.py | 8 ++++---- 9 files changed, 26 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index f6fcb1a..162959f 100644 --- a/README.md +++ b/README.md @@ -49,11 +49,11 @@ Lets say we want to use these services in a function. ```python from typing import Annotated -from pyinject import AutoWired, Depends, execute +from pyinject import inject, Depends, execute from .services import ServiceA, ServiceB -@AutoWired() +@inject() def func(service_a: Annotated[ServiceA, Depends()], service_b: Annotated[ServiceB, Depends()]): print(service_a.hello()) print(service_b.hello()) @@ -62,7 +62,7 @@ if __name__ == "__main__": execute(func) ``` -We have to use the `AutoWired` decorator to tell the dependency injector that this function should be executed with all its dependencies injected. +We have to use the `inject` decorator to tell the dependency injector that this function should be executed with all its dependencies injected. and we have to use the `Annotated` type hint to tell the dependency injector what type of dependency we want to inject. @@ -83,11 +83,11 @@ Otherwise, we can provide a provider function to the `Depends` class, which will ```python from typing import Annotated -from pyinject import AutoWired, Depends, execute +from pyinject import inject, Depends, execute from .services import ServiceC, get_service_c -@AutoWired() +@inject() def func_2(service_c: Annotated[ServiceC, Depends(get_service_c)]): print(service_c.hello()) diff --git a/examples/example1.py b/examples/example1.py index 8644387..e50c826 100644 --- a/examples/example1.py +++ b/examples/example1.py @@ -1,7 +1,7 @@ from dataclasses import dataclass from typing import Annotated -from pyinject import AutoWired, Depends, execute +from pyinject import inject, Depends, execute @dataclass @@ -28,7 +28,7 @@ class EmployeeService: Employee Service """ - @AutoWired() + @inject() def __init__( self, _employee_repository: Annotated[EmployeeRepository, Depends()], @@ -41,7 +41,7 @@ def get_employee(self) -> Employee: return self._employee_repository.get_employee() -@AutoWired() +@inject() def main( employee_service: Annotated[EmployeeService, Depends()], employee_birthday_service: Annotated[EmployeeBirthdayService, Depends()], diff --git a/examples/example2.py b/examples/example2.py index 957297a..ad7c54c 100644 --- a/examples/example2.py +++ b/examples/example2.py @@ -4,7 +4,7 @@ from typing_extensions import override -from pyinject import AutoWired, Depends, execute as _ +from pyinject import inject, Depends, execute as _ class Country(Enum): @@ -50,7 +50,7 @@ def get_strategy(self, country: Country) -> SalaryStrategy: raise ValueError(f"No salary strategy for country: {country}") -@AutoWired() +@inject() def calculate_employee_salary( employee: Employee, strategy_factory: Annotated[CalculateSalaryStrategyFactory, Depends()], diff --git a/pyinject/__init__.py b/pyinject/__init__.py index bfcc1a6..d91b224 100644 --- a/pyinject/__init__.py +++ b/pyinject/__init__.py @@ -1,4 +1,4 @@ -from .decorators import AutoWired +from .decorators import inject from .functions import Depends, create_manager, execute, get_default_manager -__all__ = ["AutoWired", "Depends", "execute", "get_default_manager", "create_manager"] +__all__ = ["inject", "Depends", "execute", "get_default_manager", "create_manager"] diff --git a/pyinject/decorators.py b/pyinject/decorators.py index 9b39234..755931e 100644 --- a/pyinject/decorators.py +++ b/pyinject/decorators.py @@ -9,7 +9,7 @@ P = ParamSpec("P") -class _AutoWired: +class _Injector: """A class that resolves dependencies from a callable and injects them to arguments Annotations""" def __init__(self, manager: DependenciesManager) -> None: @@ -80,7 +80,7 @@ def _inject_dependencies_to_kwargs( return new_kwargs -def AutoWired(*, manager: DependenciesManager = default_manager) -> Callable[[Callable[P, R]], Callable[P, R]]: # noqa: N802 +def inject(*, manager: DependenciesManager = default_manager) -> Callable[[Callable[P, R]], Callable[P, R]]: # noqa: N802 """ A decorator that resolves dependencies from a callable and injects them to arguments Annotations @@ -93,4 +93,4 @@ def AutoWired(*, manager: DependenciesManager = default_manager) -> Callable[[Ca Callable[[Callable[P, R]], Callable[P, R]]: A decorator that resolves dependencies """ - return _AutoWired(manager=manager) + return _Injector(manager=manager) diff --git a/pyinject/overrider.py b/pyinject/overrider.py index a714029..13d0439 100644 --- a/pyinject/overrider.py +++ b/pyinject/overrider.py @@ -1,6 +1,6 @@ import typing -from .decorators import AutoWired, P, R +from .decorators import inject, P, R from .manager import DependenciesManager, OverridesMapping, default_manager @@ -26,4 +26,4 @@ def execute(self, func: typing.Callable[P, R], *args, **kwargs) -> R: Resolving the dependencies from the manager provided in the constructor. """ - return AutoWired(manager=self.manager)(func)(*args, **kwargs) # type: ignore reportCallIssue + return inject(manager=self.manager)(func)(*args, **kwargs) # type: ignore reportCallIssue diff --git a/tests/test_autowire.py b/tests/test_autowire.py index 413bc3f..270f7d3 100644 --- a/tests/test_autowire.py +++ b/tests/test_autowire.py @@ -1,6 +1,6 @@ from typing import Annotated -from pyinject import AutoWired, Depends +from pyinject import inject, Depends def foo(): @@ -11,7 +11,7 @@ def bar(): return 2 -@AutoWired() +@inject() def func(foo: Annotated[int, Depends(foo)], bar: Annotated[int, Depends(bar)]): return foo + bar diff --git a/tests/test_dependencies_manager.py b/tests/test_dependencies_manager.py index c556ad9..fe581d7 100644 --- a/tests/test_dependencies_manager.py +++ b/tests/test_dependencies_manager.py @@ -3,7 +3,7 @@ import pytest -from pyinject.decorators import AutoWired +from pyinject.decorators import inject from pyinject.functions import execute, get_default_manager from pyinject.manager import DependenciesManager, OverridesMapping, _Dependency @@ -129,7 +129,7 @@ def test_override_global_dependency_annotation__dependency_provider() -> None: def dependency() -> Literal["dependency_value"]: return "dependency_value" - @AutoWired() + @inject() def func(my_dependency: str) -> str: return my_dependency @@ -150,7 +150,7 @@ class MyDependency(ADependency): def hello(self) -> str: return "dependency_value" - @AutoWired() + @inject() def func(my_dependency: ADependency) -> str: return my_dependency.hello() diff --git a/tests/test_dependency_overrider.py b/tests/test_dependency_overrider.py index a82f88f..93d759e 100644 --- a/tests/test_dependency_overrider.py +++ b/tests/test_dependency_overrider.py @@ -2,7 +2,7 @@ import pytest -from pyinject import AutoWired, Depends, create_manager +from pyinject import inject, Depends, create_manager from pyinject import execute as _ from pyinject.manager import DependenciesManager from pyinject.overrider import DependencyOverrider @@ -25,7 +25,7 @@ def manager() -> DependenciesManager: return create_manager() -@AutoWired() +@inject() def func(foo: Annotated[int, Depends(foo)], bar: Annotated[int, Depends(bar)]) -> int: return foo + bar @@ -33,7 +33,7 @@ def func(foo: Annotated[int, Depends(foo)], bar: Annotated[int, Depends(bar)]) - test_manager = create_manager() -@AutoWired(manager=test_manager) +@inject(manager=test_manager) def func2(foo: Annotated[int, Depends(foo)], bar: Annotated[int, Depends(bar)]) -> int: return foo + bar @@ -75,7 +75,7 @@ def test_autowired__overriding_manager_overriding_dependency(manager: Dependenci def test_autowired__overriding_manager_overriding_dependency_nested() -> None: """Executing function in isolation with overridden manager""" - @AutoWired() + @inject() def func_nested(foo: Annotated[int, Depends(foo)], func: Annotated[int, Depends(func)]) -> int: return foo + func