mirror of
https://github.com/freqtrade/freqtrade.git
synced 2025-11-29 08:33:07 +00:00
Merge pull request #11789 from freqtrade/fix/customdata_sessions
fix: improved session handling for custom_data sessions
This commit is contained in:
@@ -2,6 +2,7 @@
|
|||||||
This module contains the class to persist trades into SQLite
|
This module contains the class to persist trades into SQLite
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
import functools
|
||||||
import logging
|
import logging
|
||||||
import threading
|
import threading
|
||||||
from contextvars import ContextVar
|
from contextvars import ContextVar
|
||||||
@@ -94,3 +95,22 @@ def init_db(db_url: str) -> None:
|
|||||||
previous_tables = inspect(engine).get_table_names()
|
previous_tables = inspect(engine).get_table_names()
|
||||||
ModelBase.metadata.create_all(engine)
|
ModelBase.metadata.create_all(engine)
|
||||||
check_migrate(engine, decl_base=ModelBase, previous_tables=previous_tables)
|
check_migrate(engine, decl_base=ModelBase, previous_tables=previous_tables)
|
||||||
|
|
||||||
|
|
||||||
|
def custom_data_rpc_wrapper(func):
|
||||||
|
"""
|
||||||
|
Wrapper for RPC methods when using custom_data
|
||||||
|
Similar behavior to deps.get_rpc() - but limited to custom_data.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@functools.wraps(func)
|
||||||
|
def wrapper(*args, **kwargs):
|
||||||
|
try:
|
||||||
|
_CustomData.session.rollback()
|
||||||
|
return func(*args, **kwargs)
|
||||||
|
finally:
|
||||||
|
_CustomData.session.rollback()
|
||||||
|
# Ensure the session is removed after use
|
||||||
|
_CustomData.session.remove()
|
||||||
|
|
||||||
|
return wrapper
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ from freqtrade.exchange.exchange_utils import price_to_precision
|
|||||||
from freqtrade.ft_types import AnnotationType
|
from freqtrade.ft_types import AnnotationType
|
||||||
from freqtrade.loggers import bufferHandler
|
from freqtrade.loggers import bufferHandler
|
||||||
from freqtrade.persistence import CustomDataWrapper, KeyValueStore, PairLocks, Trade
|
from freqtrade.persistence import CustomDataWrapper, KeyValueStore, PairLocks, Trade
|
||||||
from freqtrade.persistence.models import PairLock
|
from freqtrade.persistence.models import PairLock, custom_data_rpc_wrapper
|
||||||
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
|
from freqtrade.plugins.pairlist.pairlist_helpers import expand_pairlist
|
||||||
from freqtrade.rpc.fiat_convert import CryptoToFiatConverter
|
from freqtrade.rpc.fiat_convert import CryptoToFiatConverter
|
||||||
from freqtrade.rpc.rpc_types import RPCSendMsg
|
from freqtrade.rpc.rpc_types import RPCSendMsg
|
||||||
@@ -1125,6 +1125,7 @@ class RPC:
|
|||||||
"cancel_order_count": c_count,
|
"cancel_order_count": c_count,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@custom_data_rpc_wrapper
|
||||||
def _rpc_list_custom_data(
|
def _rpc_list_custom_data(
|
||||||
self, trade_id: int | None = None, key: str | None = None, limit: int = 100, offset: int = 0
|
self, trade_id: int | None = None, key: str | None = None, limit: int = 100, offset: int = 0
|
||||||
) -> list[dict[str, Any]]:
|
) -> list[dict[str, Any]]:
|
||||||
@@ -1137,6 +1138,7 @@ class RPC:
|
|||||||
- "custom_data": a list of custom data dicts, each with the fields:
|
- "custom_data": a list of custom data dicts, each with the fields:
|
||||||
"id", "key", "type", "value", "created_at", "updated_at"
|
"id", "key", "type", "value", "created_at", "updated_at"
|
||||||
"""
|
"""
|
||||||
|
|
||||||
trades: Sequence[Trade]
|
trades: Sequence[Trade]
|
||||||
if trade_id is None:
|
if trade_id is None:
|
||||||
# Get all open trades
|
# Get all open trades
|
||||||
|
|||||||
Reference in New Issue
Block a user