From 02ebae939a9f946b9a783c3903ed0aa0e12b07de Mon Sep 17 00:00:00 2001 From: "Ilya (Marshal)" Date: Fri, 13 Sep 2024 12:46:47 +0200 Subject: [PATCH] Fix response parsing for JSON content type --- packages/atproto_client/request.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/atproto_client/request.py b/packages/atproto_client/request.py index 31c72951..5691fa32 100644 --- a/packages/atproto_client/request.py +++ b/packages/atproto_client/request.py @@ -1,5 +1,6 @@ import typing as t from dataclasses import dataclass +from importlib import metadata as importlib_metadata import httpx import typing_extensions as te @@ -9,6 +10,13 @@ from atproto_client.models.common import XrpcError from atproto_client.models.utils import get_or_create, load_json +try: + _ATPROTO_SDK_VERSION = importlib_metadata.version('atproto') +except importlib_metadata.PackageNotFoundError: + _ATPROTO_SDK_VERSION = 'unknown' + +_ATPROTO_SDK_USER_AGENT = f'atproto/{_ATPROTO_SDK_VERSION} Python SDK (atproto.blue)' + @dataclass class Response: @@ -34,7 +42,8 @@ def _convert_headers_to_dict(headers: httpx.Headers) -> t.Dict[str, str]: def _parse_response(response: httpx.Response) -> Response: content = response.content - if response.headers.get('content-type') == 'application/json; charset=utf-8': + content_type = response.headers.get('content-type') + if content_type and 'application/json' in content_type.lower(): content = from_json(response.content) return Response( @@ -80,7 +89,7 @@ def _handle_response(response: httpx.Response) -> httpx.Response: class RequestBase: - _MANDATORY_HEADERS: t.ClassVar[t.Dict[str, str]] = {'User-Agent': 'atproto/alpha (Python SDK)'} + _MANDATORY_HEADERS: t.ClassVar[t.Dict[str, str]] = {'User-Agent': _ATPROTO_SDK_USER_AGENT} def __init__(self) -> None: self._additional_headers: t.Dict[str, str] = {}