internal 1.1.10__tar.gz → 1.1.12__tar.gz

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.

Potentially problematic release.


This version of internal might be problematic. Click here for more details.

Files changed (39) hide show
  1. {internal-1.1.10 → internal-1.1.12}/PKG-INFO +1 -1
  2. {internal-1.1.10 → internal-1.1.12}/pyproject.toml +1 -1
  3. {internal-1.1.10 → internal-1.1.12}/src/internal/base_factory.py +5 -18
  4. {internal-1.1.10 → internal-1.1.12}/src/internal/http/requests.py +9 -6
  5. {internal-1.1.10 → internal-1.1.12}/README.md +0 -0
  6. {internal-1.1.10 → internal-1.1.12}/src/internal/__init__.py +0 -0
  7. {internal-1.1.10 → internal-1.1.12}/src/internal/base_config.py +0 -0
  8. {internal-1.1.10 → internal-1.1.12}/src/internal/cache_redis.py +0 -0
  9. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/__init__.py +0 -0
  10. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/contact_type.py +0 -0
  11. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/description_type.py +0 -0
  12. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/device_code.py +0 -0
  13. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/event_code.py +0 -0
  14. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/lpr_direction.py +0 -0
  15. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/notify_type.py +0 -0
  16. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/operator_type.py +0 -0
  17. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/order_type.py +0 -0
  18. {internal-1.1.10 → internal-1.1.12}/src/internal/common_enum/websocket_channel.py +0 -0
  19. {internal-1.1.10 → internal-1.1.12}/src/internal/const.py +0 -0
  20. {internal-1.1.10 → internal-1.1.12}/src/internal/database.py +0 -0
  21. {internal-1.1.10 → internal-1.1.12}/src/internal/exception/__init__.py +0 -0
  22. {internal-1.1.10 → internal-1.1.12}/src/internal/exception/app_exception.py +0 -0
  23. {internal-1.1.10 → internal-1.1.12}/src/internal/exception/base_exception.py +0 -0
  24. {internal-1.1.10 → internal-1.1.12}/src/internal/exception/internal_exception.py +0 -0
  25. {internal-1.1.10 → internal-1.1.12}/src/internal/ext/__init__.py +0 -0
  26. {internal-1.1.10 → internal-1.1.12}/src/internal/ext/amazon/__init__.py +0 -0
  27. {internal-1.1.10 → internal-1.1.12}/src/internal/ext/amazon/aws/__init__.py +0 -0
  28. {internal-1.1.10 → internal-1.1.12}/src/internal/ext/amazon/aws/const.py +0 -0
  29. {internal-1.1.10 → internal-1.1.12}/src/internal/http/__init__.py +0 -0
  30. {internal-1.1.10 → internal-1.1.12}/src/internal/http/responses.py +0 -0
  31. {internal-1.1.10 → internal-1.1.12}/src/internal/interface/__init__.py +0 -0
  32. {internal-1.1.10 → internal-1.1.12}/src/internal/interface/base_interface.py +0 -0
  33. {internal-1.1.10 → internal-1.1.12}/src/internal/middleware/__init__.py +0 -0
  34. {internal-1.1.10 → internal-1.1.12}/src/internal/middleware/log_request.py +0 -0
  35. {internal-1.1.10 → internal-1.1.12}/src/internal/model/__init__.py +0 -0
  36. {internal-1.1.10 → internal-1.1.12}/src/internal/model/base_model.py +0 -0
  37. {internal-1.1.10 → internal-1.1.12}/src/internal/model/operate.py +0 -0
  38. {internal-1.1.10 → internal-1.1.12}/src/internal/utils.py +0 -0
  39. {internal-1.1.10 → internal-1.1.12}/src/internal/validator_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: internal
3
- Version: 1.1.10
3
+ Version: 1.1.12
4
4
  Summary:
5
5
  Author: Ray
6
6
  Author-email: ray@cruisys.com
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "internal"
3
- version = "1.1.10"
3
+ version = "1.1.12"
4
4
  description = ""
5
5
  authors = [{ name = "Ray", email = "ray@cruisys.com" }]
6
6
  readme = "README.md"
@@ -19,7 +19,7 @@ from .const import LOG_FMT, LOG_FMT_NO_DT, LOG_DT_FMT, DEFAULT_LOGGER_NAME, CORR
19
19
  from .exception.base_exception import InternalBaseException
20
20
  from .exception.internal_exception import BadGatewayException, GatewayTimeoutException
21
21
  from .ext.amazon import aws
22
- from .http.requests import async_request
22
+ from .http.requests import send_webhook_message
23
23
  from .http.responses import async_response
24
24
  from .middleware.log_request import LogRequestMiddleware
25
25
  from .utils import update_dict_with_cast
@@ -157,19 +157,11 @@ class BaseFactory(metaclass=ABCMeta):
157
157
  if isinstance(exc, BadGatewayException):
158
158
  if self.get_app_config().WEBHOOK_BASE_URL:
159
159
  message = f"【{self.DEFAULT_APP_NAME}】Bad gateway, request:{request.__dict__}, exc:{exc}"
