docs: def upload_sequence_fileobj(file_obj, file_name, fields, retry_fields, session, samples_resource):
      """Uploads a single file-like object to the One Codex server via either fastx-proxy or directly
      to S3.
  
      Parameters
      ----------
      file_obj : `FASTXInterleave`, `FilePassthru`, or a file-like object
          A wrapper around a pair of fastx files (`FASTXInterleave`) or a single fastx file. In the
          case of paired files, they will be interleaved and uploaded uncompressed. In the case of a
          single file, it will simply be passed through (`FilePassthru`) to One Codex, compressed
          or otherwise. If a file-like object is given, its mime-type will be sent as 'text/plain'.
      file_name : `string`
          The file_name you wish to associate this fastx file with at One Codex.
      fields : `dict`
          Additional data fields to include as JSON in the POST. Must include 'sample_id' and
          'upload_url' at a minimum.
      retry_fields : `dict`
          Metadata sent to `init_multipart_upload` in the case that the upload via fastx-proxy fails.
      session : `requests.Session`
          Connection to One Codex API.
      samples_resource : `onecodex.models.Samples`
          Wrapped potion-client object exposing `init_upload` and `confirm_upload` routes to mainline.
  
      Raises
      ------
      UploadException
          In the case of a fatal exception during an upload.
  
      Returns
      -------
      `string` containing sample ID of newly uploaded file.
      """
  
      # First attempt to upload via our validating proxy
      try:
          _direct_upload(file_obj, file_name, fields, session, samples_resource)
          sample_id = fields["sample_id"]
      except RetryableUploadException:
          # upload failed--retry direct upload to S3 intermediate
          logging.error("{}: Connectivity issue, trying direct upload...".format(file_name))
          file_obj.seek(0)  # reset file_obj back to start
  
          try:
              retry_fields = samples_resource.init_multipart_upload(retry_fields)
          except requests.exceptions.HTTPError as e:
              raise_api_error(e.response, state="init")
          except requests.exceptions.ConnectionError:
              raise_connectivity_error(file_name)
  
          s3_upload = _s3_intermediate_upload(
              file_obj,
              file_name,
              retry_fields,
              session,
              samples_resource._client._root_url + retry_fields["callback_url"],  # full callback url
          )
          sample_id = s3_upload.get("sample_id", "<UUID not yet assigned>")
  
      logging.info("{}: finished as sample {}".format(file_name, sample_id))
      return sample_id