Discover module configuration providers dynamically

This commit is contained in:
2026-07-31 19:40:13 +02:00
parent aeda457fb1
commit e58dcbdd7b
+19 -8
View File
@@ -146,6 +146,7 @@ from govoplan_core.core.configuration_packages import (
CONFIGURATION_PROVIDER_CAPABILITY, CONFIGURATION_PROVIDER_CAPABILITY,
ConfigurationExportSelection, ConfigurationExportSelection,
ConfigurationPreflightContext, ConfigurationPreflightContext,
ConfigurationProvider,
apply_configuration_package, apply_configuration_package,
dry_run_configuration_package, dry_run_configuration_package,
export_configuration_package, export_configuration_package,
@@ -992,22 +993,32 @@ def configuration_package_export_endpoint(
def _configuration_providers() -> tuple[object, ...]: def _configuration_providers() -> tuple[object, ...]:
registry = get_registry() registry = get_registry()
if registry is not None and hasattr(registry, "has_capability") and registry.has_capability(ACCESS_CONFIGURATION_CAPABILITY): providers: dict[str, ConfigurationProvider] = {}
capability = registry.capability(ACCESS_CONFIGURATION_CAPABILITY) if registry is not None and hasattr(registry, "capability_names"):
if capability is not None: for capability_name in registry.capability_names():
return (capability,) if not capability_name.endswith(".configuration"):
return (SqlAccessConfigurationProvider(),) continue
capability = registry.capability(capability_name)
if isinstance(capability, ConfigurationProvider):
providers[capability.module_id] = capability
providers.setdefault("access", SqlAccessConfigurationProvider())
return tuple(providers[module_id] for module_id in sorted(providers))
def _configuration_context(principal: ApiPrincipal, *, tenant_id: str | None = None, supplied_data: dict[str, Any] | None = None) -> ConfigurationPreflightContext: def _configuration_context(
principal: ApiPrincipal,
*,
tenant_id: str | None = None,
supplied_data: dict[str, Any] | None = None,
) -> ConfigurationPreflightContext:
registry = get_registry() registry = get_registry()
installed_modules: dict[str, str] = {"access": "0.1.6"} installed_modules: dict[str, str] = {"access": "0.1.6"}
capabilities = {CONFIGURATION_PROVIDER_CAPABILITY, ACCESS_CONFIGURATION_CAPABILITY} capabilities = {CONFIGURATION_PROVIDER_CAPABILITY, ACCESS_CONFIGURATION_CAPABILITY}
if registry is not None and hasattr(registry, "manifests"): if registry is not None and hasattr(registry, "manifests"):
manifests = registry.manifests() manifests = registry.manifests()
installed_modules = {manifest.id: manifest.version for manifest in manifests} installed_modules = {manifest.id: manifest.version for manifest in manifests}
if hasattr(registry, "has_capability") and registry.has_capability(ACCESS_CONFIGURATION_CAPABILITY): if hasattr(registry, "capability_names"):
capabilities.add(ACCESS_CONFIGURATION_CAPABILITY) capabilities.update(registry.capability_names())
return ConfigurationPreflightContext( return ConfigurationPreflightContext(
tenant_id=tenant_id or principal.tenant_id, tenant_id=tenant_id or principal.tenant_id,
operator_user_id=principal.user.id, operator_user_id=principal.user.id,