"""CockroachDB AsyncPG adapter helpers."""
import secrets
from typing import TYPE_CHECKING, Any, Final
from mypy_extensions import mypyc_attr
from sqlspec.utils.type_guards import has_sqlstate
if TYPE_CHECKING:
from collections.abc import Mapping
__all__ = ("CockroachAsyncpgRetryConfig", "calculate_backoff_seconds", "is_retryable_error")
# Retry configuration defaults (module-level for mypyc compatibility)
_DEFAULT_MAX_RETRIES: Final[int] = 10
_DEFAULT_BASE_DELAY_MS: Final[float] = 50.0
_DEFAULT_MAX_DELAY_MS: Final[float] = 5000.0
_DEFAULT_ENABLE_LOGGING: Final[bool] = True
@mypyc_attr(allow_interpreted_subclasses=False)
class CockroachAsyncpgRetryConfig:
"""CockroachDB asyncpg transaction retry configuration."""
__slots__ = ("base_delay_ms", "enable_logging", "max_delay_ms", "max_retries")
def __init__(
self,
max_retries: int = _DEFAULT_MAX_RETRIES,
base_delay_ms: float = _DEFAULT_BASE_DELAY_MS,
max_delay_ms: float = _DEFAULT_MAX_DELAY_MS,
enable_logging: bool = _DEFAULT_ENABLE_LOGGING,
) -> None:
self.max_retries = max_retries
self.base_delay_ms = base_delay_ms
self.max_delay_ms = max_delay_ms
self.enable_logging = enable_logging