refactor: 优化日志配置与代码细节
1. 统一使用__name__替代硬编码的logger名称 2. 使用pathlib替代os.path处理程序名 3. 细化异常捕获并优化日志打印格式 4. 收紧文件内容检查的异常捕获范围
This commit is contained in:
@@ -240,7 +240,7 @@ def _parse_email_date(date_str: str) -> str:
|
|||||||
try:
|
try:
|
||||||
dt = parsedate_to_datetime(date_str)
|
dt = parsedate_to_datetime(date_str)
|
||||||
return dt.isoformat()
|
return dt.isoformat()
|
||||||
except Exception:
|
except (ValueError, TypeError, OverflowError):
|
||||||
return date_str
|
return date_str
|
||||||
|
|
||||||
|
|
||||||
@@ -277,11 +277,11 @@ def _extract_email_body_part(part: Any) -> str:
|
|||||||
decoded_text = payload.decode(charset, errors="replace")
|
decoded_text = payload.decode(charset, errors="replace")
|
||||||
except (UnicodeDecodeError, LookupError) as decode_error:
|
except (UnicodeDecodeError, LookupError) as decode_error:
|
||||||
# 如果指定编码失败,尝试常见编码
|
# 如果指定编码失败,尝试常见编码
|
||||||
logger.warning(f"字符编码 {charset} 解码失败: {decode_error}")
|
logger.warning("字符编码 %s 解码失败: %s", charset, decode_error)
|
||||||
for fallback_charset in ["utf-8", "gbk", "gb2312", "latin-1"]:
|
for fallback_charset in ["utf-8", "gbk", "gb2312", "latin-1"]:
|
||||||
try:
|
try:
|
||||||
decoded_text = payload.decode(fallback_charset, errors="replace")
|
decoded_text = payload.decode(fallback_charset, errors="replace")
|
||||||
logger.info(f"成功使用备用编码 {fallback_charset} 解码")
|
logger.info("成功使用备用编码 %s 解码", fallback_charset)
|
||||||
break
|
break
|
||||||
except (UnicodeDecodeError, LookupError):
|
except (UnicodeDecodeError, LookupError):
|
||||||
continue
|
continue
|
||||||
@@ -293,15 +293,15 @@ def _extract_email_body_part(part: Any) -> str:
|
|||||||
# 限制长度并返回
|
# 限制长度并返回
|
||||||
result = decoded_text[:MAX_BODY_LENGTH]
|
result = decoded_text[:MAX_BODY_LENGTH]
|
||||||
if len(decoded_text) > MAX_BODY_LENGTH:
|
if len(decoded_text) > MAX_BODY_LENGTH:
|
||||||
logger.debug(f"正文内容过长,截取前{MAX_BODY_LENGTH}字符")
|
logger.debug("正文内容过长,截取前%d字符", MAX_BODY_LENGTH)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
except AttributeError as attr_error:
|
except AttributeError as attr_error:
|
||||||
logger.error(f"邮件部分对象属性错误: {attr_error}")
|
logger.error("邮件部分对象属性错误: %s", attr_error)
|
||||||
return ""
|
return ""
|
||||||
except Exception as unexpected_error:
|
except Exception as unexpected_error:
|
||||||
logger.error(f"提取邮件正文时发生未知错误: {unexpected_error}")
|
logger.error("提取邮件正文时发生未知错误: %s", unexpected_error)
|
||||||
return ""
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import logging
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
@@ -20,6 +21,8 @@ from typing import Any, Callable
|
|||||||
|
|
||||||
from .task import Condition, Context
|
from .task import Condition, Context
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
__all__ = ["BuiltinConditions", "Condition", "Constants"]
|
__all__ = ["BuiltinConditions", "Condition", "Constants"]
|
||||||
|
|
||||||
|
|
||||||
@@ -153,7 +156,7 @@ class BuiltinConditions:
|
|||||||
return False
|
return False
|
||||||
try:
|
try:
|
||||||
return content in p.read_text(encoding="utf-8")
|
return content in p.read_text(encoding="utf-8")
|
||||||
except Exception:
|
except (OSError, UnicodeDecodeError):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
return _static(_check, f"FILE_CONTENT_EXISTS({path!r},{content!r})")
|
return _static(_check, f"FILE_CONTENT_EXISTS({path!r},{content!r})")
|
||||||
@@ -186,7 +189,8 @@ class BuiltinConditions:
|
|||||||
return False
|
return False
|
||||||
try:
|
try:
|
||||||
return predicate(ctx[dep_name])
|
return predicate(ctx[dep_name])
|
||||||
except Exception:
|
except Exception as exc:
|
||||||
|
logger.warning("DEP_MATCHES predicate %r raised: %r", dep_name, exc)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
_cond.__name__ = f"DEP_MATCHES({dep_name!r},{getattr(predicate, '__name__', 'pred')})"
|
_cond.__name__ = f"DEP_MATCHES({dep_name!r},{getattr(predicate, '__name__', 'pred')})"
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ from .report import RunReport
|
|||||||
from .storage import StateBackend, resolve_backend
|
from .storage import StateBackend, resolve_backend
|
||||||
from .task import TaskEvent, TaskHooks, TaskResult, TaskSpec, TaskStatus
|
from .task import TaskEvent, TaskHooks, TaskResult, TaskSpec, TaskStatus
|
||||||
|
|
||||||
logger = logging.getLogger("pyflowx")
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# 观察者回调类型。
|
# 观察者回调类型。
|
||||||
EventCallback = Callable[[TaskEvent], None]
|
EventCallback = Callable[[TaskEvent], None]
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import argparse
|
|||||||
import enum
|
import enum
|
||||||
import sys
|
import sys
|
||||||
from dataclasses import dataclass, field, replace
|
from dataclasses import dataclass, field, replace
|
||||||
|
from pathlib import Path
|
||||||
from typing import Any, Sequence, get_args
|
from typing import Any, Sequence, get_args
|
||||||
|
|
||||||
from .compose import GraphComposer
|
from .compose import GraphComposer
|
||||||
@@ -138,9 +139,7 @@ class CliRunner:
|
|||||||
# ------------------------------------------------------------------ #
|
# ------------------------------------------------------------------ #
|
||||||
def _prog_name(self) -> str:
|
def _prog_name(self) -> str:
|
||||||
"""从 sys.argv[0] 推导程序名."""
|
"""从 sys.argv[0] 推导程序名."""
|
||||||
import os
|
return Path(sys.argv[0]).name if sys.argv else "pyflowx"
|
||||||
|
|
||||||
return os.path.basename(sys.argv[0]) if sys.argv else "pyflowx"
|
|
||||||
|
|
||||||
def create_parser(self) -> argparse.ArgumentParser:
|
def create_parser(self) -> argparse.ArgumentParser:
|
||||||
"""创建参数解析器.
|
"""创建参数解析器.
|
||||||
|
|||||||
+1
-1
@@ -69,7 +69,7 @@ TaskCmd = Union[
|
|||||||
Strategy = Union[str, "StrategyKind"]
|
Strategy = Union[str, "StrategyKind"]
|
||||||
StrategyKind = Any # 占位,避免循环;executors 模块用 Literal 约束
|
StrategyKind = Any # 占位,避免循环;executors 模块用 Literal 约束
|
||||||
|
|
||||||
logger = logging.getLogger("pyflowx")
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
# 条件判断函数类型:接收依赖上下文(可能为空映射),返回是否应执行。
|
# 条件判断函数类型:接收依赖上下文(可能为空映射),返回是否应执行。
|
||||||
Condition = Callable[[Context], bool]
|
Condition = Callable[[Context], bool]
|
||||||
|
|||||||
Reference in New Issue
Block a user