From e2003e27df682877bc728ac261a9ace207d62ab5 Mon Sep 17 00:00:00 2001 From: StarHeartHunt Date: Thu, 16 Sep 2021 19:32:48 +0800 Subject: [PATCH] :sparkles: parse data based on `content-type` of response --- .../nonebot/adapters/feishu/bot.py | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/bot.py b/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/bot.py index 4ca04685..eb47bffc 100644 --- a/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/bot.py +++ b/packages/nonebot-adapter-feishu/nonebot/adapters/feishu/bot.py @@ -1,21 +1,22 @@ import json 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 from aiocache import Cache, cached 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.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 .event import (Event, GroupMessageEvent, MessageEvent, PrivateMessageEvent, - get_event_model) +from .event import (Event, GroupMessageEvent, MessageEvent, + PrivateMessageEvent, get_event_model) from .exception import ActionFailed, ApiNotAvailable, NetworkError from .message import Message, MessageSegment, MessageSerializer 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():] -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: raise ActionFailed(**result) return result.get("data") + else: + return result class Bot(BaseBot): @@ -289,7 +292,10 @@ class Bot(BaseBot): params=data.get("query", {}), headers=headers)) 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) raise NetworkError(f"HTTP request received unexpected " f"status code: {response.status_code} "