aeat.adapters.persistence.storage.errors module¶
Storage-layer exceptions.
All storage errors inherit from core.errors.AeatError so callers can
catch domain-wide failures with a single base class.
The class tree:
StorageError— base for every storage error.PersistenceError— base for the at-rest crypto, secret store, blob store, envelope, file lock, path containment, and audit-redaction surfaces. Subclass ofStorageErrorso existing catchers continue to work.
- exception SecureStorageError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
AeatErrorBase class for secure-storage failures.
This named base keeps the encrypted persistence, secret-store, bucket-session, and per-bucket lifecycle surfaces catchable as one family while still deriving from the central AEAT error registry.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception StorageError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
SecureStorageErrorBase class for every error raised by
adapters.persistence.storage.- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception RepositoryError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
StorageErrorRaised when a repository operation fails (not-found, integrity, etc.).
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception RepositorySetupError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
RepositoryErrorRaised when a concrete repository subclass is missing a required class attribute.
Programming-contract guard: the attribute must be declared on the subclass before instantiation. Unlike a plain
TypeError, this error is enrolled in the AEAT error registry so it produces a structured envelope rather than an opaque interpreter-level exception.- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception SecureObjectRevisionConflictError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
RepositoryErrorRaised when a revision-aware secure-object write sees a stale revision.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception PersistenceError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
StorageErrorBase class for governed-persistence error subtypes.
Errors raised by the at-rest crypto primitives, the secret store, the encrypted blob store, the schema-version envelope, the file-lock helper, the path containment helper, and the audit-sink redaction contract all inherit from this class.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception StorageValidationError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
PersistenceError,ValueErrorRaised when a storage parameter fails validation (e.g. key length).
Inherits from both
PersistenceErrorandValueErrorto remain compatible with Pydantic’s validator-failure contract while allowing catch-allStorageErrorhandlers to detect integrity failures.- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- storage_validation_error(message)[source]¶
Build a
StorageValidationErrorcarrying the shared integrity message key.Single canonical factory for the storage-validation error that the persistence-storage submodules (crypto, envelope, runtime, secret store, and the master-key helpers) previously each declared identically.
- Return type:
- Parameters:
message (str)
- exception EncryptionError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
PersistenceErrorBase class for AEAD encryption / decryption failures.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception DecryptionError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
EncryptionErrorRaised when AEAD decryption fails (tag mismatch, malformed input).
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception SecureObjectUnreadableError(namespace, row_id, *, cause=None)[source]¶
Bases:
DecryptionErrorRaised when one stored secure object cannot be decrypted under the current master key.
Distinct from the generic
DecryptionErrorso iterator-shaped consumers can surface a structured per-row failure (namespace, row id, underlying cause) without aborting the iteration. The plaintext bound to such a row is cryptographically unrecoverable from this process: the master key under which it was sealed is no longer available.- Parameters:
namespace (str)
row_id (int)
cause (BaseException | None)
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception KeyDerivationError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
EncryptionErrorRaised when a key-derivation step fails.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception NonceCollisionError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
EncryptionErrorRaised on a defensive nonce-uniqueness invariant violation.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception SecretStoreError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
PersistenceErrorBase class for secret-store I/O failures.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception SessionExpiredError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
SecretStoreErrorRaised when the active
BucketSessionhas crossed its idle deadline.The session was opened earlier in the process lifetime but the operator did not act before the configured idle-lock window elapsed. The session is sealed; the operator must re-activate by running
aeat config switch NAME(or a subsequent bootstrap-exempt verb that opens a fresh session).- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception PassphraseTooShortError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
SecretStoreErrorRaised when an operator-supplied passphrase falls below the NIST floor.
NIST SP 800-63B §5.1.1.1 mandates that verifiers SHALL require user- chosen memorized secrets to be at least 8 characters in length. The
FileFallbackMasterKeyProviderrejects shorter passphrases at resolution time.- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
Bases:
SecretStoreErrorRaised when the OS keychain backend is unusable.
Either no backend is registered (e.g. headless Linux without libsecret), the backend rejected the operation, or the configured backend is the no-op
nullkeyring.- Parameters:
- Return type:
None
Bases:
SecretStoreErrorRaised when no master key can be acquired from any provider.
- Parameters:
- Return type:
None
- exception MasterKeyKdfVersionError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
MasterKeyUnavailableErrorRaised when the on-disk
master.kdfdeclares a KDF version this build cannot consume.The substrate gates the master.kdf parameters by version. Mismatch means the operator’s passphrase may be correct, but the on-disk parameters do not match this build’s supported key-derivation contract.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception MasterKeyKeychainLockedError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
MasterKeyUnavailableErrorRaised when the OS keychain is reachable but the entry is locked.
Distinct from
KeyringUnavailableError(no usable backend at all). This class signals a recoverable state: the operator unlocks the OS keychain (Touch ID / Windows Hello / desktop-wallet unlock) and retries. The CLI’s error envelope renders the actionable hint.- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception MasterKeyPassphraseMismatchError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
MasterKeyUnavailableErrorRaised when the file-fallback passphrase does not unwrap
master.key.Recoverable by re-entering the passphrase. If the passphrase has been forgotten, the operator can use
aeat config recoverto re-mint the master key from a recovery-key backup. The CLI’s error envelope distinguishes this case fromMasterKeyMaterialMissingErrorso retries do not waste backoff budget on missing-file errors.- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception MasterKeyMaterialMissingError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
MasterKeyUnavailableErrorRaised when no master-key material exists at all.
Neither the keyring entry nor the file-fallback artefacts (
master.key/master.kdf/salt) are present. The substrate has not been provisioned. The operator’s actionable next step isaeat config profile create NAMEor, if a recovery key is available,aeat config recover.Raised by canonical read paths to distinguish “not provisioned” from “wrong passphrase” without minting key material. Explicit profile creation is responsible for provisioning; ordinary load paths fail closed with this class when material is absent.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception UnsecuredModeRefusedError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
SecretStoreErrorRaised when the unsecured backend is requested without proper gating.
Two refusal classes:
The unsecured backend was selected (
aeat_secret_store_backend=unsecured) but the operator did not setAEAT_ALLOW_UNENCRYPTED=1. The hostile- named env var is the legible-and-embarrassing opt-out gate.The unsecured backend is active AND the operator profile carries a real NIF/NIE/CIF (NIF-canary). Real tax data is incompatible with a published deterministic master key; the substrate refuses to write such records into the unsecured store.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception ClassificationError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
PersistenceErrorRaised when a record’s declared sensitivity class is incompatible with its repository.
Example: writing a CORPUS-class blob through the encrypted-blob path, or loading an envelope under a different classification than the one persisted on disk.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception EnvelopeVersionError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
PersistenceErrorRaised when an on-disk envelope version differs from the consumer contract.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception PathContainmentError(message=None, *, context=None)[source]¶
Bases:
PersistenceError,ValueErrorRaised when a computed path escapes its configured root directory.
- code: ClassVar[ErrorCode]¶
- exception BlobNotFoundError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
PersistenceErrorRaised when a blob lookup misses on the encrypted blob store.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception BlobIntegrityError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
PersistenceErrorRaised when a blob’s on-disk SHA-256 disagrees with its manifest.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception SecretNotFoundError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
SecretStoreErrorRaised when a secret-store
getdoes not find a record for the requested key.- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception SecretAlreadyExistsError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
SecretStoreErrorRaised when a secret-store
putwould overwrite an existing key withoutoverwrite=True.- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception RetentionPolicyError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
PersistenceErrorRaised when a record’s retention metadata violates its classification policy.
- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶
- exception NamespaceRegistryError(message=None, *, context=None, suggestion=None, translated_message=None)[source]¶
Bases:
StorageError,ValueErrorRaised when a namespace-registry key or definition violates a boot-time invariant.
Fires from Pydantic field and model validators on
SecureObjectNamespaceDefinition,StoragePathDefinition, andStorageHierarchyRegistrywhen a registry key, namespace slug, path segment, or uniqueness constraint is violated at construction time. Inherits fromStorageErrorand ultimately fromAeatErrorso callers can catch it without importing Pydantic internals.Because these validators are called by Pydantic during model construction the exception propagates wrapped inside a
pydantic.ValidationErrorwhen raised from a field validator; direct callers ofStorageHierarchyRegistrymodel validators receive the rawNamespaceRegistryError.- Parameters:
- Return type:
None
- code: ClassVar[ErrorCode]¶