Cloud Task ожидает полезную нагрузку типа 'Bytes', как мне отправить словарь? - PullRequest
0 голосов
/ 07 октября 2019

Я пытаюсь научиться ставить в очередь задачи, которые обрабатываются облачной функцией. Следуя предоставленному коду примера https://cloud.google.com/tasks/docs/creating-http-target-tasks

Я также использую пример кода функции облака для Python. Облачная функция ожидает некоторые аргументы или JSON, как показано ниже:

{"message": "hello Ari"}

Однако, когда я пытаюсь установить полезную нагрузку для задачи в словарь, он говорит, что не может кодировать dict, так как мне отправитьчто-то кроме строки. По сути, я хочу отправить ключи и значения для облачной функции для интерпретации:

{
"file": "image.png",
"user": "ari",
"process": "resize",
}

Итак, я предполагаю, что мой вопрос заключается в том, как отправить информацию с контекстом и как интерпретировать полезную нагрузку в облакесторона функции

В основном пользователь загружает изображение, изображение сохраняется в GCS, создается задача для изменения размера изображения (или что-то сделать), облачная функция запускается из очереди задач, она считывает в корзинуинформация и кто пользователь выполняет задание, обновляет метаданные файла в firestore, чтобы указать пользователю, что задание выполнено.

1 Ответ

1 голос
/ 07 октября 2019

Это было так просто. В маршруте / функции, которая создает задачу (см. Ссылку выше для примера кода), измените переменную полезной нагрузки, чтобы она выглядела следующим образом.

payload = json.dumps({
    "message": "hello",
    "user": "ari"
})

Затем в облачной функции или конечной точке используйте эту функцию, чтобы передать ее обратно всловарь:

payload = request.get_data(as_text=True)
args = json.loads(payload)

message = args.get("message")
...