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