# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
from __future__ import annotations
from typing import Optional
import httpx
from typing_extensions import Literal
__all__ = [
"BadRequestError",
"AuthenticationError",
"PermissionDeniedError",
"NotFoundError",
"ConflictError",
"UnprocessableEntityError",
"RateLimitError",
"InternalServerError",
]
[文档]
class BohriumError(Exception):
pass
class APIError(BohriumError):
message: str
request: httpx.Request
body: object | None
"""The API response body.
If the API responded with a valid JSON structure then this property will be the
decoded result.
If it isn't a valid JSON structure then this will be the raw response.
If there was no response associated with this error then it will be `None`.
"""
code: Optional[str] = None
param: Optional[str] = None
type: Optional[str]
def __init__(
self, message: str, request: httpx.Request, *, body: object | None
) -> None:
super().__init__(message)
self.request = request
self.message = message
self.body = body
if isinstance(body, dict):
pass
else:
self.code = None
self.param = None
self.type = None
class APIResponseValidationError(APIError):
response: httpx.Response
status_code: int
def __init__(
self,
response: httpx.Response,
body: object | None,
*,
message: str | None = None,
) -> None:
super().__init__(
message or "Data returned by API invalid for expected schema.",
response.request,
body=body,
)
self.response = response
self.status_code = response.status_code
[文档]
class APIStatusError(APIError):
"""Raised when an API response has a status code of 4xx or 5xx."""
response: httpx.Response
status_code: int
request_id: str | None
def __init__(
self, message: str, *, response: httpx.Response, body: object | None
) -> None:
super().__init__(message, response.request, body=body)
self.response = response
self.status_code = response.status_code
self.request_id = response.headers.get("x-request-id")
class APIConnectionError(APIError):
def __init__(
self, *, message: str = "Connection error.", request: httpx.Request
) -> None:
super().__init__(message, request, body=None)
class APITimeoutError(APIConnectionError):
def __init__(self, request: httpx.Request) -> None:
super().__init__(message="Request timed out.", request=request)
[文档]
class BadRequestError(APIStatusError):
status_code: Literal[400] = (
400 # pyright: ignore[reportIncompatibleVariableOverride]
)
[文档]
class AuthenticationError(APIStatusError):
status_code: Literal[401] = (
401 # pyright: ignore[reportIncompatibleVariableOverride]
)
[文档]
class PermissionDeniedError(APIStatusError):
status_code: Literal[403] = (
403 # pyright: ignore[reportIncompatibleVariableOverride]
)
[文档]
class NotFoundError(APIStatusError):
status_code: Literal[404] = (
404 # pyright: ignore[reportIncompatibleVariableOverride]
)
[文档]
class ConflictError(APIStatusError):
status_code: Literal[409] = (
409 # pyright: ignore[reportIncompatibleVariableOverride]
)
[文档]
class UnprocessableEntityError(APIStatusError):
status_code: Literal[422] = (
422 # pyright: ignore[reportIncompatibleVariableOverride]
)
[文档]
class RateLimitError(APIStatusError):
status_code: Literal[429] = (
429 # pyright: ignore[reportIncompatibleVariableOverride]
)
[文档]
class InternalServerError(APIStatusError):
pass