Speed up journal save with AJAX and async K-line charts.
Defer exchange chart generation to a background thread and save via XHR so fill-from-trade no longer blocks on full page reload. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
from unittest import TestCase
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
from lib.instance.journal_chart_async_lib import (
|
||||
request_wants_journal_ajax,
|
||||
schedule_journal_exchange_chart,
|
||||
)
|
||||
|
||||
|
||||
class _FakeHeaders(dict):
|
||||
def get(self, key, default=None):
|
||||
for k, v in self.items():
|
||||
if str(k).lower() == str(key).lower():
|
||||
return v
|
||||
return default
|
||||
|
||||
|
||||
class JournalChartAsyncLibTests(TestCase):
|
||||
def test_request_wants_journal_ajax_xhr(self):
|
||||
req = MagicMock()
|
||||
req.headers = _FakeHeaders({"X-Requested-With": "XMLHttpRequest"})
|
||||
req.form = {}
|
||||
self.assertTrue(request_wants_journal_ajax(req))
|
||||
|
||||
def test_request_wants_journal_ajax_form(self):
|
||||
req = MagicMock()
|
||||
req.headers = _FakeHeaders({})
|
||||
req.form = {"ajax": "1"}
|
||||
self.assertTrue(request_wants_journal_ajax(req))
|
||||
|
||||
def test_request_wants_journal_ajax_plain(self):
|
||||
req = MagicMock()
|
||||
req.headers = _FakeHeaders({"Accept": "text/html"})
|
||||
req.form = {}
|
||||
self.assertFalse(request_wants_journal_ajax(req))
|
||||
|
||||
@patch("lib.instance.journal_chart_async_lib.threading.Thread")
|
||||
def test_schedule_starts_daemon_thread(self, mock_thread_cls):
|
||||
thread = MagicMock()
|
||||
mock_thread_cls.return_value = thread
|
||||
schedule_journal_exchange_chart(
|
||||
entry_id="abc123",
|
||||
exchange_symbol="BTC/USDT:USDT",
|
||||
title_prefix="t",
|
||||
journal_tfs=["5m", "15m"],
|
||||
journal_limit=100,
|
||||
marker_payload={},
|
||||
upload_folder="/tmp",
|
||||
generate_chart_fn=MagicMock(),
|
||||
get_db_fn=MagicMock(),
|
||||
)
|
||||
mock_thread_cls.assert_called_once()
|
||||
kwargs = mock_thread_cls.call_args.kwargs
|
||||
self.assertTrue(kwargs.get("daemon"))
|
||||
thread.start.assert_called_once()
|
||||
Reference in New Issue
Block a user