From 396a2747d3405ca5543938cd10456ce32172089a Mon Sep 17 00:00:00 2001 From: Bill Date: Sun, 2 Nov 2025 17:16:55 -0500 Subject: [PATCH] fix: resolve async execution and position storage issues - Fix async call in model_day_executor.py by wrapping with asyncio.run() Resolves RuntimeWarning where run_trading_session coroutine was never awaited - Remove register_agent() call in API mode to prevent file-based position storage Position data is now stored exclusively in SQLite database (jobs.db) - Update test mocks to use AsyncMock for async run_trading_session method This fixes production deployment issues: 1. Trading sessions now execute properly (async bug) 2. No position files created, database-only storage 3. All tests pass Closes issue with no trades being executed in production --- api/model_day_executor.py | 9 ++++++--- tests/unit/test_model_day_executor.py | 5 +++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/api/model_day_executor.py b/api/model_day_executor.py index 23b8489..1b2d5e6 100644 --- a/api/model_day_executor.py +++ b/api/model_day_executor.py @@ -11,6 +11,7 @@ This module provides: import logging import os +import asyncio from typing import Dict, Any, Optional, List, TYPE_CHECKING from pathlib import Path @@ -118,7 +119,7 @@ class ModelDayExecutor: # Run trading session logger.info(f"Running trading session for {self.model_sig} on {self.date}") - session_result = agent.run_trading_session(self.date) + session_result = asyncio.run(agent.run_trading_session(self.date)) # Persist results to SQLite self._write_results_to_db(agent, session_result) @@ -211,8 +212,10 @@ class ModelDayExecutor: init_date=config.get("date_range", {}).get("init_date", "2025-10-13") ) - # Register agent (creates initial position if needed) - agent.register_agent() + # Note: In API mode, we don't call register_agent() because: + # - Position data is stored in SQLite database, not files + # - Database initialization is handled by JobManager + # - File-based position tracking is only for standalone/CLI mode return agent diff --git a/tests/unit/test_model_day_executor.py b/tests/unit/test_model_day_executor.py index da0b27b..648ad88 100644 --- a/tests/unit/test_model_day_executor.py +++ b/tests/unit/test_model_day_executor.py @@ -14,7 +14,7 @@ Tests verify: import pytest import json -from unittest.mock import Mock, patch, MagicMock +from unittest.mock import Mock, patch, MagicMock, AsyncMock from pathlib import Path @@ -29,7 +29,8 @@ def create_mock_agent(positions=None, last_trade=None, current_prices=None, mock_agent.get_current_prices.return_value = current_prices or {} mock_agent.get_reasoning_steps.return_value = reasoning_steps or [] mock_agent.get_tool_usage.return_value = tool_usage or {} - mock_agent.run_trading_session.return_value = session_result or {"success": True} + # run_trading_session is async, so use AsyncMock + mock_agent.run_trading_session = AsyncMock(return_value=session_result or {"success": True}) return mock_agent