"""Declarative IoC containers inheritance example."""

import dependency_injector.containers as containers
import dependency_injector.providers as providers


class ContainerA(containers.DeclarativeContainer):
    """Example IoC container A."""

    provider1 = providers.Factory(object)


class ContainerB(ContainerA):
    """Example IoC container B."""

    provider2 = providers.Singleton(object)


# Making some asserts for `providers` attribute:
assert ContainerA.providers == dict(provider1=ContainerA.provider1)
assert ContainerB.providers == dict(provider1=ContainerA.provider1,
                                    provider2=ContainerB.provider2)

# Making some asserts for `cls_providers` attribute:
assert ContainerA.cls_providers == dict(provider1=ContainerA.provider1)
assert ContainerB.cls_providers == dict(provider2=ContainerB.provider2)

# Making some asserts for `inherited_providers` attribute:
assert ContainerA.inherited_providers == dict()
assert ContainerB.inherited_providers == dict(provider1=ContainerB.provider1)