class_docstr: Vendored from starlette.MultipartParser.
  
  Thanks starlette!
  
  Made the following modifications
      - Use GradioUploadFile instead of UploadFile
      - Use NamedTemporaryFile instead of SpooledTemporaryFile
      - Compute hash of data as the request is streamed
class_docstr_tok: ["Vendored","from","starlette.MultipartParser",".","Thanks","starlette","!","Made","the","following","modifications","-","Use","GradioUploadFile","instead","of","UploadFile","-","Use","NamedTemporaryFile","instead","of","SpooledTemporaryFile","-","Compute","hash","of","data","as","the","request","is","streamed"]
code: def on_part_data(self, data: bytes, start: int, end: int) -> None:
      message_bytes = data[start:end]
      if self.upload_progress is not None:
          self.upload_progress.append(
              self.upload_id,  # type: ignore
              self._current_part.file.filename,  # type: ignore
              message_bytes,
          )
      if self._current_part.file is None:
          self._current_part.data += message_bytes
      else:
          self._file_parts_to_write.append(
              (self._current_part, message_bytes)
          )
  
imports: from __future__ import annotations
  import hashlib
  import json
  from collections import deque
  from dataclasses import dataclass
  from tempfile import NamedTemporaryFile, _TemporaryFileWrapper
  from typing import TYPE_CHECKING, AsyncGenerator, BinaryIO, List, Optional, Tuple, Union
  import fastapi
  import httpx
  import multipart
  from gradio_client.documentation import document, set_documentation_group
  from multipart.multipart import parse_options_header
  from starlette.datastructures import FormData, Headers, UploadFile
  from starlette.formparsers import MultiPartException, MultipartPart
  from gradio import utils
  from gradio.data_classes import PredictBody
  from gradio.exceptions import Error
  from gradio.helpers import EventData
  from gradio.state_holder import SessionState
label_desc: Use image node_id 3 for calling the GradioMultiPartParser obj's underlying member method code with example usage: obj.on_part_data(data, start, end) without return types