Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce functional deps #15

Open
maldoinc opened this issue Dec 21, 2023 · 1 comment
Open

Introduce functional deps #15

maldoinc opened this issue Dec 21, 2023 · 1 comment
Labels
documentation Improvements or additions to documentation

Comments

@maldoinc
Copy link
Owner

They can ask for dependencies as usual and return a function that will perform the task.

@container.functional
def greeter_factory(translator_service: TranslatorService, other_service ...) -> Callable...
    def greeter(name: str, locale: str = 'en_GB') -> str:
        return ...

    return greeter

@container.autowire
def target(greeter: Annotated[Callable..., Wire(fn=greeter_factory))
    ...
@maldoinc maldoinc added the enhancement New feature or request label Dec 21, 2023
@maldoinc
Copy link
Owner Author

maldoinc commented Jan 2, 2025

This is doable now via factories. Ticket is about updating docs.

from typing_extensions import Protocol


class Greeter(Protocol):
    def __call__(self, name: str) -> str:
        raise NotImplementedError


@service
def greeter_factory() -> Greeter:
    def _greeter(name: str) -> str:
        return f"Hi {name}"

    return _greeter


def target(greeter: Greeter) -> None: ...

@maldoinc maldoinc added documentation Improvements or additions to documentation and removed enhancement New feature or request labels Feb 23, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

1 participant