Python скрипт http-запроса работает локально, но не при тестировании в качестве облачной функции Google - PullRequest
1 голос
/ 10 февраля 2020

У меня есть сценарий Python, который я хотел бы запускать с заданным интервалом, используя Google Cloud Functions и Google Cloud Scheduler. Сценарий отлично работает при локальном тестировании, но когда я тестирую его на панели «Облачные функции Google», я получаю сообщение об ошибке сетевого подключения по какой-то причине? Нужно ли делать что-то особенное, чтобы библиотека запросов работала, когда сценарий Python является облачной функцией Google?

Python сценарий:

import datetime
from config import config_vars
import requests

APIKEY = config_vars['APIKEY']
NOW = datetime.datetime.now()
LAST = NOW - datetime.timedelta(seconds=config_vars['UPDATE_INTERVAL'])

def getOrders(nextPage = None):
  url = "https://api.squarespace.com/1.0/commerce/orders"
  if nextPage is None:
    params = {
      'modifiedAfter': f"{LAST.isoformat()}Z",
      'modifiedBefore': f"{NOW.isoformat()}Z"
    }
  else:
    params = { 'cursor': nextPage }
  headers = { "Authorization": f"Bearer {SAPIKEY}" }
  r = requests.get(url, params=params, headers=headers)
  if not r.ok:
    logging.error(f"Unable to get orders. Respoonse: {r.text}")
    return []
  res = r.json()
  pagination = res['pagination']
  if pagination['hasNextPage']: return res['result'] + getOrders(pagination['nextPageCursor'])
  else: return res['result']

def main(data = None, context = None):
  """Triggered from a message on a Cloud Pub/Sub topic.
  Args:
    data (dict): Event payload.
    context (google.cloud.functions.Context): Metadata for the event.
  """
  orders = getOrders()
  for order in orders:
    # do something with each order
    pass

if __name__ == '__main__': main()

Сообщение об ошибке:

HTTPSConnectionPool(host='api.squarespace.com', port=443): Max retries exceeded with url: /1.0/commerce/orders?modifiedAfter=2020-02-09T23%3A01%3A44.372818Z&modifiedBefore=2020-02-09T23%3A01%3A45.372818Z (Caused by NewConnectionError('<urllib3.connection.VerifiedHTTPSConnection object at 0x7eedecb76850>: Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))

1 Ответ

1 голос
/ 10 февраля 2020

Вам необходимо включить биллинг для вашего проекта. Вы не сможете отправлять исходящие запросы на любой URL-адрес, пока он не будет включен.

...