pygsheets - загружать учетные данные из dict вместо файла - PullRequest
1 голос
/ 29 июня 2019

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

import pygsheets
gc = pygsheets.authorize(service_file='client_secret.json')

Если учетные данные хранятся в переменной типа:

secret = {
  "type": "service_account",
  "project_id": "XXXXXXXXXX",
  "private_key_id": "XXXXXXXXXX",
  "private_key": "XXXXXXXXXX"
  "client_email": "XXXXXXXXXX",
  "client_id": "XXXXXXXXXX",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "XXXXXXXXXX"
}

Можно ли загрузить их с custom_credentials вместо service_file? docs не дает никаких инструкций по его использованию, за исключением «эта опция игнорирует любые другие параметры».Следующий код:

import pygsheets
gc = pygsheets.authorize(custom_credentials=secret)

Выдает следующую ошибку:

AttributeError: 'dict' object has no attribute 'before_request'

Есть ли другой способ сделать это?Например, в gspread есть следующая опция:

ServiceAccountCredentials.from_json_keyfile_dict(keyfile_dict, scope)

Есть предложения?Спасибо !!!

Ответы [ 2 ]

2 голосов
/ 30 июня 2019

Только что сделал это! В итоге мы написали tempfile и затем загрузили его для авторизации. Рабочий пример ниже:

import tempfile

def _google_creds_as_file():
    temp = tempfile.NamedTemporaryFile()
    temp.write(json.dumps({
        "type": "service_account",
        "project_id": "xxxx-yyy",
        "private_key_id": "xxxxxxx",
        "private_key": "-----BEGIN PRIVATE KEY----------END PRIVATE KEY-----\n",
        "client_email": "xxx@yyyy.iam.gserviceaccount.com",
        "client_id": "xxxxx",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/xxxxx%40xxxx.iam.gserviceaccount.com"
    }))
    temp.flush()
    return temp

creds_file = _google_creds_as_file()
gc = pygsheets.authorize(service_account_file=creds_file.name)
1 голос
/ 30 июня 2019

Спасибо за предложение @kontinuity. После некоторых раскопок я обнаружил, что на самом деле уже есть запрос на извлечение: https://github.com/nithinmurali/pygsheets/pull/345

В authorization.py есть новая опция, которая называется service_account_env_var. Только что попробовал, и это прекрасно работает.

...