infrastructure.secrets.base_adapter¶
src.infrastructure.secrets.base_adapter
¶
Base secrets adapter with shared functionality.
Provides common implementation of get_secret_json() to avoid duplication across EnvAdapter and AWSAdapter.
Pattern: Composition over inheritance - adapters can inherit or delegate.
Classes¶
BaseSecretsAdapter
¶
Base adapter with shared secrets functionality.
Provides shared implementation of get_secret_json() that delegates to the concrete adapter's get_secret() method.
Subclasses must implement
- get_secret(secret_path: str) -> Result[str, SecretsError]
- refresh_cache() -> None
Source code in src/infrastructure/secrets/base_adapter.py
Functions¶
get_secret
¶
Get secret value (must be implemented by subclass).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
secret_path
|
str
|
Path to secret. |
required |
Returns:
| Type | Description |
|---|---|
Result[str, SecretsError]
|
Result with secret value or SecretsError. |
Source code in src/infrastructure/secrets/base_adapter.py
get_secret_json
¶
Get secret as parsed JSON dictionary.
Shared implementation that: 1. Calls subclass's get_secret() to fetch value 2. Parses JSON 3. Returns parsed dict or error
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
secret_path
|
str
|
Path to JSON-formatted secret. |
required |
Returns:
| Type | Description |
|---|---|
Result[dict[str, Any], SecretsError]
|
Success(parsed_dict) if valid JSON (dict[str, Any]). |
Result[dict[str, Any], SecretsError]
|
Failure(SecretsError) if not found, access denied, or invalid JSON. |
Example
adapter = EnvAdapter() # or AWSAdapter() result = adapter.get_secret_json("config/json")
Success({"key": "value"})¶
Source code in src/infrastructure/secrets/base_adapter.py
refresh_cache
¶
Clear cache (must be implemented by subclass).
Implementation depends on adapter strategy: - EnvAdapter: no-op (env vars always fresh) - AWSAdapter: clear in-memory cache