160
- payload = {"text": message}
161
- try:
162
- await async_request(app, "POST", self.get_app_config().WEBHOOK_BASE_URL, json=payload)
163
- except Exception as e:
164
- app.state.logger.warn(f"Notify failure, Exception:{e}")
160
+ await send_webhook_message(app, message)
165
161
  elif isinstance(exc, GatewayTimeoutException):
166
162
  if self.get_app_config().WEBHOOK_BASE_URL:
167
163
  message = f"【{self.DEFAULT_APP_NAME}】Gateway timeout, request:{request.__dict__}, exc:{exc}"
168
- payload = {"text": message}
169
- try:
170
- await async_request(app, "POST", self.get_app_config().WEBHOOK_BASE_URL, json=payload)
171
- except Exception as e:
172
- app.state.logger.warn(f"Notify failure, Exception:{e}")
164
+ await send_webhook_message(app, message)
173
165
 
174
166
  return await async_response(data=detail.get("data"), code=detail.get("code"), message=detail.get("message"),
175
167
  status_code=exc.status_code)
@@ -187,13 +179,8 @@ class BaseFactory(metaclass=ABCMeta):
187
179
  async def http_exception_handler(request: Request, exc: Exception):
188
180
  app.state.logger.warn(f"Exception, request:{request.__dict__}, exc:{exc}")
189
181
  app.state.logger.warn(traceback.format_exc())
190
- if self.get_app_config().WEBHOOK_BASE_URL:
191
- message = f"【{self.DEFAULT_APP_NAME}】Unprocessed Exception, request:{request.__dict__}, exc:{exc}"
192
- payload = {"text": message}
193
- try:
194
- await async_request(app, "POST", self.get_app_config().WEBHOOK_BASE_URL, json=payload)
195
- except Exception as e:
196
- app.state.logger.warn(f"Notify failure, Exception:{e}")
182
+ message = f"【{self.DEFAULT_APP_NAME}】Unprocessed Exception, request:{request.__dict__}, exc:{exc}"
183
+ await send_webhook_message(app, message)
197
184
 
198
185
  return await async_response(code="error_internal_server", message="Internal server error",
199
186
  status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
@@ -24,11 +24,13 @@ async def invoke_request(timeout: httpx.Timeout, method: str, url: str, app: Fas
24
24
  )
25
25
  return response
26
26
  except httpx.TimeoutException as exc:
27
- app.state.logger.warn(f"invoke_request(), TimeoutException, exc: {exc}, url: {url}, method: {method}, kwargs: {kwargs}")
27
+ message = f"invoke_request(), TimeoutException, exc: {exc}, url: {url}, method: {method}, kwargs: {kwargs}"
28
+ app.state.logger.warn(message)
28
29
  raise GatewayTimeoutException(str(exc)) from exc
29
30
  except Exception as exc:
30
- app.state.logger.warn(
31
- f"invoke_request(), Exception, exc: {exc}, url: {url}, method: {method}, kwargs: {kwargs}")
31
+ message = f"invoke_request(), Exception, exc: {exc}, url: {url}, method: {method}, kwargs: {kwargs}"
32
+ app.state.logger.warn(message)
33
+ await send_webhook_message(app, message)
32
34
  raise BadGatewayException(str(exc))
33
35
 
34
36
 
@@ -76,7 +78,7 @@ async def async_request(app: FastAPI, method, url, current_user: dict = None,
76
78
  current_delay = float(request_retry_delay)
77
79
 
78
80
  while retries <= request_retry_count:
79
- app.state.logger.warn(f"嘗試送請求 (第 {retries + 1} 次嘗試)...")
81
+ app.state.logger.warn(f"url: {url}, method: {method}, kwargs: {kwargs}, 嘗試送請求 (第 {retries + 1} 次嘗試)...")
80
82
  try:
81
83
  # 使用 await 關鍵字等待異步請求完成
82
84
  response = await invoke_request(timeout, method, url, app, **kwargs)
@@ -85,12 +87,13 @@ async def async_request(app: FastAPI, method, url, current_user: dict = None,
85
87
  if retries < request_retry_count:
86
88
  # 計算下一次的延遲時間:current_delay * 2^retries + 隨機抖動
87
89
  sleep_time = current_delay * (2 ** retries) + random.uniform(0, 0.5)
88
- app.state.logger.warn(f"等待 {sleep_time:.2f} 秒後重試...")
90
+ app.state.logger.warn(f"url: {url}, method: {method}, kwargs: {kwargs}, 等待 {sleep_time:.2f} 秒後重試...")
89
91
  # 使用 asyncio.sleep 進行異步等待,不會阻塞主執行緒
90
92
  await asyncio.sleep(sleep_time)
91
93
  retries += 1
92
94
  else:
93
- app.state.logger.warn(f"已達到最大重試次數 ({request_retry_count}),放棄發送請求。")
95
+ message = f"url: {url}, method: {method}, kwargs: {kwargs}, 已達到最大重試次數 ({request_retry_count}),放棄發送請求。"
96
+ app.state.logger.warn(message)
94
97
  raise # 重新拋出最後一個異常
95
98
 
96
99
 
File without changes