Bläddra i källkod

fix(datax): entry ini 相对路径按 base_dir 解析,不依赖 cwd

expand_ini_inputs 原走 os.path.abspath(ini),结果依赖 Python 进程的 cwd。
用户从 bin/ 目录跑时 cwd=bin/,相对路径 tests/... 拼成 bin/tests/... 挂。
entry 层预先用 base_dir 拼绝对路径再传给 expand,不靠 cwd。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
tianyu.chu 1 vecka sedan
förälder
incheckning
5cc7aa472f
1 ändrade filer med 13 tillägg och 2 borttagningar
  1. 13 2
      dw_base/datax/entry.py

+ 13 - 2
dw_base/datax/entry.py

@@ -28,6 +28,13 @@ def _is_in_release_dir(base_dir: str, release_root_dir: str, project_name: str)
     return os.path.abspath(base_dir).startswith(expected)
 
 
+def _resolve_relative_to_base(path: str, base_dir: str) -> str:
+    """ini / inis 相对路径按 base_dir 解析(不依赖 Python 进程 cwd)。绝对路径原样返回。"""
+    if os.path.isabs(path):
+        return path
+    return os.path.join(base_dir, path)
+
+
 class _BaseDatax:
     """共享基类:加载 workers pool、解析环境、构造 run_one 闭包。"""
 
@@ -115,7 +122,9 @@ class DataxImport(_BaseDatax):
         """
         Returns: 失败任务数(0 = 全部成功)
         """
-        ini_list = batch.expand_ini_inputs(inis, inis_dirs)
+        resolved_inis = [_resolve_relative_to_base(p, self.base_dir) for p in inis]
+        resolved_dirs = [_resolve_relative_to_base(p, self.base_dir) for p in inis_dirs]
+        ini_list = batch.expand_ini_inputs(resolved_inis, resolved_dirs)
         if not ini_list:
             return 0
 
@@ -155,7 +164,9 @@ class DataxExport(_BaseDatax):
         """
         Returns: 失败任务数(0 = 全部成功)
         """
-        ini_list = batch.expand_ini_inputs(inis, inis_dirs)
+        resolved_inis = [_resolve_relative_to_base(p, self.base_dir) for p in inis]
+        resolved_dirs = [_resolve_relative_to_base(p, self.base_dir) for p in inis_dirs]
+        ini_list = batch.expand_ini_inputs(resolved_inis, resolved_dirs)
         if not ini_list:
             return 0
         run_one = self._make_run_one(start_date, stop_date, host, use_random, parallel, skip_datax)