Python и «запросы на импорт» по HTTP Облачные функции Google - PullRequest
2 голосов
/ 16 октября 2019

Я пытаюсь создать простой HTTP-запрос к функции Google Cloud, поэтому при вызове URL-адреса Google Cloud письмо будет отправлено через API почтового пистолета.

Ниже приведен базовый код почтового пистолета, который яиспользуется в PyCharm для проверки соединения и все работает нормально. Когда я запускаю эту функцию на своем компьютере, я получаю электронное письмо в свой почтовый ящик.

import requests

def send_simple_message():
    return requests.post(
        "https://api.eu.mailgun.net/v3/mg.my.url.com/messages",
        auth=("api", "XXXXXxKEYxXXXXX"),
        data={"from": "Name <name@mg.my.url.com>",
              "to": "name@outlook.com",
              "subject": "Hello You",
              "text": "Testing some Mailgun awesomness!"})

send_simple_message()

Как только я создаю функцию HTTP в GCP и копирую / вставляю туда же код, я получаю сообщение об ошибке. Разница лишь в том, что я добавил requests==2.21.0 в файл requirements.txt. Я полагаю, что это говорит Google Cloud о включении модуля запросов в Python.

Ошибка, которую я получаю из файла журнала:

Ошибка: сбой функции. Подробности: у объекта 'Request' нет атрибута 'post'

Нужно ли добавить еще один модуль в Python?


Добавлена ​​дополнительная информация журнала: enter image description here

1 Ответ

0 голосов
/ 16 октября 2019

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

import os
import pytest
import requests
import responses

@pytest.fixture
def app(monkeypatch):
    monkeypatch.setenv('MAILGUN_DOMAIN_NAME', 'example.com')
    monkeypatch.setenv('MAILGUN_API_KEY', 'apikey')

    import main

    main.app.testing = True
    return main.app.test_client()


@responses.activate
def test_send_simple(app):
    responses.add(
        responses.POST,
        'https://api.mailgun.net/v3/example.com/messages',
        body='')

    response = app.post('/send/email', data={
        'recipient': 'user@example.com',
        'submit': 'Send simple email'})
    assert response.status_code == 200
    assert len(responses.calls) == 1
...