class_docstr: This class uploads a source file with presigned url to S3.
  
  Attributes
  ----------
  source_file: str
      Source file to upload
  presigned_url: str
      Presigned urls dictionary, with key as part number and values as urls
  retries: int
      Amount of retries when requests encounter an error
  total_size: int
      Size of all files to upload
  name: str
      Name of this upload to display progress
docstr: Send data to url.
  
  Parameters
  ----------
  url: str
      url string to send data to
  data: bytes
       Bytes of data to send to url
  retries: int
      Amount of retries
  disconnect_retry_wait_seconds: int
      Amount of seconds between disconnect retry
  
  Returns
  -------
  str
      ETag from response
docstr_tok: ["Send","data","to","url",".","Parameters","--","--","--","--","--","url",":","str","url","string","to","send","data","to","data",":","bytes","Bytes","of","data","to","send","to","url","retries",":","int","Amount","of","retries","disconnect_retry_wait_seconds",":","int","Amount","of","seconds","between","disconnect","retry","Returns","--","--","--","-","str","ETag","from","response"]
code: def upload_data(
      self,
      url: str,
      data: bytes,
      retries: int,
      disconnect_retry_wait_seconds: int,
  ) -> str:
      """Send data to url.
  
      Parameters
      ----------
      url: str
          url string to send data to
      data: bytes
           Bytes of data to send to url
      retries: int
          Amount of retries
      disconnect_retry_wait_seconds: int
          Amount of seconds between disconnect retry
  
      Returns
      -------
      str
          ETag from response
  
      """
      disconnect_retries = retries
      while disconnect_retries > 0:
          try:
              retries = Retry(total=10)
              with requests.Session() as s:
                  s.mount("https://", HTTPAdapter(max_retries=retries))
                  return self._upload_data(s, url, data)
          except BrokenPipeError:
              time.sleep(disconnect_retry_wait_seconds)
              disconnect_retries -= 1
  
      raise ValueError("Unable to upload file after multiple attempts")
  
file_path: pytorch-lightning/src/lightning/app/source_code/uploader.py
imports: import time
  import requests
  from requests.adapters import HTTPAdapter
  from rich.progress import BarColumn, Progress, TextColumn
  from urllib3.util.retry import Retry
label_desc: Use image node_id 2 for calling the FileUploader obj's underlying member method code with example usage: obj.upload_data(url, data, retries, disconnect_retry_wait_seconds) and returns: self