ets-labs/python-dependency-injector

__getattr__ typing silences legitimate issues

Opened this issue · 1 comments

https://github.com/ets-labs/python-dependency-injector/blob/master/src/dependency_injector/containers.pyi#L59

Having

Container:
    
    def __getattr__(self, name: str) -> Provider: ...

in stubs silences cases, when container does not have particular attribute at-all. In my current codebase, I add snippet:

if typing.TYPE_CHECKING:
    from dependency_injector.containers import DeclarativeContainer as DC
    class DeclarativeContainer(DC):
        def __getattr__(self, name: str) -> typing.Never: ...
else:
    from dependency_injector.containers import DeclarativeContainer

to work around it.

Is it necessary to have this method typed like that?

Is it necessary to have this method typed like that?

This is necessary for DynamicContainer to have these, but for DeclarativeContainer it does not make much sense.

This looks fixable, I'll see what can be done here.