code: def _get_channels(self, party_topic_infos):
      channel_infos = []
      for e in party_topic_infos:
          for party, topic_suffix, topic_pair in e:
              info = self._channels_map.get((party, topic_suffix))
  
              if info is None:
                  info = self._get_channel(
                      topic_pair=topic_pair,
                      src_party_id=self.local_party[1],
                      src_role=self.local_party[0],
                      dst_party_id=party.party_id,
                      dst_role=party.role,
                      mq=self._mq,
                      conf=self._conf,
                  )
  
                  self._channels_map[(party, topic_suffix)] = info
              channel_infos.append(info)
      return channel_infos
  
imports: import json
  import logging
  import sys
  import typing
  from typing import List
  from fate.arch.computing.api import KVTableContext
  from fate.arch.federation.api import Federation, PartyMeta, TableMeta
  from ._datastream import Datastream
  from ._parties import Party
label_desc: Use image node_id 17 for calling the MessageQueueBasedFederation obj's underlying member method code with example usage: obj._get_channels(party_topic_infos) and returns: channel_infos