Чтение / запись Google Sheets из облачной функции - PullRequest
0 голосов
/ 05 июля 2019

Я пытаюсь вызвать API Sheets из облачной функции Google, чтобы читать из Google Sheets и писать в Google Sheets. Мои учетные данные для доступа хранятся в хранилище Google с именем creds_bucket в файле с именем my_creds.json. С двумя электронными таблицами, которые я использую, связаны электронные письма «my_creds», и все соответствующие API включены для проекта.

Вот мой код .... Я получаю КЛЮЧЕВУЮ ошибку, которая говорит, что он не распознает creds_bucket. Что будет за рулем этого?

import httplib2
from apiclient.discovery import build
from oauth2client.service_account import ServiceAccountCredentials
import os
import json
from google.cloud import storage

def main(data, context):

    blob = storage.Client().get_bucket(os.environ['creds_bucket']).get_blob('my_creds.json').download_as_string()

    parsed_json_creds = json.loads(blob)

    scope = ['https://www.googleapis.com/auth/drive','https://www.googleapis.com/auth/spreadsheets']
    credentials = ServiceAccountCredentials.from_json_keyfile_name(parsed_json_creds, scope)

    service = build('sheets', 'v4', http=credentials.authorize(httplib2.Http()))

    spreadsheet_id_input = 'spreadsheetinput_ID'
    range_input = 'Sheet1!A1:D10'

    spreadsheet_id_ouput = 'SPREADHEET_Output_ID'
    range_ouput = 'Sheet1!A1:D10'

    # pull data from input google sheet
    response = service.spreadsheets().values().get(spreadsheetId=spreadsheet_id_input, range=range_input).execute()
    # export pulled data from input sheet to output sheet
    request2 = service.spreadsheets().values().update(spreadsheetId=spreadsheet_id_ouput, range=range_ouput, body=response)
    response2 = request2.execute()
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 383, in run_background_function
    _function_handler.invoke_user_function(event_object)
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 217, in invoke_user_function
    return call_user_function(request_or_event)
  File "/env/local/lib/python3.7/site-packages/google/cloud/functions/worker.py", line 214, in call_user_function
    event_context.Context(**request_or_event.context))
  File "/user_code/main.py", line 10, in main
    blob = storage.Client().get_bucket(os.environ['creds_bucket']).get_blob('my_creds.json').download_as_string()
  File "/env/lib/python3.7/os.py", line 678, in __getitem__
    raise KeyError(key) from None
KeyError: 'creds_bucket'

1 Ответ

0 голосов
/ 05 июля 2019

Ошибка KeyError , которую вы получаете, вызвана функцией os.environ , которая не нашла ни одной переменной среды, называемой creds_bucket.

Чтобы исправить это, попробуйте присоединить переменную окружения с таким именем к функции, для этого вы можете:

Отредактируйте функцию в консоли и добавьте переменную в раздел «Среда»

Или

Повторное развертывание функций с помощью команды gcloud с флагом «--update-env-vars»

...