from dependency_injector import containers, providers from .database_partition_plan import DatabasePartitionPlan from .group_partition_plan import GroupPartitionPlan from .partition_plan import PartitionPlan from .table_partition_plan import TablePartitionPlan def _create_plan_by_type(plan_type, meta, plan_factory) -> PartitionPlan: return plan_factory(plan_type, meta) class PlanContainer(containers.DeclarativeContainer): plan_type = providers.Configuration() meta = providers.Dependency() plan_agg = providers.FactoryAggregate( table=providers.Factory(TablePartitionPlan), group=providers.Factory(GroupPartitionPlan), database=providers.Factory(DatabasePartitionPlan), ) plan = providers.Singleton( _create_plan_by_type, plan_type, meta, plan_agg, )