Merge pull request #12810 from freqtrade/update/pre-commit-hooks

Update pre-commit hooks
pull/12813/head
Matthias 1 week ago committed by GitHub
commit 3f21a18f46
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -44,7 +44,7 @@ repos:
- repo: https://github.com/charliermarsh/ruff-pre-commit
# Ruff version.
rev: 'v0.14.14'
rev: 'v0.15.0'
hooks:
- id: ruff
- id: ruff-format

@ -1,7 +1,7 @@
from enum import Enum
from enum import StrEnum
class CandleType(str, Enum):
class CandleType(StrEnum):
"""Enum to distinguish candle types"""
SPOT = "spot"
@ -14,9 +14,6 @@ class CandleType(str, Enum):
FUNDING_RATE = "funding_rate"
# BORROW_RATE = "borrow_rate" # * unimplemented
def __str__(self):
return f"{self.name.lower()}"
@staticmethod
def from_string(value: str) -> "CandleType":
if not value:

@ -1,7 +1,7 @@
from enum import Enum
from enum import StrEnum
class MarginMode(str, Enum):
class MarginMode(StrEnum):
"""
Enum to distinguish between
cross margin/futures margin_mode and
@ -11,6 +11,3 @@ class MarginMode(str, Enum):
CROSS = "cross"
ISOLATED = "isolated"
NONE = ""
def __str__(self):
return f"{self.value.lower()}"

@ -1,6 +1,6 @@
from enum import Enum
from enum import StrEnum
class OrderTypeValues(str, Enum):
class OrderTypeValues(StrEnum):
limit = "limit"
market = "market"

@ -1,7 +1,7 @@
from enum import Enum
from enum import StrEnum
class PriceType(str, Enum):
class PriceType(StrEnum):
"""Enum to distinguish possible trigger prices for stoplosses"""
LAST = "last"

@ -1,7 +1,7 @@
from enum import Enum
from enum import StrEnum
class RPCMessageType(str, Enum):
class RPCMessageType(StrEnum):
STATUS = "status"
WARNING = "warning"
EXCEPTION = "exception"
@ -25,21 +25,16 @@ class RPCMessageType(str, Enum):
NEW_CANDLE = "new_candle"
def __repr__(self):
return self.value
def __str__(self):
# TODO: do we still need to overwrite __repr__? Impact needs to be looked at in detail
return self.value
# Enum for parsing requests from ws consumers
class RPCRequestType(str, Enum):
class RPCRequestType(StrEnum):
SUBSCRIBE = "subscribe"
WHITELIST = "whitelist"
ANALYZED_DF = "analyzed_df"
def __str__(self):
return self.value
NO_ECHO_MESSAGES = (RPCMessageType.ANALYZED_DF, RPCMessageType.WHITELIST, RPCMessageType.NEW_CANDLE)

@ -1,7 +1,7 @@
from enum import Enum
from enum import StrEnum
class RunMode(str, Enum):
class RunMode(StrEnum):
"""
Bot running mode (backtest, hyperopt, ...)
can be "live", "dry-run", "backtest", "hyperopt".

@ -1,7 +1,7 @@
from enum import Enum
from enum import StrEnum
class SignalType(Enum):
class SignalType(StrEnum):
"""
Enum to distinguish between enter and exit signals
"""
@ -11,11 +11,8 @@ class SignalType(Enum):
ENTER_SHORT = "enter_short"
EXIT_SHORT = "exit_short"
def __str__(self):
return f"{self.name.lower()}"
class SignalTagType(Enum):
class SignalTagType(StrEnum):
"""
Enum for signal columns
"""
@ -23,13 +20,7 @@ class SignalTagType(Enum):
ENTER_TAG = "enter_tag"
EXIT_TAG = "exit_tag"
def __str__(self):
return f"{self.name.lower()}"
class SignalDirection(str, Enum):
class SignalDirection(StrEnum):
LONG = "long"
SHORT = "short"
def __str__(self):
return f"{self.name.lower()}"

@ -1,7 +1,7 @@
from enum import Enum
from enum import StrEnum
class TradingMode(str, Enum):
class TradingMode(StrEnum):
"""
Enum to distinguish between
spot, margin, futures or any other trading method
@ -10,6 +10,3 @@ class TradingMode(str, Enum):
SPOT = "spot"
MARGIN = "margin"
FUTURES = "futures"
def __str__(self):
return f"{self.name.lower()}"

@ -207,7 +207,7 @@ class Exchange:
self._config.get("trading_mode", self._supported_trading_mode_margin_pairs[0][0])
)
self.margin_mode: MarginMode = MarginMode(
MarginMode(self._config.get("margin_mode"))
self._config["margin_mode"]
if self._config.get("margin_mode")
else self._supported_trading_mode_margin_pairs[0][1]
)

@ -210,12 +210,12 @@ def remove_entry_exit_signals(dataframe: pd.DataFrame):
:param dataframe: The DataFrame to remove signals from
"""
dataframe[SignalType.ENTER_LONG.value] = 0
dataframe[SignalType.EXIT_LONG.value] = 0
dataframe[SignalType.ENTER_SHORT.value] = 0
dataframe[SignalType.EXIT_SHORT.value] = 0
dataframe[SignalTagType.ENTER_TAG.value] = None
dataframe[SignalTagType.EXIT_TAG.value] = None
dataframe[SignalType.ENTER_LONG] = 0
dataframe[SignalType.EXIT_LONG] = 0
dataframe[SignalType.ENTER_SHORT] = 0
dataframe[SignalType.EXIT_SHORT] = 0
dataframe[SignalTagType.ENTER_TAG] = None
dataframe[SignalTagType.EXIT_TAG] = None
return dataframe

