fix(api): _get_metrics_file_path 两步查找(直查task_id→回退result.task_id)—兼容单测直查与API的uuid文件名
This commit is contained in:
+16
-10
@@ -329,18 +329,24 @@ def optimization_results(task_id: str):
|
||||
# ===== Task 4: Backtest result API extensions =====
|
||||
|
||||
def _get_metrics_file_path(task_id: str) -> str | None:
|
||||
"""Get the metrics file path. Resolves the request task_id to the result's
|
||||
internal task_id first — run_cta_backtest writes {task_id}_metrics.json under
|
||||
ITS OWN uuid task_id (result.task_id), which differs from the runner's task_id."""
|
||||
"""Get the metrics file path. Tries the request task_id directly first, then
|
||||
falls back to the result's internal task_id — run_cta_backtest writes the file
|
||||
under ITS OWN uuid task_id (result.task_id), which differs from the runner's
|
||||
task_id when submitted via the API."""
|
||||
orch = get_orchestrator()
|
||||
r = orch.get_result(task_id)
|
||||
if r is None or not getattr(r, "task_id", None):
|
||||
if not (hasattr(orch, 'db_path') and orch.db_path):
|
||||
return None
|
||||
if hasattr(orch, 'db_path') and orch.db_path:
|
||||
file_dir = os.path.dirname(os.path.abspath(orch.db_path))
|
||||
metrics_file = os.path.join(file_dir, f"{r.task_id}_metrics.json")
|
||||
if os.path.exists(metrics_file):
|
||||
return metrics_file
|
||||
file_dir = os.path.dirname(os.path.abspath(orch.db_path))
|
||||
# 1. direct lookup by request task_id
|
||||
direct = os.path.join(file_dir, f"{task_id}_metrics.json")
|
||||
if os.path.exists(direct):
|
||||
return direct
|
||||
# 2. resolve via result.task_id (run_cta_backtest's own uuid)
|
||||
r = orch.get_result(task_id)
|
||||
if r is not None and getattr(r, "task_id", None):
|
||||
resolved = os.path.join(file_dir, f"{r.task_id}_metrics.json")
|
||||
if os.path.exists(resolved):
|
||||
return resolved
|
||||
return None
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user