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,
ConfigurationExportSelection,
ConfigurationPreflightContext,
ConfigurationProvider,
apply_configuration_package,
dry_run_configuration_package,
export_configuration_package,
@@ -992,22 +993,32 @@ def configuration_package_export_endpoint(
def _configuration_providers() -> tuple[object, ...]:
registry = get_registry()
if registry is not None and hasattr(registry, "has_capability") and registry.has_capability(ACCESS_CONFIGURATION_CAPABILITY):
capability = registry.capability(ACCESS_CONFIGURATION_CAPABILITY)
if capability is not None:
return (capability,)
return (SqlAccessConfigurationProvider(),)
providers: dict[str, ConfigurationProvider] = {}
if registry is not None and hasattr(registry, "capability_names"):
for capability_name in registry.capability_names():
if not capability_name.endswith(".configuration"):
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()
installed_modules: dict[str, str] = {"access": "0.1.6"}
capabilities = {CONFIGURATION_PROVIDER_CAPABILITY, ACCESS_CONFIGURATION_CAPABILITY}
if registry is not None and hasattr(registry, "manifests"):
manifests = registry.manifests()
installed_modules = {manifest.id: manifest.version for manifest in manifests}
if hasattr(registry, "has_capability") and registry.has_capability(ACCESS_CONFIGURATION_CAPABILITY):
capabilities.add(ACCESS_CONFIGURATION_CAPABILITY)
if hasattr(registry, "capability_names"):
capabilities.update(registry.capability_names())
return ConfigurationPreflightContext(
tenant_id=tenant_id or principal.tenant_id,
operator_user_id=principal.user.id,