Discover module configuration providers dynamically
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user