Source code for redditwarp.http.util.json_loading


from __future__ import annotations
from typing import TYPE_CHECKING, Any, Callable
if TYPE_CHECKING:
    from ..response import Response

import json

json_decoder: json.JSONDecoder = json.JSONDecoder()
json_decode: Callable[[str], Any] = json_decoder.decode

[docs]def load_json_from_response(resp: Response, /) -> Any: """Return the JSON data contained in a response object. .. .PARAMETERS :param response: :type response: :class:`~.http.response.Response` .. .RETURNS :rtype: `Any` .. .RAISES :raises ValueError: The response does not contain valid JSON data. """ return json_decode(resp.data.decode())
[docs]def load_json_from_response_but_prefer_status_code_exception_on_failure(resp: Response, /) -> Any: """Return the JSON data contained in a response object. Behaves similarly to :func:`.load_json_from_response` but prefers to raise a :class:`~redditwarp.http.exceptions.StatusCodeException` instead of a `ValueError` when the response body does not contain JSON. """ try: return load_json_from_response(resp) except ValueError as cause: try: resp.ensure_successful_status() except Exception as exc: raise exc from cause raise