docs: def _GenerateZipInfo(self, arcname=None, compress_type=None, st=None):
      """Generate ZipInfo instance for the given name, compression and stat.
  
      Args:
        arcname: The name in the archive this should take.
        compress_type: Compression type (zipfile.ZIP_DEFLATED, or ZIP_STORED)
        st: An optional stat object to be used for setting headers.
  
      Returns:
        ZipInfo instance.
  
      Raises:
        ValueError: If arcname is not provided.
      """
      # Fake stat response.
      if st is None:
        # TODO(user):pytype: stat_result typing is not correct.
        # pytype: disable=wrong-arg-count
        st = os.stat_result((0o100644, 0, 0, 0, 0, 0, 0, 0, 0, 0))
        # pytype: enable=wrong-arg-count
  
      mtime = time.localtime(st.st_mtime or time.time())
      date_time = mtime[0:6]
      # Create ZipInfo instance to store file information
      if arcname is None:
        raise ValueError("An arcname must be provided.")
  
      zinfo = zipfile.ZipInfo(arcname, date_time)
      zinfo.external_attr = (st[0] & 0xFFFF) << 16  # Unix attributes
  
      if compress_type is None:
        zinfo.compress_type = self._compression
      else:
        zinfo.compress_type = compress_type
  
      zinfo.file_size = 0
      zinfo.compress_size = 0
      zinfo.flag_bits = 0x08  # Setting data descriptor flag.
      zinfo.CRC = 0x08074b50  # Predefined CRC for archives using data
      # descriptors.
      # This fills an empty Info-ZIP Unix extra field.
      zinfo.extra = struct.pack(
          "<HHIIHH",
          0x5855,
          12,
          0,  # time of last access (UTC/GMT)
          0,  # time of last modification (UTC/GMT)
          0,  # user ID
          0)  # group ID
      return zinfo