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

recursive_wire

Open lagunovartur opened this issue 5 months ago • 1 comments

Приветствую, хотел поинтересоваться почему в библиотеке нет рекурсивного связывания на подобие такого, это позволяет делать инъекции не от корня, а от ближайшего родителя:

Например: Так: @router.get("/test") @inject async def get_list(s3_manager = Depends(Provide[S3Container.manager])): pass

Вместо: @router.get("/test") @inject async def get_list(s3_client = Depends(Provide[AppContainer.infra.s3.manager])): pass

Рекурсивное связывание:

def recursive_wire(container, *args, **kwargs):
   
    container.wire(*args, **kwargs)

    for attr_name in dir(container):
        if attr_name.startswith('_') or attr_name == 'parent':
            continue
        attr = getattr(container, attr_name, None)
        if isinstance(attr, providers.Container):
            sub_container = attr() 
            recursive_wire(sub_container, *args, **kwargs)

lagunovartur avatar Sep 05 '24 20:09 lagunovartur