code: def _create_topic_by_client_mode(self, party, topic_suffix):
      send_topic_name = f"{self._party.role}-{self._party.party_id}-{party.role}-{party.party_id}-{topic_suffix}"
      receive_topic_name = f"{party.role}-{party.party_id}-{self._party.role}-{self._party.party_id}-{topic_suffix}"
  
      # topic_pair is a pair of topic for sending and receiving message respectively
      topic_pair = _TopicPair(
          tenant=self._tenant,
          namespace=self._session_id,
          send=send_topic_name,
          receive=receive_topic_name,
      )
  
      # init pulsar namespace
      namespaces = self._pulsar_manager.get_namespace(
          self._tenant
      ).json()
      # create namespace
      if f"{self._tenant}/{self._session_id}" not in namespaces:
          # append target cluster to the pulsar namespace
          code = self._pulsar_manager.create_namespace(
              self._tenant, self._session_id
          ).status_code
  
          # according to https://pulsar.apache.org/admin-rest-api/?version=2.7.0&apiversion=v2#operation/getPolicies
          # return 409 if existed
          # return 204 if ok
          if code == 204 or code == 409:
              LOGGER.debug(
                  "successfully create pulsar namespace: %s",
                  self._session_id,
              )
          else:
              raise Exception(
                  "unable to create pulsar namespace with status code: {}".format(
                      code
                  )
              )
  
          # set message ttl for the namespace
          response = self._pulsar_manager.set_retention(
              self._tenant,
              self._session_id,
              retention_time_in_minutes=int(self._topic_ttl),
              retention_size_in_MB=-1,
          )
  
          LOGGER.debug(response.text)
          if response.ok:
              LOGGER.debug(
                  "successfully set message ttl to namespace: {} about {} mintues".format(
                      self._session_id, self._topic_ttl
                  )
              )
          else:
              LOGGER.debug("failed to set message ttl to namespace")
  
      return topic_pair
  
imports: import logging
  from typing import List, Optional
  from fate.arch.federation.api import PartyMeta
  from fate.arch.federation.message_queue import MessageQueueBasedFederation
  from ._mq_channel import DEFAULT_CLUSTER, DEFAULT_SUBSCRIPTION_NAME, DEFAULT_TENANT, MQChannel
  from ._pulsar_manager import PulsarManager
label_desc: Use image node_id 6 for calling the PulsarFederation obj's underlying member method code with example usage: obj._create_topic_by_client_mode(party, topic_suffix) and returns: topic_pair