diff --git a/src/govoplan_access/backend/api/v1/routes.py b/src/govoplan_access/backend/api/v1/routes.py index 92749b8..3bb67f8 100644 --- a/src/govoplan_access/backend/api/v1/routes.py +++ b/src/govoplan_access/backend/api/v1/routes.py @@ -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,