freqtrade_origin/freqtrade/rpc/api_server/deps.py

72 lines
2.0 KiB
Python
Raw Normal View History

from collections.abc import AsyncIterator
from typing import Any
from uuid import uuid4
2021-01-02 11:54:40 +00:00
from fastapi import Depends, HTTPException
2022-01-22 06:11:59 +00:00
from freqtrade.constants import Config
from freqtrade.enums import RunMode
from freqtrade.persistence import Trade
from freqtrade.persistence.models import _request_id_ctx_var
from freqtrade.rpc.api_server.webserver_bgwork import ApiBG
2021-01-02 12:12:49 +00:00
from freqtrade.rpc.rpc import RPC, RPCException
2021-01-02 11:54:40 +00:00
from .webserver import ApiServer
def get_rpc_optional() -> RPC | None:
2021-01-02 12:12:49 +00:00
if ApiServer._has_rpc:
return ApiServer._rpc
return None
async def get_rpc() -> AsyncIterator[RPC] | None:
2021-01-02 12:12:49 +00:00
_rpc = get_rpc_optional()
if _rpc:
request_id = str(uuid4())
ctx_token = _request_id_ctx_var.set(request_id)
Trade.rollback()
try:
yield _rpc
finally:
Trade.session.remove()
_request_id_ctx_var.reset(ctx_token)
2021-01-02 12:12:49 +00:00
else:
2024-05-12 14:51:11 +00:00
raise RPCException("Bot is not in the correct state")
def get_config() -> dict[str, Any]:
return ApiServer._config
2020-12-27 14:24:49 +00:00
def get_api_config() -> dict[str, Any]:
2024-05-12 14:51:11 +00:00
return ApiServer._config["api_server"]
2022-01-22 06:11:59 +00:00
def _generate_exchange_key(config: Config) -> str:
"""
Exchange key - used for caching the exchange object.
"""
return f"{config['exchange']['name']}_{config.get('trading_mode', 'spot')}"
2022-01-22 06:11:59 +00:00
def get_exchange(config=Depends(get_config)):
exchange_key = _generate_exchange_key(config)
if not (exchange := ApiBG.exchanges.get(exchange_key)):
2022-01-22 06:11:59 +00:00
from freqtrade.resolvers import ExchangeResolver
2024-05-12 14:51:11 +00:00
exchange = ExchangeResolver.load_exchange(config, validate=False, load_leverage_tiers=False)
ApiBG.exchanges[exchange_key] = exchange
return exchange
2022-11-15 03:27:45 +00:00
def get_message_stream():
return ApiServer._message_stream
def is_webserver_mode(config=Depends(get_config)):
2024-05-12 14:51:11 +00:00
if config["runmode"] != RunMode.WEBSERVER:
raise HTTPException(status_code=503, detail="Bot is not in the correct state.")
return None