parse data based on content-type of response

This commit is contained in:
StarHeartHunt 2021-09-16 19:32:48 +08:00
parent d82749c48e
commit e2003e27df

View File

@ -1,21 +1,22 @@
import json import json
import re import re
from typing import TYPE_CHECKING, Any, Dict, Optional, Tuple, Union from typing import (TYPE_CHECKING, Any, AsyncIterable, Dict, Iterable,
Optional, Tuple, Union)
import httpx import httpx
from aiocache import Cache, cached from aiocache import Cache, cached
from aiocache.serializers import PickleSerializer from aiocache.serializers import PickleSerializer
from nonebot.log import logger
from nonebot.utils import escape_tag
from nonebot.typing import overrides
from nonebot.message import handle_event
from nonebot.adapters import Bot as BaseBot from nonebot.adapters import Bot as BaseBot
from nonebot.drivers import Driver, HTTPRequest, HTTPResponse from nonebot.drivers import Driver, HTTPRequest, HTTPResponse
from nonebot.log import logger
from nonebot.message import handle_event
from nonebot.typing import overrides
from nonebot.utils import escape_tag
from .config import Config as FeishuConfig from .config import Config as FeishuConfig
from .event import (Event, GroupMessageEvent, MessageEvent, PrivateMessageEvent, from .event import (Event, GroupMessageEvent, MessageEvent,
get_event_model) PrivateMessageEvent, get_event_model)
from .exception import ActionFailed, ApiNotAvailable, NetworkError from .exception import ActionFailed, ApiNotAvailable, NetworkError
from .message import Message, MessageSegment, MessageSerializer from .message import Message, MessageSegment, MessageSerializer
from .utils import AESCipher, log from .utils import AESCipher, log
@ -101,7 +102,7 @@ def _check_nickname(bot: "Bot", event: "Event"):
first_msg_seg.data["text"] = first_text[m.end():] first_msg_seg.data["text"] = first_text[m.end():]
def _handle_api_result(result: Optional[Dict[str, Any]]) -> Any: def _handle_api_result(result: Union[Optional[Dict[str, Any]], str, bytes, Iterable[bytes], AsyncIterable[bytes]]) -> Any:
""" """
:说明: :说明:
@ -123,6 +124,8 @@ def _handle_api_result(result: Optional[Dict[str, Any]]) -> Any:
if result.get("code") != 0: if result.get("code") != 0:
raise ActionFailed(**result) raise ActionFailed(**result)
return result.get("data") return result.get("data")
else:
return result
class Bot(BaseBot): class Bot(BaseBot):
@ -289,7 +292,10 @@ class Bot(BaseBot):
params=data.get("query", {}), params=data.get("query", {}),
headers=headers)) headers=headers))
if 200 <= response.status_code < 300: if 200 <= response.status_code < 300:
result = response.json() if response.headers["content-type"].startswith("application/json"):
result = response.json()
else:
result = response.content
return _handle_api_result(result) return _handle_api_result(result)
raise NetworkError(f"HTTP request received unexpected " raise NetworkError(f"HTTP request received unexpected "
f"status code: {response.status_code} " f"status code: {response.status_code} "