code: def upload(cls, path, project=None, parent=None, file_name=None,
                 overwrite=False, retry=5, timeout=10,
                 part_size=PartSize.UPLOAD_MINIMUM_PART_SIZE, wait=True,
                 api=None):
          
  
          api = api or cls._API
          extra = {'resource': cls.__name__, 'query': {
              'path': path,
              'project': project,
              'file_name': file_name,
              'overwrite': overwrite,
              'retry': retry,
              'timeout': timeout,
              'part_size': part_size,
              'wait': wait,
          }}
          logger.info('Uploading file', extra=extra)
  
          if not project and not parent:
              raise SbgError('A project or parent identifier is required.')
  
          if project and parent:
              raise SbgError(
                  'Project and parent identifiers are mutually exclusive.'
              )
  
          if project:
              project = Transform.to_project(project)
  
          if parent:
              parent = Transform.to_file(parent)
  
          upload = Upload(
              file_path=path, project=project, parent=parent,
              file_name=file_name, overwrite=overwrite, retry_count=retry,
              timeout=timeout, part_size=part_size, api=api
          )
          if wait:
              upload.start()
              upload.wait()
              return upload
          else:
              return upload
docs: Uploads a file using multipart upload and returns an upload handle
          if the wait parameter is set to False. If wait is set to True it
          will block until the upload is completed.
  
          :param path: File path on local disc.
          :param project: Project identifier
          :param parent: Parent folder identifier
          :param file_name: Optional file name.
          :param overwrite: If true will overwrite the file on the server.
          :param retry:  Number of retries if error occurs during upload.
          :param timeout:  Timeout for http requests.
          :param part_size:  Part size in bytes.
          :param wait:  If true will wait for upload to complete.
          :param api: Api instance.