Как добавить опрос / ожидание в скрипт Python для обновления экстракта из таблицы? - PullRequest
0 голосов
/ 01 ноября 2019

Я написал скрипт на Python для вызова API Tableau Rest, и он у меня работает правильно. Он предлагает пользователю ввести свои учетные данные для входа в систему, выбрать сервер, выбрать сайт, выбрать рабочую книгу, а затем найти все необходимые ключи и отправить запрос на обновление экстракта на основе идентификатора рабочей книги. Метод server.workbooks.refresh запускает задание обновления экстракта на сервере Tableau, и я возвращаю jobID из возврата метода.

Далее я хочу создать в скрипте процесс для опроса сервера Tableau с этим идентификатором задания, который ищет время и статус завершения, а затем отправить сообщение о завершении обновления и закрыть скрипт.

Я посмотрел несколько видео на YouTube о том, как выполнять опрос / ожидание в python, но я не уверен, как эти методы могут применяться с использованием сервера таблиц. Я надеялся, что у кого-то есть фрагмент кода для выполнения этого опроса, связанного с процессом сервера таблиц?

with server.auth.sign_in(tableau_auth):
    get_sites(server)
    print(selected_site_id)

    #tab_site = selected_site_id

    # Get all projects on site
    get_projects(server)

    if input_resource_type.lower() == 'workbook':
        # Get a list of workbooks
        get_workbooks(server)

    results = server.workbooks.refresh(selected_workbook_id)

    print("refresh results: " + str(results))

Я хочу, чтобы скрипт python продолжал работать, пока задача, связанная с JobID на Сервере таблиц, не будет завершенаи имеет успешный код состояния.

В настоящее время код просто запускает задачу обновления экстракта на сервере и возвращает JobID.

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Просто чтобы узнать, как решить эту проблему для тех, кто пытается это сделать. Как сказал jdigital, это работает довольно хорошо ... Я добавил несколько комментариев в код, чтобы пользователь получал уведомление о запуске процесса:

        jobid = results.id

        complete_time = None
        counter = 0
        started = False
        sleep_timer = 5
        while complete_time is None:
            extract = server.jobs.get_by_id(jobid)

            if str(extract.finish_code) == "0":
                complete_time = str(extract.completed_at)
            else:
                if extract.started_at is None:
                    print("refresh has not started")
                else:
                    if started == False:
                        print("refresh started at " + str(extract.started_at))
                        started = True

                    if counter == 0:
                        print("refresh is running....")
                    else:
                        print("refresh is still running.....")

                    counter += 1

            if complete_time is None:
                time.sleep(sleep_timer)

        refresh_time = counter * sleep_timer
        print("############################################")
        print(" Refreshed the " + str(workbook.name) + " workbook \n")
        print(" Extract refresh started at " + str(extract.started_at) + "\n")
        print(" Extract refresh completed at " + str(complete_time) + "\n")
        print(" Extract took approximately " + str(refresh_time) + " seconds to refresh")
        print("############################################")
0 голосов
/ 02 ноября 2019

Что нужно сделать вашей программе во время опроса? Если нет, поместите свой код опроса в цикл и используйте режим сна, чтобы не слишком часто заходить на сервер. Когда вы определите, что задача выполнена, выйдите из цикла.

Это общий способ опроса, который можно использовать с Tableau или чем-то еще. Не самый эффективный, но он простой и работает.

...