docs: def upload(self, params={}):
          """start uploading the file until upload is complete or error.
             This is the main method to used, If you do not care about
             state of process.
  
             Args:
                  params: a dict object describe video info, eg title,
                  tags, description, category.
                  all video params see the doc of prepare_video_params.
  
             Returns:
                  return video_id if upload successfully
          """
          if self.upload_token is not None:
              # resume upload
              status = self.check()
              if status['status'] != 4:
                  return self.commit()
              else:
                  self.new_slice()
                  while self.slice_task_id != 0:
                      self.upload_slice()
                  return self.commit()
          else:
              # new upload
              self.create(self.prepare_video_params(**params))
              self.create_file()
              self.new_slice()
              while self.slice_task_id != 0:
                  self.upload_slice()
              return self.commit()