diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c9e3485..38d8f5d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -991,71 +991,19 @@ def test_ignore_dependences(): Function as Dependency -```python -def get_user(session: Session, token: Token) -> Ignore[Any]: - ... -``` +a function with its return type Annotated by `Ignore` is considered a pure function dependency, instead of a factory. ```python -def validate_admin(user: Annotated[User, get_user]): +@dg.node +def get_user(session: Session, token: Token) -> Ignore[User]: ... ``` - \ No newline at end of file diff --git a/ididi/_type_resolve.py b/ididi/_type_resolve.py index 1b7c642d..bb0815f0 100644 --- a/ididi/_type_resolve.py +++ b/ididi/_type_resolve.py @@ -161,7 +161,7 @@ def resolve_factory(factory: Callable[..., T]) -> type[T]: should handle Annotate, Generator function, etc. """ - sig = get_typed_signature(factory, check_return=True) + sig = get_typed_signature(factory) dependent: type[T] = resolve_annotation(sig.return_annotation) return dependent diff --git a/tests/test_feat.py b/tests/test_feat.py index 00819a14..a0502f49 100644 --- a/tests/test_feat.py +++ b/tests/test_feat.py @@ -4,3 +4,40 @@ run test with: make feat """ +from typing import Annotated + +from ididi import Graph, Ignore + +from .test_data import Config, UserService + + +class User: + def __init__(self, name: str, role: str): + self.name = name + self.role = role + + +def get_user(config: Config) -> Ignore[User]: + assert isinstance(config, Config) + return User("user", "admin") + + +def validate_admin( + user: Annotated[User, get_user], service: UserService +) -> Ignore[str]: + assert user.role == "admin" + assert isinstance(service, UserService) + return "ok" + + +async def test_resolve_function(): + dg = Graph() + + user = dg.resolve(get_user) + assert isinstance(user, User) + + +def test_dg_resolve_params(): + dg = Graph() + + assert dg.resolve(validate_admin) == "ok"