Saltar a contenido

Excepciones

Jerarquía completa de excepciones del SDK. Toda excepción del cliente hereda de DatosMexicoError.

DatosMexicoError
├── ConfigurationError      (parámetros inválidos al crear el cliente)
├── NetworkError            (problemas de red genéricos)
│   └── TimeoutError        (timeout HTTP)
├── ApiError                (HTTP 4xx / 5xx clasificados)
│   ├── BadRequestError     (HTTP 400)
│   ├── AuthenticationError (HTTP 401)
│   ├── AuthorizationError  (HTTP 403)
│   ├── NotFoundError       (HTTP 404)
│   ├── RateLimitError      (HTTP 429)
│   └── ServerError         (HTTP 5xx)
└── ValidationError         (Pydantic validation o helper-side validation)

→ Para guía de uso, ver Quickstart §5.

Clases

Excepciones del cliente datos-mexico.

Jerarquía:

DatosMexicoError (base)
├── ConfigurationError      (problema de setup del cliente)
├── NetworkError            (problemas de red, DNS, SSL)
│   └── TimeoutError        (timeout de request)
├── ApiError                (HTTP error 4xx/5xx)
│   ├── BadRequestError         (400)
│   ├── AuthenticationError     (401)
│   ├── AuthorizationError      (403)
│   ├── NotFoundError           (404)
│   ├── RateLimitError          (429, con retry_after)
│   └── ServerError             (5xx)
└── ValidationError         (response no matchea Pydantic schema)

DatosMexicoError

Bases: Exception

Excepción base de la librería datos-mexico.

Todas las demás excepciones del módulo heredan de esta clase. Capturarla permite manejar cualquier error originado por el cliente sin tener que enumerar las subclases.

Examples:

>>> from datos_mexico import DatosMexico, DatosMexicoError
>>> client = DatosMexico()
>>> try:
...     client.health()
... except DatosMexicoError as e:
...     print(f"El cliente falló: {e}")

ConfigurationError

Bases: DatosMexicoError

Se lanza cuando hay un problema con la configuración del cliente.

Ejemplos típicos: base_url inválida, timeout negativo, max_retries < 0.

NetworkError

Bases: DatosMexicoError

Se lanza cuando ocurre un problema de red al contactar la API.

Cubre fallos de DNS, errores de SSL, conexión rechazada y similares. No cubre respuestas HTTP de la API (eso es ApiError).

TimeoutError

Bases: NetworkError

Se lanza cuando una request excede el timeout configurado.

Subclase de NetworkError. Distinta de la TimeoutError built-in de Python: para evitar ambigüedad importarla siempre desde datos_mexico.exceptions o datos_mexico.

ApiError

ApiError(
    endpoint: str,
    status_code: int,
    method: str = "GET",
    response_body: str | None = None,
    message: str | None = None,
)

Bases: DatosMexicoError

Se lanza cuando la API responde con un código HTTP de error.

Cubre cualquier respuesta 4xx o 5xx que no tenga una subclase más específica. Los atributos de la instancia exponen los detalles necesarios para diagnosticar y reportar el error.

Attributes:

Name Type Description
endpoint

Path relativo del endpoint que falló (ej. "/health").

status_code

Código HTTP devuelto por la API.

method

Método HTTP usado en la request ("GET", "POST", ...).

response_body

Cuerpo crudo de la respuesta cuando estaba disponible; None si no se pudo leer.

BadRequestError

BadRequestError(
    endpoint: str,
    status_code: int,
    method: str = "GET",
    response_body: str | None = None,
    message: str | None = None,
)

Bases: ApiError

HTTP 400. La request enviada al servidor estaba mal formada.

AuthenticationError

AuthenticationError(
    endpoint: str,
    status_code: int,
    method: str = "GET",
    response_body: str | None = None,
    message: str | None = None,
)

Bases: ApiError

HTTP 401. La API requiere autenticación y el cliente no la proveyó.

AuthorizationError

AuthorizationError(
    endpoint: str,
    status_code: int,
    method: str = "GET",
    response_body: str | None = None,
    message: str | None = None,
)

Bases: ApiError

HTTP 403. El cliente está autenticado pero no tiene permisos.

NotFoundError

NotFoundError(
    endpoint: str,
    status_code: int,
    method: str = "GET",
    response_body: str | None = None,
    message: str | None = None,
)

Bases: ApiError

HTTP 404. El endpoint o recurso solicitado no existe.

RateLimitError

RateLimitError(
    endpoint: str,
    status_code: int = 429,
    method: str = "GET",
    response_body: str | None = None,
    retry_after: int | None = None,
    message: str | None = None,
)

Bases: ApiError

HTTP 429. El cliente ha excedido el rate limit del servidor.

Si la respuesta incluye un header Retry-After, su valor en segundos queda disponible en retry_after. Cuando la cabecera no es parseable como entero, retry_after queda en None.

Attributes:

Name Type Description
retry_after

Segundos sugeridos para reintentar, o None si la API no envió cabecera Retry-After.

ServerError

ServerError(
    endpoint: str,
    status_code: int,
    method: str = "GET",
    response_body: str | None = None,
    message: str | None = None,
)

Bases: ApiError

HTTP 5xx. La API tuvo un error interno al procesar la request.

ValidationError

ValidationError(
    endpoint: str,
    pydantic_errors: list[dict[str, Any]],
    raw_payload: Any,
)

Bases: DatosMexicoError

La respuesta de la API no coincide con el schema Pydantic esperado.

Indica que la API y el cliente están desincronizados: la API cambió un campo o tipo, o el cliente fue actualizado con un schema incorrecto.

Attributes:

Name Type Description
endpoint

Path del endpoint cuya respuesta no validó.

pydantic_errors

Lista de errores devueltos por pydantic.ValidationError.errors(), o estructura equivalente.

raw_payload

Payload crudo recibido (para debugging).