Source code for aeat.adapters.outbound.storage._errors
"""Typed exception hierarchy for the storage provider abstraction.Provider and remote-mirror failures raised by:class:`adapters.outbound.storage.StorageProvider` implementations usesubclasses of :class:`OutboundStorageError` so the application layer's synccoordinator can dispatch on the concrete failure mode without parsing upstreamerror strings. Each public leaf binds to a stable:class:`core.errors.ErrorCode` through:mod:`core.errors.registry` so the CLI taxonomy stays explicit.:class:`StorageCorruptionError` is the deliberate exception: it derives from:class:`core.errors.CoreError` because it represents structurally invalidsidecar metadata, not a remote-provider transport, quota, permission, or mirrorfailure.The `Outbound` prefix disambiguates this hierarchy from the persistenceside :class:`adapters.persistence.storage.StorageError`, whichcovers at-rest persistence and has a different parent chain.See Also: :class:`adapters.outbound.storage.StorageProvider` Provider Protocol whose implementations raise this hierarchy. :class:`adapters.outbound.storage.ProviderObjectMetadata` Boundary record paired with integrity and corruption checks."""from__future__importannotationsfrom....core.errorsimportAeatError,CoreError
[docs]classOutboundStorageError(AeatError):"""Base class for every outbound storage-provider failure."""
[docs]classOutboundStorageValidationError(OutboundStorageError,ValueError):"""Raised when storage operation parameters fail validation. Inherits from :class:`ValueError` to remain compatible with pydantic validators while staying catchable as :class:`OutboundStorageError`. """
[docs]classOutboundStorageNotFoundError(OutboundStorageError):"""Raised when a requested object or namespace does not exist."""
[docs]classOutboundStorageConflictError(OutboundStorageError):"""Raised when a put / move / rename collides with an existing object."""
[docs]classOutboundStoragePermissionError(OutboundStorageError):"""Raised when the active credentials lack the required scope or grant."""
[docs]classOutboundStoragePathTooLongError(OutboundStorageError):"""Raised when a resolved on-disk path exceeds the platform's path-length ceiling. Classified via :func:`core.paths.is_windows_long_path_error` from a caught ``WinError 3`` / ``WinError 206`` on legacy (non long-path-aware) Windows workstations. Distinct from :class:`OutboundStorageConflictError` so the CLI surfaces the actual cause (a storage root too deep for the ``MAX_PATH`` ceiling) instead of a generic write-conflict message. """
[docs]classOutboundStorageQuotaError(OutboundStorageError):"""Raised when the backend rejects an operation due to quota exhaustion."""
[docs]classOutboundStorageNetworkError(OutboundStorageError):"""Raised when the backend endpoint is unreachable (DNS/TLS/timeout)."""
[docs]classOutboundStorageIntegrityError(OutboundStorageError):"""Raised when fetched provider data fails integrity checks. The shared hash comparison path is :func:`adapters.outbound.storage._integrity.verify_content_hash`. """
[docs]classOutboundStorageUnavailableError(OutboundStorageError):"""Raised when the backend is reachable but signals temporary unavailability."""
[docs]classStorageCorruptionError(CoreError):"""Raised when a sidecar file contains structurally invalid field types. As a :class:`core.errors.CoreError`, this indicates on-disk data corruption: the sidecar JSON parses successfully but a required field (e.g. ``byte_length``) carries a type that the runtime cannot coerce to the expected primitive. Unlike :class:`OutboundStorageIntegrityError`, which covers payload-byte hash mismatches from :func:`adapters.outbound.storage._integrity.verify_content_hash`, this error surfaces schema-level violations in the sidecar metadata file itself. """