code: def upload_online(
      self,
      bq_table_id: Optional[str] = None,
      search_keys: Optional[List[SearchKey]] = None,
  ):
      trace_id = str(uuid.uuid4())
      with MDC(trace_id=trace_id):
          if bq_table_id is None and search_keys is None:
              raise ValidationError(
                  "One of arguments: bq_table_id or search_keys should be presented"
              )
          if bq_table_id is not None and search_keys is not None:
              raise ValidationError(
                  "Only one argument could be presented: bq_table_id or search_keys"
              )
          try:
              search_keys = (
                  [k.value.value for k in search_keys]
                  if search_keys
                  else None
              )
              request = {
                  "bqTableId": bq_table_id,
                  "searchKeys": search_keys,
              }
              task_id = self._rest_client.upload_online(
                  request, trace_id
              )
              with Spinner():
                  status_response = (
                      self._rest_client.poll_ads_management_task_status(
                          task_id, trace_id
                      )
                  )
                  while (
                      status_response["status"]
                      not in self.FINAL_STATUSES
                  ):
                      time.sleep(5)
                      status_response = self._rest_client.poll_ads_management_task_status(
                          task_id, trace_id
                      )
  
              if status_response["status"] != "COMPLETED":
                  raise Exception(
                      "Failed to register ADS: "
                      + status_response["errorMessage"]
                  )
  
              print("Uploading successfully finished")
          except Exception:
              self.logger.exception(
                  f"Failed to upload table {bq_table_id}"
              )
              raise
  
imports: import logging
  import time
  import uuid
  from datetime import datetime
  from enum import Enum
  from typing import Dict, List, Optional, Union
  from upgini.errors import HttpError, ValidationError
  from upgini.http import LoggerFactory, get_rest_client
  from upgini.mdc import MDC
  from upgini.metadata import SearchKey
  from upgini.spinner import Spinner
label_desc: Use image node_id 6 for calling the DataSourcePublisher obj's underlying member method code with example usage: obj.upload_online(bq_table_id, search_keys) without return types