code: def pull_bytes(
      self,
      name: str,
      tag: str,
      parties: List[PartyMeta],
  ) -> List[bytes]:
      for party in parties:
          if (name, tag, party) in self._pull_history:
              raise ValueError(
                  f"pull bytes from {party} with duplicate name and tag: name={name}, tag={tag}"
              )
          self._pull_history.add((name, tag, party))
      return self._pull_bytes(
          name=name,
          tag=tag,
          parties=parties,
      )
  
imports: import logging
  import typing
  from typing import List
  from fate.arch.trace import federation_push_table_trace, federation_pull_table_trace, federation_push_bytes_trace, federation_pull_bytes_trace
  from ._table_meta import TableMeta
  from ._type import PartyMeta
label_desc: Use image node_id 17 for calling the Federation obj's underlying member method code with example usage: obj.pull_bytes(name, tag, parties) and returns: self