domain.protocols.secrets_protocol¶
src.domain.protocols.secrets_protocol
¶
Secrets management protocol (port) for hexagonal architecture.
This protocol defines what the domain needs from a secrets management system. Infrastructure layer provides concrete implementations (adapters).
Protocol Pattern
- Domain defines the PORT (this protocol)
- Infrastructure implements ADAPTERS (EnvAdapter, AWSAdapter, VaultAdapter)
- Application uses protocol (backend-agnostic)
Classes¶
SecretsProtocol
¶
Bases: Protocol
Protocol for secrets management systems.
Applications are READ-ONLY consumers of secrets. Secret provisioning is an admin operation (Terraform, AWS CLI, web console).
Implementations
- EnvAdapter: Local development (.env files)
- AWSAdapter: Production (AWS Secrets Manager)
- VaultAdapter: Alternative (HashiCorp Vault)
Source code in src/domain/protocols/secrets_protocol.py
Functions¶
get_secret
¶
Get single secret value.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
secret_path
|
str
|
Path like 'database/url' or 'schwab/api_key'. |
required |
Returns:
| Type | Description |
|---|---|
Result[str, SecretsError]
|
Success(secret_value) if found. |
Result[str, SecretsError]
|
Failure(SecretsError) if not found or access denied. |
Source code in src/domain/protocols/secrets_protocol.py
get_secret_json
¶
Get secret as parsed JSON dictionary.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
secret_path
|
str
|
Path to JSON-formatted secret. |
required |
Returns:
| Type | Description |
|---|---|
Result[dict[str, str], SecretsError]
|
Success(parsed_json) if valid JSON. |
Result[dict[str, str], SecretsError]
|
Failure(SecretsError) if not found, access denied, or invalid JSON. |
Source code in src/domain/protocols/secrets_protocol.py
refresh_cache
¶
Clear cached secrets to reload after rotation.
Call this after rotating secrets in backend system. Next get_secret() call will fetch fresh value.