From 02d862849d9c4505d89adc27a2fe26ce4c289374 Mon Sep 17 00:00:00 2001 From: kem <531144129@qq.com> Date: Fri, 29 Nov 2024 15:23:25 +0800 Subject: [PATCH] =?UTF-8?q?refactor(response.py):=20=E4=BC=98=E5=8C=96Resp?= =?UTF-8?q?onse=E7=B1=BB=E5=8F=82=E6=95=B0=E9=BB=98=E8=AE=A4=E5=80=BC?= =?UTF-8?q?=E5=8F=8A=E6=96=B9=E6=B3=95=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在`Response`类中进行了以下修改: - 将`url`参数的默认值从`None`改为`""`,以提供更明确的空字符串作为默认值。 - 在`guess_encoding`方法中,当`self.content`为空时,返回默认编码"utf-8"而不是直接返回。 - 更新了`extract`方法中的`rules`参数,默认值设为`None`,并在方法内部处理为`{}`,以增强灵活性。 - 修改了`get`方法的文档说明,使其更加清晰地描述了使用`jmespath`进行匹配的功能,并调整了参数说明以更好地反映实际用途。 这些改动旨在提高代码的可读性和维护性。 --- bricks/lib/response.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/bricks/lib/response.py b/bricks/lib/response.py index 46973f2..853a7a3 100644 --- a/bricks/lib/response.py +++ b/bricks/lib/response.py @@ -40,7 +40,7 @@ def __init__( content: Any = None, status_code: int = 200, headers: Union[Header, dict, Mapping] = None, - url: str = None, + url: str = "", encoding: str = None, reason: str = "ok", cookies: Cookies = None, @@ -72,7 +72,7 @@ def __init__( def guess_encoding(self): if not self.content: - return + return "utf-8" # 1. 从header中获取编码 content_type = self.headers.get("Content-Type") @@ -153,7 +153,7 @@ def extract_all( def extract( self, engine: Union[str, Callable], - rules: dict, + rules: dict = None, ): """ 提取引擎, 生成器模式, 支持 Rule, 批量匹配 @@ -169,6 +169,7 @@ def extract( "JASONPATH": extractors.JsonpathExtractor, "REGEX": extractors.RegexExtractor, } + rules = rules or {} if not engine: return [] @@ -288,15 +289,11 @@ def re_first(self, regex, default=None, obj=None, **kwargs): def get(self, rule: str, obj=None, strict=True, **kwargs): """ - json匹配 - json规则示例: - 字典内直接采用 a.b.c 的方式匹配 - 如果要匹配列表内的每一项, 采用$代替每一项 - 如果要从父级开始匹配, 采用//代替父级节点 + 对 `response.text` 进行 `jmespath` 匹配, 并返回匹配结果。 类似于直接使用 `jmespath` 进行 `jmespath` 匹配。 更多语法请参考: [JMESPath — JMESPath](https://jmespath.org/) - :param rule: json解析规则 - :param strict: json解析规则 - :param obj: 需要匹配的dict/list对象 + :param rule: `jmespath`规则 + :param strict: 是否严格匹配,为 `False`时可以匹配 `jsonp`字符串 + :param obj: 需要匹配的对象,默认为 `self.json()` :return: """ obj = obj or self.text