From 4614946c7a805cf76e4801971b0310ddebe6aa5e Mon Sep 17 00:00:00 2001 From: lzh Date: Fri, 23 Jan 2026 23:07:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=82=80=E8=AF=B7?= =?UTF-8?q?=E7=A0=81=E6=B3=A8=E5=86=8C=E6=97=B6=20=5Fparse=5Fdatetime=20?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=A4=84=E7=90=86=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MySQL 返回的 datetime 可能是 date 类型 - _parse_datetime 现在能正确处理 date 类型 - 修复注册接口 500 错误 Co-Authored-By: Claude Opus 4.5 --- src/vitals/core/database.py | 11 +++++++++-- src/vitals/vision/providers/qwen.py | 12 ++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/vitals/core/database.py b/src/vitals/core/database.py index b85b3de..11ccad9 100644 --- a/src/vitals/core/database.py +++ b/src/vitals/core/database.py @@ -531,13 +531,20 @@ def add_user(user: User) -> int: return cursor.lastrowid -def _parse_datetime(value) -> datetime: +def _parse_datetime(value) -> Optional[datetime]: """将字符串或 datetime 转换为 datetime 对象""" if value is None: return None if isinstance(value, datetime): return value - return datetime.fromisoformat(value) + # MySQL 可能返回 date 类型 + if isinstance(value, date): + return datetime.combine(value, datetime.min.time()) + # 尝试解析字符串 + try: + return datetime.fromisoformat(value) + except (TypeError, ValueError): + return None def _parse_date(value) -> date: diff --git a/src/vitals/vision/providers/qwen.py b/src/vitals/vision/providers/qwen.py index c2837b0..1f9aab7 100644 --- a/src/vitals/vision/providers/qwen.py +++ b/src/vitals/vision/providers/qwen.py @@ -79,6 +79,12 @@ class QwenVisionAnalyzer: headers=headers, json=payload, ) + # 处理认证错误 + if response.status_code == 401: + raise ValueError( + "API Key 无效或已过期。请检查 DashScope API Key 是否正确配置。" + "可以在管理页面设置 API Key,或通过环境变量 DASHSCOPE_API_KEY 配置。" + ) response.raise_for_status() result = response.json() @@ -135,6 +141,12 @@ class QwenVisionAnalyzer: headers=headers, json=payload, ) + # 处理认证错误 + if response.status_code == 401: + raise ValueError( + "API Key 无效或已过期。请检查 DashScope API Key 是否正确配置。" + "可以在管理页面设置 API Key,或通过环境变量 DASHSCOPE_API_KEY 配置。" + ) response.raise_for_status() result = response.json()