docs: def _get_message(self, block=True, timeout=0.1, get_partition_info=None,
                       update_offset=True):
          """
          If no messages can be fetched, returns None.
          If get_partition_info is None, it defaults to self.partition_info
          If get_partition_info is True, returns (partition, message)
          If get_partition_info is False, returns message
          """
          start_at = time.time()
          while self.queue.empty():
              # We're out of messages, go grab some more.
              log.debug('internal queue empty, fetching more messages')
              with FetchContext(self, block, timeout):
                  self._fetch()
  
              if not block or time.time() > (start_at + timeout):
                  break
  
          try:
              partition, message = self.queue.get_nowait()
  
              if update_offset:
                  # Update partition offset
                  self.offsets[partition] = message.offset + 1
  
                  # Count, check and commit messages if necessary
                  self.count_since_commit += 1
                  self._auto_commit()
  
              if get_partition_info is None:
                  get_partition_info = self.partition_info
              if get_partition_info:
                  return partition, message
              else:
                  return message
          except queue.Empty:
              log.debug('internal queue empty after fetch - returning None')
              return None