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