Skip to content

Response

qgendapy.response

T = TypeVar('T') module-attribute

QGendaResponse(data, status_code, headers, items=list()) dataclass

Bases: Generic[T]

Wrapper around a QGenda API response.

data instance-attribute

status_code instance-attribute

headers instance-attribute

items = field(default_factory=list) class-attribute instance-attribute

__iter__()

Source code in src/qgendapy/response.py
def __iter__(self):
    return iter(self.items)

__len__()

Source code in src/qgendapy/response.py
def __len__(self):
    return len(self.items)

__bool__()

Source code in src/qgendapy/response.py
def __bool__(self):
    return self.status_code < 400

__getitem__(index)

Source code in src/qgendapy/response.py
def __getitem__(self, index: int) -> T:
    return self.items[index]

from_httpx(resp, model=None) classmethod

Build a QGendaResponse from an httpx.Response.

Raises APIError for 4xx/5xx status codes.

Source code in src/qgendapy/response.py
@classmethod
def from_httpx(cls, resp: httpx.Response, model: type[T] | None = None) -> QGendaResponse[T]:
    """Build a QGendaResponse from an httpx.Response.

    Raises APIError for 4xx/5xx status codes.
    """
    if resp.status_code >= 400:
        try:
            body = resp.json()
        except (ValueError, TypeError):
            body = resp.text
        raise APIError(
            status_code=resp.status_code,
            message=resp.reason_phrase or "API error",
            response_body=body,
        )

    try:
        data = resp.json()
    except (ValueError, TypeError):
        data = {}

    headers = dict(resp.headers)
    items: list[T] = []

    if model is not None:
        _from_dict = getattr(model, "from_dict")  # noqa: B009
        if isinstance(data, list):
            items = [_from_dict(item) for item in data]
        elif isinstance(data, dict):
            items = [_from_dict(data)]

    return cls(data=data, status_code=resp.status_code, headers=headers, items=items)