Coverage for src / lexigram / contracts / exceptions / idempotency.py: 0%
16 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-15 18:57 +0800
« prev ^ index » next coverage.py v7.13.5, created at 2026-08-15 18:57 +0800
1"""Exception hierarchy for idempotency support."""
3from __future__ import annotations
5from lexigram.contracts.exceptions.base import LexigramError
8class IdempotencyError(LexigramError):
9 """Base exception for idempotency flows."""
11 _code: str = "LEX_ERR_IDEM_001"
14class DuplicateRequestError(IdempotencyError):
15 """Raised when an idempotent key is reused before completion."""
17 _code: str = "LEX_ERR_IDEM_002"
19 def __init__(self, key: str, message: str | None = None) -> None:
20 detail = message or f"Duplicate idempotency key: {key}"
21 super().__init__(detail)
22 self.key = key
23 self.message = detail
26class IdempotencyStoreError(IdempotencyError):
27 """Raised on unexpected failures inside the idempotency store."""
29 _code: str = "LEX_ERR_IDEM_003"
32class IdempotencyConflictError(IdempotencyError):
33 """Raised when an idempotency key is already claimed (PENDING)."""
35 _code: str = "LEX_ERR_IDEM_004"
38__all__ = [
39 "DuplicateRequestError",
40 "IdempotencyConflictError",
41 "IdempotencyError",
42 "IdempotencyStoreError",
43]