GetOperation в Google API - PullRequest
       7

GetOperation в Google API

0 голосов
/ 27 июня 2018

Я использую пакет dialogflow python для связи с моим агентом диалога (версия v2). Я вызываю функцию train_agent и получаю объект google.api_core.operation.Operation. Я храню атрибут name operation в БД для последующего использования. Как мне получить новый статус того же operation?

Я пытался использовать from google.longrunning import GetOperation, но там написано ImportError: cannot import name GetOperation. И в документах написано Any API service that returns long-running operations should implement the Operations interface so developers can have a consistent client experience.

Должен ли я реализовать интерфейс или что-то еще?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Итак, я использовал объект AgentsClient() для получения доступа к клиенту операций.

Финальный код:

agent_client = dialogflow_v2.AgentsClient()
operations_obj = agent_client.operations_client.get_operations(operations_full_path)
status = operations_obj.done

И другие поля могут быть использованы, как указано в документации.

0 голосов
/ 28 июня 2018

Похоже, вы путаете клиентские библиотеки Google Cloud Python с базовыми Protobufs и gRPCs отдельных служб. GetOperation - это метод rpc службы Operation, определенный здесь . Он принимает сообщение GetOperationRequest и возвращает сообщение Operation. Сообщения Protobuf предназначены для компиляции в нативные классы на разных языках программирования, в Python они фактически становятся дескрипторами. Дескрипторы для всех сообщений, относящихся к длительным операциям, поставляются с библиотекой google-api-core, которая, в свою очередь, поставляется с каждой клиентской библиотекой Google Cloud Python (например, dialogflow). Вот почему вы можете технически использовать дескрипторы protobuf напрямую, импортируя их из клиентской библиотеки:

from google.longrunning.operations_pb2 import Operation

Тогда вам нужно будет только создать заглушки для клиента и сервера gRPC, и вы готовы к работе:)

В реальной жизни вы, конечно, должны игнорировать все это (включая метод GetOperation и интерфейс Operations) и вместо этого использовать клиентские библиотеки Google Cloud , из которых по одному для каждого Облачный сервис Google на каждом из основных языков программирования, которые поставляются с основными модулями для общих задач, таких как аутентификация, выставление счетов и управление длительными операциями. Эти библиотеки абстрагируют материал Protobuf / gRPC для конечных пользователей.

В вашем случае вы хотели бы взглянуть на google.api_core.operations_v1.OperationsClient, который вы можете использовать для управления экземплярами google.api_core.operation.Operation.

Другой вопрос, если вам это действительно нужно. Я никогда не видел, чтобы обучение агента Dialogflow занимало более нескольких секунд, и после того, как агент настроен, это также не то, что нужно делать снова и снова. Вы действительно должны управлять этой операцией вручную и даже хранить метаданные о ней во внешней базе данных?

...