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_end(self) -> None:
      if self._current_part.file is None:
          self.items.append(
              (
                  self._current_part.field_name,
                  _user_safe_decode(
                      self._current_part.data, self._charset
                  ),
              )
          )
      else:
          self._file_parts_to_finish.append(self._current_part)
          # The file can be added to the items right now even though it's not
          # finished yet, because it will be finished in the `parse()` method, before
          # self.items is used in the return value.
          self.items.append(
              (self._current_part.field_name, self._current_part.file)
          )
  
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 4 for calling the GradioMultiPartParser obj's underlying member method code with example usage: obj.on_part_end() without return types