vibego 0.2.52__py3-none-any.whl → 1.0.0__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.

Potentially problematic release.


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

logging_setup.py CHANGED
@@ -1,7 +1,4 @@
1
- """统一日志配置工具。
2
-
3
- 提供 master / worker 共用的 logging 配置,确保写入同一文件。
4
- """
1
+ """Unified logging configuration helpers shared between master and worker."""
5
2
 
6
3
  from __future__ import annotations
7
4
 
@@ -19,10 +16,10 @@ _CONFIGURED = False
19
16
 
20
17
 
21
18
  class ContextLoggerAdapter(logging.LoggerAdapter):
22
- """支持 per-call extra 覆盖的 LoggerAdapter。"""
19
+ """LoggerAdapter that allows per-call extra overrides."""
23
20
 
24
21
  def process(self, msg: str, kwargs: Dict[str, Any]) -> tuple[str, Dict[str, Any]]:
25
- """合并默认 extra 与调用者提供的 extra,避免上下文丢失。"""
22
+ """Merge default extras with user-provided extras to preserve context."""
26
23
 
27
24
  provided: Optional[Dict[str, Any]] = kwargs.pop("extra", None)
28
25
  merged: Dict[str, Any] = dict(self.extra)
@@ -32,18 +29,28 @@ class ContextLoggerAdapter(logging.LoggerAdapter):
32
29
  return msg, kwargs
33
30
 
34
31
 
32
+ def _default_config_root() -> Path:
33
+ """Resolve the configuration root based on environment variables and XDG conventions."""
34
+
35
+ override = os.environ.get("MASTER_CONFIG_ROOT") or os.environ.get("VIBEGO_CONFIG_DIR")
36
+ if override:
37
+ return Path(override).expanduser()
38
+ xdg_base = os.environ.get("XDG_CONFIG_HOME")
39
+ base = Path(xdg_base).expanduser() if xdg_base else Path.home() / ".config"
40
+ return base / "vibego"
41
+
42
+
35
43
  def _resolve_log_file() -> Path:
36
- """根据环境变量确定日志文件位置。"""
37
- root = Path(__file__).resolve().parent
44
+ """Determine the log file path using environment variables when available."""
38
45
  candidate = os.environ.get("LOG_FILE")
39
- target = Path(candidate) if candidate else root / "vibe.log"
40
- target = target.expanduser()
46
+ default_path = _default_config_root() / "logs/vibe.log"
47
+ target = Path(candidate).expanduser() if candidate else default_path
41
48
  target.parent.mkdir(parents=True, exist_ok=True)
42
49
  return target
43
50
 
44
51
 
45
52
  def _determine_level(level_name: str) -> int:
46
- """解析日志等级字符串,无法识别时回退为 INFO"""
53
+ """Resolve a log level string, falling back to INFO if unknown."""
47
54
 
48
55
  level = getattr(logging, level_name.upper(), None)
49
56
  if isinstance(level, int):
@@ -52,7 +59,7 @@ def _determine_level(level_name: str) -> int:
52
59
 
53
60
 
54
61
  def _resolve_timezone() -> ZoneInfo:
55
- """从环境变量解析日志时区,默认为上海时区。"""
62
+ """Parse the log timezone from environment variables, defaulting to Asia/Shanghai."""
56
63
 
57
64
  tz_name = os.environ.get("LOG_TIMEZONE", "Asia/Shanghai").strip()
58
65
  try:
@@ -62,15 +69,15 @@ def _resolve_timezone() -> ZoneInfo:
62
69
 
63
70
 
64
71
  class _TimezoneFormatter(logging.Formatter):
65
- """将日志时间统一格式化为指定时区。"""
72
+ """Format log timestamps using a specific timezone."""
66
73
 
67
74
  def __init__(self, *args: Any, timezone: ZoneInfo, **kwargs: Any) -> None:
68
- """保存目标时区并初始化基础 Formatter。"""
75
+ """Store the target timezone and initialise the base formatter."""
69
76
  super().__init__(*args, **kwargs)
70
77
  self._timezone = timezone
71
78
 
72
79
  def formatTime(self, record: logging.LogRecord, datefmt: Optional[str] = None) -> str:
73
- """按照预设时区格式化日志时间。"""
80
+ """Format the timestamp according to the configured timezone."""
74
81
  dt = datetime.fromtimestamp(record.created, tz=self._timezone)
75
82
  if datefmt:
76
83
  return dt.strftime(datefmt)
@@ -78,7 +85,7 @@ class _TimezoneFormatter(logging.Formatter):
78
85
 
79
86
 
80
87
  def configure_base_logger(*, level_env: str | None = None, stderr_env: str | None = None) -> logging.Logger:
81
- """初始化基础 logger,仅执行一次。"""
88
+ """Initialise the base logger (idempotent)."""
82
89
  global _CONFIGURED
83
90
  logger = logging.getLogger("vibe")
84
91
  if _CONFIGURED:
@@ -122,7 +129,7 @@ def create_logger(
122
129
  level_env: str | None = None,
123
130
  stderr_env: str | None = None,
124
131
  ) -> ContextLoggerAdapter:
125
- """创建带上下文的 LoggerAdapter"""
132
+ """Create a LoggerAdapter with context enrichments."""
126
133
 
127
134
  base = configure_base_logger(level_env=level_env, stderr_env=stderr_env)
128
135
  extra = {
@@ -135,7 +142,7 @@ def create_logger(
135
142
 
136
143
 
137
144
  def enrich(logger: ContextLoggerAdapter, **kwargs: Any) -> ContextLoggerAdapter:
138
- """返回带额外上下文的新 LoggerAdapter"""
145
+ """Return a new LoggerAdapter with extended context."""
139
146
 
140
147
  merged: Dict[str, Any] = {**getattr(logger, "extra", {}), **kwargs}
141
148
  return ContextLoggerAdapter(logger.logger, merged)