app.catalog_config¶
Load and validate catalog.yaml: sources, approval policy and RBAC.
The file (ADRIANO_CONFIG_FILE) is read once at startup; changes need
a restart. Validation never aborts the whole load:
An invalid
sourcesentry becomes a disabled registration with a readableconfig_error; the other registrations keep working. An entry without a usableid(or with a duplicate one) cannot be stored and is only reported. Type-specific settings are validated by the source type registry (app.sources.registry), i.e. at the adapter boundary. Seeapp.source_config.A missing
approval_policyyieldsPolicyStatus.MISSING, an invalid onePolicyStatus.INVALID, each with a message. Neither is ever treated as “approval not required”.An invalid
rbacsection grants no permissions.A missing or unparseable file yields an empty configuration with
ConfigFileStatus.MISSING/ConfigFileStatus.INVALID.
Every finding is a ConfigProblem (check-config exits
non-zero when one has error severity).
Secrets are referenced by environment variable name (for example
push_tokens_env, GitLab token_env). Values are resolved from the
injected environment mapping, held as pydantic.SecretStr, never
logged, never part of messages and never stored in the registration
config.
Public API: ConfigFileStatus, Permission,
PolicyConfig, RbacConfig, CatalogConfig,
load_catalog_config(), parse_catalog_config(), and
re-exported from app.source_config: ConfigProblem,
SourceRegistration.
- class app.catalog_config.CatalogConfig(*, path, file_status, sources=(), policy=PolicyConfig(status=<PolicyStatus.MISSING: 'missing'>, policy=None, message=None), rbac=RbacConfig(roles={}), problems=())¶
Bases:
objectThe loaded configuration.
- Parameters:
path (
str) – Configuration file path as given.file_status (
ConfigFileStatus) – Whether the file was read and parsed.sources (
tuple[SourceRegistration,...]) – Registrations in configuration order.policy (
PolicyConfig) – Approval policy status.rbac (
RbacConfig) – Role mapping.problems (
tuple[ConfigProblem,...]) – All findings, in file order.
- file_status: ConfigFileStatus¶
- sources: tuple[SourceRegistration, ...]¶
- policy: PolicyConfig¶
- rbac: RbacConfig¶
- problems: tuple[ConfigProblem, ...]¶
- property has_errors: bool¶
Tell whether any problem has error severity.
- Returns:
Trueif at least one error was found.
- registration_configs()¶
Build the registration values to sync into storage.
- Return type:
- Returns:
One value per registration.
- class app.catalog_config.ConfigFileStatus(*values)¶
Bases:
StrEnumWhether the configuration file could be read and parsed.
- OK = 'ok'¶
- MISSING = 'missing'¶
- INVALID = 'invalid'¶
- class app.catalog_config.ConfigProblem(severity, location, message)¶
Bases:
objectOne configuration finding.
- Parameters:
- class app.catalog_config.Permission(*values)¶
Bases:
StrEnumPermissions an IdP role can grant (review comes from the policy).
- READ = 'read'¶
- OPERATE = 'operate'¶
- class app.catalog_config.PolicyConfig(status, policy=None, message=None)¶
Bases:
objectStatus of the global approval policy.
- Parameters:
status (
PolicyStatus) – Configured, missing or invalid.
- status: PolicyStatus¶
- class app.catalog_config.RbacConfig(roles=dict())¶
Bases:
objectIdP role -> permissions mapping.
- Parameters:
roles (
Mapping[str,frozenset[Permission]]) – Permissions granted per role name.
- roles: Mapping[str, frozenset[Permission]]¶
- permissions_for(roles)¶
Collect the permissions granted by a caller’s roles.
- Parameters:
- Return type:
- Returns:
The union of granted permissions.
- class app.catalog_config.SourceRegistration(*, id, type, position, config, enabled, config_error=None, config_error_code=None, path='doc/decisions', published_ref='', intake=frozenset({}), push_tokens=(), binding=None, warnings=())¶
Bases:
objectOne configured source registration.
- Parameters:
id (
str) – Stable registration id.type (
str) – Source type name.position (
int) – Index in the configuration (ownership order).config (
JsonObject) – Non-secret settings as stored in the database.enabled (
bool) –Falsewhen the entry is invalid.config_error_code (
ConfigErrorCode|None) – Stable code of config_error.path (
str) – ADR path inside each project.published_ref (
str) – Configured published ref.intake (
frozenset[IntakeKind]) – Enabled intake mechanisms.push_tokens (
tuple[SecretStr,...]) – Resolved CI push tokens (never logged).binding (
SourceBinding|None) – Adapter factory;Nonewhen disabled.warnings (
tuple[str,...]) – Non-fatal findings for this registration.
- config: JsonObject¶
- config_error_code: ConfigErrorCode | None¶
- intake: frozenset[IntakeKind]¶
- binding: SourceBinding | None¶
- property pollable: bool¶
Tell whether polling may run for this registration.
- Returns:
Trueif enabled withpollintake.
- to_storage()¶
Convert to the value synced into
source_registration.- Return type:
- Returns:
The registration config (no secrets).
- app.catalog_config.load_catalog_config(path, *, env, registry)¶
Load and validate
catalog.yaml. Never raises for bad content.- Parameters:
- Return type:
- Returns:
The configuration with all problems found.
- app.catalog_config.parse_catalog_config(data, *, path, env, registry, base_dir)¶
Validate an already parsed configuration mapping.
- Parameters:
- Return type:
- Returns:
The configuration with all problems found.