fiuai-sdk-python 0.7.1__py3-none-any.whl → 0.7.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
fiuai_sdk_python/resp.py CHANGED
@@ -6,6 +6,7 @@
6
6
  # Copyright (c) 2025 FiuAI
7
7
 
8
8
  import logging
9
+ from httpx import Response
9
10
  from typing import List, Dict, Any, Optional, Union
10
11
  from pydantic import BaseModel, Field
11
12
 
@@ -30,7 +31,41 @@ class ApiResponse(BaseModel):
30
31
  return self.http_success and self.api_success
31
32
 
32
33
 
33
- def parse_response(response) -> ApiResponse:
34
+ def _get_response_body_preview(response: Response, max_chars: int = 300) -> str:
35
+ """
36
+ 安全读取响应体前若干字符,用于错误信息预览。兼容编码问题及中文。
37
+ """
38
+ try:
39
+ raw = response.content
40
+ if not raw:
41
+ return ""
42
+ text = raw.decode("utf-8", errors="replace")
43
+ text = text.strip()
44
+ if len(text) > max_chars:
45
+ text = text[:max_chars] + "..."
46
+ return text
47
+ except Exception:
48
+ return ""
49
+
50
+
51
+ def _get_response_body_for_log(response: Response, max_chars: int = 2000) -> str:
52
+ """
53
+ 安全读取完整响应体用于日志,避免编码异常,支持中文。
54
+ """
55
+ try:
56
+ raw = response.content
57
+ if not raw:
58
+ return "(empty)"
59
+ text = raw.decode("utf-8", errors="replace")
60
+ text = text.strip()
61
+ if len(text) > max_chars:
62
+ text = text[:max_chars] + "...(truncated)"
63
+ return text
64
+ except Exception as ex:
65
+ return f"(decode error: {ex})"
66
+
67
+
68
+ def parse_response(response: Response) -> ApiResponse:
34
69
  """
35
70
  解析HTTP响应,返回结构化的API响应
36
71
 
@@ -67,12 +102,25 @@ def parse_response(response) -> ApiResponse:
67
102
  try:
68
103
  response_data = response.json()
69
104
  except Exception as e:
105
+ # 安全读取响应体,兼容非 UTF-8 及中文等,便于日志和错误信息完整
106
+ raw_preview = _get_response_body_preview(response, max_chars=300)
107
+ err_msg = f"Invalid JSON response (status={response.status_code}): {e}"
108
+ if raw_preview:
109
+ err_msg += f"; body preview: {raw_preview}"
110
+ else:
111
+ err_msg += "; response body empty (e.g. gateway/upstream error)"
112
+ logger.error(
113
+ "parse_response json failed, status=%s, error=%s, body=%s",
114
+ response.status_code,
115
+ str(e),
116
+ _get_response_body_for_log(response),
117
+ )
70
118
  return ApiResponse(
71
119
  http_success=True,
72
120
  api_success=False,
73
121
  status_code=response.status_code,
74
- error_message=[f"Invalid JSON response: {e}"],
75
- error_code=["API_INVALID_JSON"]
122
+ error_message=[err_msg],
123
+ error_code=["API_INVALID_JSON"],
76
124
  )
77
125
 
78
126
  # 检查API业务是否成功
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: fiuai_sdk_python
3
- Version: 0.7.1
3
+ Version: 0.7.2
4
4
  Summary: FiuAI Python SDK - 企业级AI服务集成开发工具包
5
5
  Project-URL: Homepage, https://github.com/fiuai/fiuai-sdk-python
6
6
  Project-URL: Documentation, https://github.com/fiuai/fiuai-sdk-python#readme
@@ -11,7 +11,7 @@ fiuai_sdk_python/error.py,sha256=YYsqP39vY8N7wWD4ervsx7ngcdXIMR59Wc4A4h4Rb-k,235
11
11
  fiuai_sdk_python/item.py,sha256=RPvUYaJDWTyUBdqdrPKkgFR4txYXQVqoDPPhv0iBUac,1434
12
12
  fiuai_sdk_python/perm.py,sha256=BEQjgJeW4JqG8mhNndRd8TBipnjCh2kBEMWEYXQgths,150
13
13
  fiuai_sdk_python/profile.py,sha256=hcbJIYHAR-OEkFDRp-o1c91aVDinIwNsv7oAspFcxxQ,5526
14
- fiuai_sdk_python/resp.py,sha256=4twCxmwqe2e1vlhfFnu-5_FR8PwQiveB9njY3exaQ88,10183
14
+ fiuai_sdk_python/resp.py,sha256=UiagvtsX8SQRRA226dCS9ggQ7tKWa1SLE4DaqCXGIKc,11861
15
15
  fiuai_sdk_python/setup.py,sha256=ER0IPAouHhrVSzG0Iu87Ky0R5c4kCgOF77kRAOO-1MI,8025
16
16
  fiuai_sdk_python/type.py,sha256=vinZKflNvmQNhqO5mDARAE6O133k0LiR1s1ZvexN_q4,28940
17
17
  fiuai_sdk_python/util.py,sha256=x3TkNsC8_nzA-8x6ndIGrIpE9sRKpn3vlxnj2Hqpxwo,2326
@@ -29,7 +29,7 @@ fiuai_sdk_python/utils/__init__.py,sha256=UwwsvqBsaRCHbWdx-wvM48szT3j50h95k9MZdb
29
29
  fiuai_sdk_python/utils/ids.py,sha256=ZDtEqt_Woth8ytPB2tdnnTIv7noWr8XYhSsUvkZ7Hc0,6448
30
30
  fiuai_sdk_python/utils/logger.py,sha256=RuKn9TFmV1IfsRTV3ZdtXLZkM44GkHs32ehbJdrdu-8,3657
31
31
  fiuai_sdk_python/utils/text.py,sha256=bnob_W0nj_Vj8Hp93B0cYmFOY8IhUWF0C8UedOYCNvs,1667
32
- fiuai_sdk_python-0.7.1.dist-info/METADATA,sha256=9zuPOwRytT_wRjNeyutOdtkpDHv7UlOA9FRPTJsDgcc,1523
33
- fiuai_sdk_python-0.7.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
34
- fiuai_sdk_python-0.7.1.dist-info/licenses/LICENSE,sha256=PFMF0dFErrBFqU-rryEby0yW8GBagYqrdbyZQHMUCJg,1062
35
- fiuai_sdk_python-0.7.1.dist-info/RECORD,,
32
+ fiuai_sdk_python-0.7.2.dist-info/METADATA,sha256=875jpAqWZXx7CphAj7wDdLjgrfHX1YOvu9vj939rzVM,1523
33
+ fiuai_sdk_python-0.7.2.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
34
+ fiuai_sdk_python-0.7.2.dist-info/licenses/LICENSE,sha256=PFMF0dFErrBFqU-rryEby0yW8GBagYqrdbyZQHMUCJg,1062
35
+ fiuai_sdk_python-0.7.2.dist-info/RECORD,,