Closed
Description
It seems that passing parameters to resource is not working for subclasses of resources.Resource
and resources.AsyncResource
. If run
# poc_task.py
from dependency_injector import resources
class PocTask(resources.Resource):
def __init__(self):
print("poc task init")
def init(self):
print("poc task start")
def shutdown(self, some):
print("poc task finish")
# contianers.py
from dependency_injector import containers, providers
from tasks.poc_task import PocTask
class Container(containers.DeclarativeContainer):
config = providers.Configuration()
config.from_yaml(config_path, required=True)
poc_task = providers.Resource(PocTask)
# Other dependencies
when PocTask
is instantiated it calls the constructor and poc task init
is printed. But if you try to add some additional arguments:
# poc_task.py
from dependency_injector import resources
class PocTask(resources.Resource):
def __init__(self, timeout: int):
print("poc task init")
def init(self):
print("poc task start")
def shutdown(self, some):
print("poc task finish")
# contianers.py
from dependency_injector import containers, providers
from tasks.poc_task import PocTask
class Container(containers.DeclarativeContainer):
config = providers.Configuration()
config.from_yaml(config_path, required=True)
poc_task = providers.Resource(PocTask, timeout=config.timeout.as_int())
# Other dependencies
it complains about calling PocTask
constructor:
TypeError: PocTask.__init__() missing 1 required positional argument: 'timeout'
Is it not implemented on purpose, or am I missing something?