class BaseTradingStrategyConfigMap(BaseStrategyConfigMap): exchange: ClientConfigEnum( # rebuild the exchanges enum value="Exchanges", # noqa: F821 names={e: e for e in AllConnectorSettings.get_all_connectors()}, type=str, ) = Field( default=..., description="The name of the exchange connector.", client_data=ClientFieldData( prompt=lambda mi: "Input your maker spot connector", prompt_on_new=True, ), ) market: str = Field( default=..., description="The trading pair.", client_data=ClientFieldData( prompt=lambda mi: BaseTradingStrategyConfigMap.trading_pair_prompt( mi), prompt_on_new=True, ), ) @classmethod def trading_pair_prompt( cls, model_instance: 'BaseTradingStrategyConfigMap') -> str: exchange = model_instance.exchange example = AllConnectorSettings.get_example_pairs().get(exchange) return (f"Enter the token trading pair you would like to trade on" f" {exchange}{f' (e.g. {example})' if example else ''}") @validator("exchange", pre=True) def validate_exchange(cls, v: str): """Used for client-friendly error output.""" ret = validate_exchange(v) if ret is not None: raise ValueError(ret) cls.__fields__[ "exchange"].type_ = ClientConfigEnum( # rebuild the exchanges enum value="Exchanges", # noqa: F821 names={ e: e for e in AllConnectorSettings.get_all_connectors() }, type=str, ) return v @validator("market", pre=True) def validate_exchange_trading_pair(cls, v: str, values: Dict): exchange = values.get("exchange") ret = validate_market_trading_pair(exchange, v) if ret is not None: raise ValueError(ret) return v
def validate_exchange(cls, v: str): """Used for client-friendly error output.""" ret = validate_exchange(v) if ret is not None: raise ValueError(ret) cls.__fields__[ "exchange"].type_ = ClientConfigEnum( # rebuild the exchanges enum value="Exchanges", # noqa: F821 names={ e: e for e in AllConnectorSettings.get_all_connectors() }, type=str, ) return v