Exceptions¶
Custom exceptions for pykada.
All exceptions carry status_code, response_body, and endpoint
attributes so callers can inspect what went wrong without parsing message strings.
All pykada exceptions inherit from VerkadaError so
you can catch any API error with a single except VerkadaError clause, or
handle specific cases precisely:
from pykada import (
VerkadaAuthError,
VerkadaNotFoundError,
VerkadaRateLimitError,
VerkadaServerError,
)
Every exception exposes:
status_code— the HTTP status code (int | None)response_body— raw response text (str | None)endpoint— the URL that was called (str | None)
VerkadaRateLimitError additionally exposes:
retry_after— seconds to wait before retrying, parsed from theRetry-Afterheader (int | None)
Exception hierarchy¶
VerkadaError (base)
├── VerkadaAuthError (401 Unauthorized)
├── VerkadaForbiddenError (403 Forbidden)
├── VerkadaNotFoundError (404 Not Found)
├── VerkadaRateLimitError (429 Too Many Requests)
├── VerkadaServerError (5xx Server Error)
└── VerkadaAPIError (other HTTP errors)
- class pykada.exceptions.VerkadaError(message, *, status_code=None, response_body=None, endpoint=None)[source]¶
Bases:
ExceptionBase exception for all pykada errors.
- class pykada.exceptions.VerkadaAuthError(message, *, status_code=None, response_body=None, endpoint=None)[source]¶
Bases:
VerkadaErrorRaised on 401 Unauthorized. Usually means the API key is missing, expired, or invalid.
- class pykada.exceptions.VerkadaForbiddenError(message, *, status_code=None, response_body=None, endpoint=None)[source]¶
Bases:
VerkadaErrorRaised on 403 Forbidden. The API key is valid but lacks permission for this resource.
- class pykada.exceptions.VerkadaNotFoundError(message, *, status_code=None, response_body=None, endpoint=None)[source]¶
Bases:
VerkadaErrorRaised on 404 Not Found. The requested resource (camera, user, door, etc.) does not exist.
- class pykada.exceptions.VerkadaRateLimitError(message, *, status_code=429, response_body=None, endpoint=None, retry_after=None)[source]¶
Bases:
VerkadaErrorRaised on 429 Too Many Requests (after all retries are exhausted). Check
retry_afterfor the number of seconds to wait before retrying.
- class pykada.exceptions.VerkadaServerError(message, *, status_code=None, response_body=None, endpoint=None)[source]¶
Bases:
VerkadaErrorRaised on 5xx responses or when all retries are exhausted on a server error.
- class pykada.exceptions.VerkadaAPIError(message, *, status_code=None, response_body=None, endpoint=None)[source]¶
Bases:
VerkadaErrorRaised for any other HTTP error not covered by a more specific exception.