Как интегрировать golid с aiohttp - PullRequest
0 голосов
/ 19 октября 2018

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

После просмотра документов для поиска, я нашел эту функцию, которую я могу использовать:

class gspread.Client(auth, session=None)
An instance of this class communicates with Google API.

Parameters: 
auth – An OAuth2 credential object. Credential objects are those created by the oauth2client library. https://github.com/google/oauth2client
session – (optional) A session object capable of making HTTP requests while persisting some parameters across requests. Defaults to requests.Session.

, которая дает мне необязательный параметр session.Как мне указать сеанс для использования aiohttp?

Я написал немного тестового кода, который прекрасно компилируется, но при запуске кода происходит сбой.

import aiohttp
import gspread
import random
from oauth2client.service_account import ServiceAccountCredentials

scope = ['https://spreadsheets.google.com/feeds',
      'https://www.googleapis.com/auth/drive']

creds = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope)
c = gspread.authorize(creds)
client = gspread.Client(auth=c, session=aiohttp.ClientSession)
sheet = client.open_by_key('1Hkwo9gSpk3NjgPLPkG8kh0zBNw2nxsYWRw0cVdn0JA0')

ws = sheet.get_worksheet(0)
rcount = ws.row_count
msg = ws.cell(random.randint(1,rcount),1).value
print(msg)

Я получаю сообщение об ошибке ниже:

Traceback (most recent call last):
  File "c:\Users\xxxxx\.vscode\extensions\ms-python.python-2018.9.0\pythonFiles\experimental\ptvsd_launcher.py", line 118, in <module>
    vspd.debug(filename, port_num, '', '', run_as)
  File "c:\Users\xxxxx\.vscode\extensions\ms-python.python-2018.9.0\pythonFiles\experimental\ptvsd\ptvsd\debugger.py", line 37, in debug
    run(address, filename, *args, **kwargs)
  File "c:\Users\xxxxx\.vscode\extensions\ms-python.python-2018.9.0\pythonFiles\experimental\ptvsd\ptvsd\_local.py", line 79, in run_file
    run(argv, addr, **kwargs)
  File "c:\Users\xxxxx\.vscode\extensions\ms-python.python-2018.9.0\pythonFiles\experimental\ptvsd\ptvsd\_local.py", line 140, in _run
    _pydevd.main()
  File "c:\Users\xxxxx\.vscode\extensions\ms-python.python-2018.9.0\pythonFiles\experimental\ptvsd\ptvsd\_vendored\pydevd\pydevd.py", line 1751, in main
    debugger.connect(host, port)
  File "c:\Users\xxxxx\.vscode\extensions\ms-python.python-2018.9.0\pythonFiles\experimental\ptvsd\ptvsd\_vendored\pydevd\pydevd.py", line 1107, in run
    return self._exec(is_module, entry_point_fn, module_name, file, globals, locals)
  File "c:\Users\xxxxx\.vscode\extensions\ms-python.python-2018.9.0\pythonFiles\experimental\ptvsd\ptvsd\_vendored\pydevd\pydevd.py", line 1114, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "c:\Users\xxxxx\.vscode\extensions\ms-python.python-2018.9.0\pythonFiles\experimental\ptvsd\ptvsd\_vendored\pydevd\_pydev_imps\_pydev_execfile.py", line 25, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "c:\Users\xxxxx\Desktop\Coding\Discord Bot\Testing\test.py", line 14, in <module>
    ws = sheet.get_worksheet(0)
  File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36\lib\site-packages\gspread\models.py", line 141, in get_worksheet
    sheet_data = self.fetch_sheet_metadata()
  File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36\lib\site-packages\gspread\models.py", line 123, in fetch_sheet_metadata
    r = self.client.request('get', url, params=params)
  File "C:\Users\xxxxx\AppData\Local\Programs\Python\Python36\lib\site-packages\gspread\client.py", line 73, in request
    headers=headers
TypeError: get() missing 1 required positional argument: 'url'
PS C:\Users\xxxxx\Desktop\Coding\Discord Bot>

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Для всех, кто интересуется, как только я разместил этот вопрос, я обнаружил, что кто-то сделал асинхронную оболочку для gspread.Проверьте библиотеку здесь и покажите этому парню свою признательность.Я уверен, что!

0 голосов
/ 20 октября 2018

Невозможно использовать aiohttp с текущей версией gspread (3.0.1).библиотека gspread использует синхронные вызовы, а aiohttp использует асинхронные вызовы.

Пожалуйста, пересмотрите использование совместимой библиотеки, такой как requests или httplib2.

...