@classmethod
    def contractDetailsMsg(cls, contractDetails):
        msg = "marketName = " + str(contractDetails.m_marketName) + "\n" \
              + "tradingClass = " + str(contractDetails.m_tradingClass) + "\n" \
              + "minTick = " + str(contractDetails.m_minTick) + "\n" \
              + "price magnifier = " + str(contractDetails.m_priceMagnifier) + "\n" \
              + "orderTypes = " + str(contractDetails.m_orderTypes) + "\n" \
              + "validExchanges = " + str(contractDetails.m_validExchanges) + "\n" \
              + "underConId = " + str(contractDetails.m_underConId) + "\n" \
              + "longName = " + str(contractDetails.m_longName) + "\n" \
              + "contractMonth = " + str(contractDetails.m_contractMonth) + "\n" \
              + "industry = " + str(contractDetails.m_industry) + "\n" \
              + "category = " + str(contractDetails.m_category) + "\n" \
              + "subcategory = " + str(contractDetails.m_subcategory) + "\n" \
              + "timeZoneId = " + str(contractDetails.m_timeZoneId) + "\n" \
              + "tradingHours = " + str(contractDetails.m_tradingHours) + "\n" \
              + "liquidHours = " + str(contractDetails.m_liquidHours) + "\n" \
              + "evRule = " + str(contractDetails.m_evRule) + "\n" \
              + "evMultiplier = " + str(contractDetails.m_evMultiplier) + "\n" \
              + cls.contractDetailsSecIdList(contractDetails)
        return msg
Setup the MPD platform.
dataset/ETHPy150Open CarterBain/Medici/ib/ext/EWrapperMsgGenerator.py/EWrapperMsgGenerator.contractDetailsMsg--crossover with--dataset/ETHPy150Open home-assistant/home-assistant/homeassistant/components/media_player/mpd.py/setup_platform