Облачная функция Google в Python: ошибка типа: post_tweet () отсутствует 1 обязательный позиционный аргумент: «контекст» - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь настроить облачную функцию Google, которая зеркалирует репозиторий скриптов на github.Я уже успешно реализовал функцию без github mirroring, но по какой-то причине, когда я тестирую функцию в проекте, где я использую зеркалирование, я получаю сообщение об ошибке, указанное в заголовке.

Заголовок метода для функции Iя звоню в моем файле main.py ниже:

def post_tweet(data, context):

У меня есть параметр context в заголовке, поэтому я не уверен, почему он говорит, что яотсутствует аргумент.

Редактировать: По запросу, вот полный код.

import os
import sys
import tweepy

# source: https://www.cookieshq.co.uk/posts/how-to-build-a-serverless-twitter-bot-with-python-and-google-cloud
# docs: 
#  - https://cloud.google.com/functions/docs/env-var#functions_env_var_set-python
#  - https://cloud.google.com/functions/docs/writing/#functions-writing-helloworld-http-python

def setup_api():
    auth = tweepy.OAuthHandler(os.environ.get('CONSUMER_KEY'), os.environ.get('CONSUMER_SECRET'))
    auth.set_access_token(os.environ.get('ACCESS_TOKEN'), os.environ.get('ACCESS_TOKEN_SECRET'))
    return tweepy.API(auth)
def post_tweet(data, context):
    api = setup_api()
    tweet = 'Hello, world!'
    status = api.update_status(status=tweet)
    return 'Tweet Posted'

Редактировать 2: Чтобы уточнить, у меня есть точный код, который прекрасно работает, когда я использую встроенный редактор Google Cloud Function.Ошибка, указанная в заголовке, возникает только тогда, когда я использую опцию cloud source repository и связываю ее с репозиторием git.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

После того, как вы поэкспериментируете с этим, похоже, что параметр context не передается при зеркалировании из репозитория github.Заголовок метода должен принимать только параметр data: def post_tweet(data):

0 голосов
/ 13 февраля 2019

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

import os
import sys
import tweepy

# source: https://www.cookieshq.co.uk/posts/how-to-build-a-serverless-twitter-bot-with-python-and-google-cloud
# docs:
#  - https://cloud.google.com/functions/docs/env-var#functions_env_var_set-python
#  - https://cloud.google.com/functions/docs/writing/#functions-writing-helloworld-http-python

from dotenv import load_dotenv
load_dotenv()

def setup_api():
    auth = tweepy.OAuthHandler(os.environ.get(
        'CONSUMER_KEY'), os.environ.get('CONSUMER_SECRET'))
    auth.set_access_token(os.environ.get('ACCESS_TOKEN'),
                          os.environ.get('ACCESS_TOKEN_SECRET'))
    return tweepy.API(auth)


def post_tweet():
    api = setup_api()
    tweet = 'Hello, world!'
    status = api.update_status(status=tweet)
    return 'Tweet Posted'


if __name__ == "__main__":
    # just for checking if everything goes fine
    print(post_tweet())

Затем вы можете развернуть ее.

gcloud functions deploy post_tweet --region europe-west1 --memory=128MB --env-vars-file .env --runtime python37 --trigger-http
...