don't use __annotate__

it is only present when typehints are used which cannot be guaranteed
for userdefined classes
This commit is contained in:
Matthias 2018-07-23 17:38:21 +01:00
parent f286ba6b87
commit 39cf0decce
3 changed files with 16 additions and 12 deletions

View File

@ -58,6 +58,9 @@ class IStrategy(ABC):
ticker_interval -> str: value of the ticker interval to use for the strategy
"""
_populate_fun_len: int = 0
_buy_fun_len: int = 0
_sell_fun_len: int = 0
# associated minimal roi
minimal_roi: Dict
@ -283,7 +286,7 @@ class IStrategy(ABC):
:param pair: The currently traded pair
:return: a Dataframe with all mandatory indicators for the strategies
"""
if len(self.populate_indicators.__annotations__) == 2:
if self._populate_fun_len == 2:
warnings.warn("deprecated - check out the Sample strategy to see "
"the current function headers!", DeprecationWarning)
return self.populate_indicators(dataframe) # type: ignore
@ -298,7 +301,7 @@ class IStrategy(ABC):
:param pair: The currently traded pair
:return: DataFrame with buy column
"""
if len(self.populate_buy_trend.__annotations__) == 2:
if self._buy_fun_len == 2:
warnings.warn("deprecated - check out the Sample strategy to see "
"the current function headers!", DeprecationWarning)
return self.populate_buy_trend(dataframe) # type: ignore
@ -313,7 +316,7 @@ class IStrategy(ABC):
:param pair: The currently traded pair
:return: DataFrame with sell column
"""
if len(self.populate_sell_trend.__annotations__) == 2:
if self._sell_fun_len == 2:
warnings.warn("deprecated - check out the Sample strategy to see "
"the current function headers!", DeprecationWarning)
return self.populate_sell_trend(dataframe) # type: ignore

View File

@ -92,6 +92,13 @@ class StrategyResolver(object):
strategy = self._search_strategy(path, strategy_name=strategy_name, config=config)
if strategy:
logger.info('Using resolved strategy %s from \'%s\'', strategy_name, path)
strategy._populate_fun_len = len(
inspect.getfullargspec(strategy.populate_indicators).args)
strategy._buy_fun_len = len(
inspect.getfullargspec(strategy.populate_buy_trend).args)
strategy._sell_fun_len = len(
inspect.getfullargspec(strategy.populate_sell_trend).args)
return import_strategy(strategy, config=config)
except FileNotFoundError:
logger.warning('Path "%s" does not exist', path)

View File

@ -199,15 +199,9 @@ def test_call_deprecated_function(result, monkeypatch):
pair = 'ETH/BTC'
# Make sure we are using a legacy function
assert len(resolver.strategy.populate_indicators.__annotations__) == 2
assert 'dataframe' in resolver.strategy.populate_indicators.__annotations__
assert 'pair' not in resolver.strategy.populate_indicators.__annotations__
assert len(resolver.strategy.populate_buy_trend.__annotations__) == 2
assert 'dataframe' in resolver.strategy.populate_buy_trend.__annotations__
assert 'pair' not in resolver.strategy.populate_buy_trend.__annotations__
assert len(resolver.strategy.populate_sell_trend.__annotations__) == 2
assert 'dataframe' in resolver.strategy.populate_sell_trend.__annotations__
assert 'pair' not in resolver.strategy.populate_sell_trend.__annotations__
assert resolver.strategy._populate_fun_len == 2
assert resolver.strategy._buy_fun_len == 2
assert resolver.strategy._sell_fun_len == 2
indicator_df = resolver.strategy.advise_indicators(result, pair=pair)
assert type(indicator_df) is DataFrame