@ -1,5 +1,5 @@
from datetime import UTC, datetime
from enum import Enum
from enum import StrEnum
from typing import ClassVar, Literal
from sqlalchemy import String
@ -11,7 +11,7 @@ from freqtrade.persistence.base import ModelBase, SessionType
ValueTypes = str | datetime | float | int
class ValueTypesEnum(str, Enum):
class ValueTypesEnum(StrEnum):
STRING = "str"
DATETIME = "datetime"
FLOAT = "float"

@ -5,7 +5,7 @@ PairList Handler base class
import logging
from abc import ABC, abstractmethod
from copy import deepcopy
from enum import Enum
from enum import StrEnum
from typing import Any, Literal, TypedDict
from freqtrade.constants import Config
@ -58,7 +58,7 @@ PairlistParameter = (
)
class SupportsBacktesting(str, Enum):
class SupportsBacktesting(StrEnum):
"""
Enum to indicate if a Pairlist Handler supports backtesting.
"""

@ -1329,13 +1329,13 @@ class IStrategy(ABC, HyperStrategyMixin):
return False, False, None
if is_short:
enter = latest.get(SignalType.ENTER_SHORT.value, 0) == 1
exit_ = latest.get(SignalType.EXIT_SHORT.value, 0) == 1
enter = latest.get(SignalType.ENTER_SHORT, 0) == 1
exit_ = latest.get(SignalType.EXIT_SHORT, 0) == 1
else:
enter = latest.get(SignalType.ENTER_LONG.value, 0) == 1
exit_ = latest.get(SignalType.EXIT_LONG.value, 0) == 1
exit_tag = latest.get(SignalTagType.EXIT_TAG.value, None)
enter = latest.get(SignalType.ENTER_LONG, 0) == 1
exit_ = latest.get(SignalType.EXIT_LONG, 0) == 1
exit_tag = latest.get(SignalTagType.EXIT_TAG, None)
# Tags can be None, which does not resolve to False.
exit_tag = exit_tag if isinstance(exit_tag, str) and exit_tag != "nan" else None
@ -1362,16 +1362,16 @@ class IStrategy(ABC, HyperStrategyMixin):
if latest is None or latest_date is None:
return None, None
enter_long = latest.get(SignalType.ENTER_LONG.value, 0) == 1
exit_long = latest.get(SignalType.EXIT_LONG.value, 0) == 1
enter_short = latest.get(SignalType.ENTER_SHORT.value, 0) == 1
exit_short = latest.get(SignalType.EXIT_SHORT.value, 0) == 1
enter_long = latest.get(SignalType.ENTER_LONG, 0) == 1
exit_long = latest.get(SignalType.EXIT_LONG, 0) == 1
enter_short = latest.get(SignalType.ENTER_SHORT, 0) == 1
exit_short = latest.get(SignalType.EXIT_SHORT, 0) == 1
enter_signal: SignalDirection | None = None
enter_tag: str | None = None
if enter_long == 1 and not any([exit_long, enter_short]):
enter_signal = SignalDirection.LONG
enter_tag = latest.get(SignalTagType.ENTER_TAG.value, None)
enter_tag = latest.get(SignalTagType.ENTER_TAG, None)
if (
self.config.get("trading_mode", TradingMode.SPOT) != TradingMode.SPOT
and self.can_short
@ -1379,7 +1379,7 @@ class IStrategy(ABC, HyperStrategyMixin):
and not any([exit_short, enter_long])
):
enter_signal = SignalDirection.SHORT
enter_tag = latest.get(SignalTagType.ENTER_TAG.value, None)
enter_tag = latest.get(SignalTagType.ENTER_TAG, None)
enter_tag = enter_tag if isinstance(enter_tag, str) and enter_tag != "nan" else None

@ -6,7 +6,7 @@
-r requirements-freqai-rl.txt
-r docs/requirements-docs.txt
ruff==0.14.14
ruff==0.15.0
mypy==1.19.1
pre-commit==4.5.1
pytest==9.0.2

@ -6652,7 +6652,7 @@ def test_verify_candle_type_support(default_conf, mocker):
with pytest.raises(
OperationalException,
match=r"Exchange .* does not support fetching premiumindex candles\.",
match=r"Exchange .* does not support fetching premiumIndex candles\.",
):
exchange.verify_candle_type_support(CandleType.PREMIUMINDEX)

Loading…
Cancel
Save