Add Lock post endpoint
(allows manual locking through API) closes #10018
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
from datetime import date, datetime
|
from datetime import date, datetime
|
||||||
from typing import Any, Dict, List, Optional, Union
|
from typing import Any, Dict, List, Optional, Union
|
||||||
|
|
||||||
from pydantic import BaseModel, RootModel, SerializeAsAny
|
from pydantic import AwareDatetime, BaseModel, RootModel, SerializeAsAny
|
||||||
|
|
||||||
from freqtrade.constants import IntOrInf
|
from freqtrade.constants import IntOrInf
|
||||||
from freqtrade.enums import MarginMode, OrderTypeValues, SignalDirection, TradingMode
|
from freqtrade.enums import MarginMode, OrderTypeValues, SignalDirection, TradingMode
|
||||||
@@ -378,6 +378,13 @@ class Locks(BaseModel):
|
|||||||
locks: List[LockModel]
|
locks: List[LockModel]
|
||||||
|
|
||||||
|
|
||||||
|
class LocksPayload(BaseModel):
|
||||||
|
pair: str
|
||||||
|
side: str = '*' # Default to both sides
|
||||||
|
until: AwareDatetime
|
||||||
|
reason: Optional[str] = None
|
||||||
|
|
||||||
|
|
||||||
class DeleteLockRequest(BaseModel):
|
class DeleteLockRequest(BaseModel):
|
||||||
pair: Optional[str] = None
|
pair: Optional[str] = None
|
||||||
lockid: Optional[int] = None
|
lockid: Optional[int] = None
|
||||||
|
|||||||
@@ -15,10 +15,10 @@ from freqtrade.rpc.api_server.api_schemas import (AvailablePairs, Balances, Blac
|
|||||||
DeleteLockRequest, DeleteTrade, Entry,
|
DeleteLockRequest, DeleteTrade, Entry,
|
||||||
ExchangeListResponse, Exit, ForceEnterPayload,
|
ExchangeListResponse, Exit, ForceEnterPayload,
|
||||||
ForceEnterResponse, ForceExitPayload,
|
ForceEnterResponse, ForceExitPayload,
|
||||||
FreqAIModelListResponse, Health, Locks, Logs,
|
FreqAIModelListResponse, Health, Locks,
|
||||||
MixTag, OpenTradeSchema, PairHistory,
|
LocksPayload, Logs, MixTag, OpenTradeSchema,
|
||||||
PerformanceEntry, Ping, PlotConfig, Profit,
|
PairHistory, PerformanceEntry, Ping, PlotConfig,
|
||||||
ResultMsg, ShowConfig, Stats, StatusMsg,
|
Profit, ResultMsg, ShowConfig, Stats, StatusMsg,
|
||||||
StrategyListResponse, StrategyResponse, SysInfo,
|
StrategyListResponse, StrategyResponse, SysInfo,
|
||||||
Version, WhitelistResponse)
|
Version, WhitelistResponse)
|
||||||
from freqtrade.rpc.api_server.deps import get_config, get_exchange, get_rpc, get_rpc_optional
|
from freqtrade.rpc.api_server.deps import get_config, get_exchange, get_rpc, get_rpc_optional
|
||||||
@@ -255,6 +255,13 @@ def delete_lock_pair(payload: DeleteLockRequest, rpc: RPC = Depends(get_rpc)):
|
|||||||
return rpc._rpc_delete_lock(lockid=payload.lockid, pair=payload.pair)
|
return rpc._rpc_delete_lock(lockid=payload.lockid, pair=payload.pair)
|
||||||
|
|
||||||
|
|
||||||
|
@router.post('/locks', response_model=Locks, tags=['info', 'locks'])
|
||||||
|
def add_locks(payload: List[LocksPayload], rpc: RPC = Depends(get_rpc)):
|
||||||
|
for lock in payload:
|
||||||
|
rpc._rpc_add_lock(lock.pair, lock.until, lock.reason, lock.side)
|
||||||
|
return rpc._rpc_locks()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/logs', response_model=Logs, tags=['info'])
|
@router.get('/logs', response_model=Logs, tags=['info'])
|
||||||
def logs(limit: Optional[int] = None):
|
def logs(limit: Optional[int] = None):
|
||||||
return RPC._rpc_get_logs(limit)
|
return RPC._rpc_get_logs(limit)
|
||||||
|
|||||||
@@ -1104,6 +1104,15 @@ class RPC:
|
|||||||
|
|
||||||
return self._rpc_locks()
|
return self._rpc_locks()
|
||||||
|
|
||||||
|
def _rpc_add_lock(self, pair: str, until: datetime, reason: str, side: str) -> Dict[str, Any]:
|
||||||
|
lock = PairLocks.lock_pair(
|
||||||
|
pair=pair,
|
||||||
|
until=until,
|
||||||
|
reason=reason,
|
||||||
|
side=side,
|
||||||
|
)
|
||||||
|
return lock
|
||||||
|
|
||||||
def _rpc_whitelist(self) -> Dict:
|
def _rpc_whitelist(self) -> Dict:
|
||||||
""" Returns the currently active whitelist"""
|
""" Returns the currently active whitelist"""
|
||||||
res = {'method': self._freqtrade.pairlists.name_list,
|
res = {'method': self._freqtrade.pairlists.name_list,
|
||||||
|
|||||||
Reference in New Issue
Block a user