class_docstr: A thread that batches requests to our file prepare API.
  
  Any number of threads may call prepare_async() in parallel. The PrepareBatcher thread
  will batch requests up and send them all to the backend at once.
docstr: Execute the prepareFiles API call.
  
  Arguments:
      batch: List of RequestPrepare objects
  Returns:
      dict of (save_name: ResponseFile) pairs where ResponseFile is a dict with
          an uploadUrl key. The value of the uploadUrl key is None if the file
          already exists, or a url string if the file should be uploaded.
docstr_tok: ["Execute","the","prepareFiles","API","call",".","Arguments",":","batch",":","List","of","RequestPrepare","objects","Returns",":","dict","of","(","save_name",":","ResponseFile",")","pairs","where","ResponseFile","is","a","dict","with","an","uploadUrl","key",".","The","value","of","the","uploadUrl","key","is","None","if","the","file","already","exists",",","or","a","url","string","if","the","file","should","be","uploaded","."]
code: def _prepare_batch(
      self, batch: Sequence[RequestPrepare]
  ) -> Mapping[str, "CreateArtifactFilesResponseFile"]:
      """Execute the prepareFiles API call.
  
      Arguments:
          batch: List of RequestPrepare objects
      Returns:
          dict of (save_name: ResponseFile) pairs where ResponseFile is a dict with
              an uploadUrl key. The value of the uploadUrl key is None if the file
              already exists, or a url string if the file should be uploaded.
      """
      return self._api.create_artifact_files(
          [req.file_spec for req in batch]
      )
  
imports: import asyncio
  import functools
  import queue
  import threading
  import time
  from typing import TYPE_CHECKING, Callable, Dict, List, Mapping, NamedTuple, Optional, Sequence, Tuple, Union
label_desc: Use image node_id 3 for calling the StepPrepare obj's underlying member method code with example usage: obj._prepare_batch(batch) and returns: self