python-dependency-injector icon indicating copy to clipboard operation
python-dependency-injector copied to clipboard

Providers - pass config dict as kwargs to provided class

Open frenzyk opened this issue 6 months ago • 1 comments
trafficstars

Is there any way to pass config dict as **kwargs to my class? There is 2 problem I try to solve:

  1. Too many args will lead to an additional manual labor of mapping config
  2. in example below session_db has a default, which become useless as if not provided in config it will be None.

from dependency_injector import containers, providers

class Client:
    def __init__(
            self,
            api_id: int,
            session_db: str | Path = "some default value",
    ):
        self.api_id = api_id
        self.session_db = session_db


class ApplicationContainer(containers.DeclarativeContainer):
    config = providers.Configuration()

    my_client = providers.Singleton(
        Client,
        config.client.api_id,
        config.client.session_db,
    )


container = ApplicationContainer()
container.config.from_dict(
    {
        "client": {
             "api_id": "id",
         },
    },
)
my_client = container.my_client()
assert my_client.session_db == "some default value"

What I want is something like


class ApplicationContainer(containers.DeclarativeContainer):
    config = providers.Configuration()

    my_client = providers.Singleton(
        Client,
        **config.client
    )

frenzyk avatar May 10 '25 14:05 frenzyk