code: def upload_string(to_upload, media_type=None, keep_open=False, wait_on_close=False, **kwargs):
      
  
      # Use 'a' mode because we will be responsible for closing the file
      # ourselves later (if requested).
      handler = new_dxfile(media_type=media_type, mode='a', **kwargs)
  
      # For subsequent API calls, don't supply the dataobject metadata
      # parameters that are only needed at creation time.
      _, remaining_kwargs = dxpy.DXDataObject._get_creation_params(kwargs)
      handler.write(to_upload, **remaining_kwargs)
  
      if not keep_open:
          handler.close(block=wait_on_close, **remaining_kwargs)
  
      return handler
docs: :param to_upload: String to upload into a file
      :type to_upload: string
      :param media_type: Internet Media Type
      :type media_type: string
      :param keep_open: If False, closes the file after uploading
      :type keep_open: boolean
      :param wait_on_close: If True, waits for the file to close
      :type wait_on_close: boolean
      :returns: Remote file handler
      :rtype: :class:`~dxpy.bindings.dxfile.DXFile`
  
      Additional optional parameters not listed: all those under
      :func:`dxpy.bindings.DXDataObject.new`.
  
      Uploads the data in the string *to_upload* into a new file object
      (with media type *media_type* if given) and returns the associated
      remote file handler.