Проблемы с аутентификацией PyGithub - PullRequest
0 голосов
/ 09 февраля 2020

Я использую PyGithub с токеном доступа от Github. Я получил здесь , чтобы создать инструмент командной строки с , нажмите . Мой код выглядит следующим образом:

from github import Github

def readEnvironment():
    'This function reads in the environment variables form a file if needed'
    if os.path.isfile('.env') is True:
        with open('.env', 'r') as file:
            for line in file:
                if line.startswith('#'):
                    continue
                # Remove leading `export `
                # then, split name / value pair
                key, value = line.split('=', 1)
                os.environ[key] = value

@click.group()
def cli():
    pass


@click.command()
@click.option('--token', default=None, help='The Github access token', prompt=False)
def github(token):
    if None == token and (None != os.environ['GITHUB_ACCESS_TOKEN'] or '' != os.environ['GITHUB_ACCESS_TOKEN']):
        token = os.environ['GITHUB_ACCESS_TOKEN']
    client = Github(token)
    print(client)

    # Then play with your Github objects:
    for repo in client.get_user().get_repos():
        print(repo.name)

cli.add_command(github)

if __name__ == '__main__':
    readEnvironment()
    cli()

, но я получаю следующую ошибку

Traceback (последний вызов был последним): файл "farley.py", строка 142, в кли () Файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/click/core.py", строка 764, в вызов return Файл self.main (* args, ** kwargs) "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/click/core.py", строка 717, в основном файле rv = self.invoke (ctx) "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/click/core.py", строка 1137, в вызвать return _process_result (sub_ctx.command.invoke (sub_ctx)) файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/click/core.py", строка 956, in invoke вернуть файл ctx.invoke (self.callback, ** ctx.params) "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/click/ core.py ", строка 555, in invoke return callback (* args, ** kwargs) Файл" farley.py ", строка 73, для пользователя github = client.get_user (token) Файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/github/MainClass.py", строка 264, в get_user "GET "," / users / "+ файл входа в систему" /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/github/Requester.py ", строка 322, в запросеJsonAndCheck глагол, URL, параметры, заголовки, ввод, сам .__ Файл customConnection (url) "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/github/Requester.py ", строка 413, в requestJson возвращает self .__ requestEncode (cnx, глагол, url, параметры, заголовки, ввод, кодирование) Файл" /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7 /site-packages/github/Requester.py ", строка 475, в __requestEncode cnx, глагол, URL, requestHeaders, файл encoded_input" /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7 /site-packages/github/Requester.py ", строка 501, в файле __requestRaw response = cnx.getresponse ()" /Library/Frameworks/Python.framework/Versions/3.7/lib/python3 .7 / site-packages / github / Requester.py ", строка 119, в getresponse allow_redirects = False, File" /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site- пакеты / запросы / sessions.py ", строка 546, в файле get return self.request ('GET', url, ** kwargs)" /Library/Frameworks/Python.framework/Versions/3.7/lib/python3 .7 / site-packages / запросы / sessions.py ", строка 533, в запросе resp = self.send (prep, ** send_kwargs) File" /Library/Frameworks/Python.framework/Versions/3.7/lib /python3.7/site-packages/requests/sessions.py ", строка 646, в файле send r = adapter.send (запрос, ** kwargs)" /Library/Frameworks/Python.framework/Versions/ 3.7 / lib / python3 .7 / site-пакеты / запросы / adapters.py ", строка 449, в файле тайм-аут отправки = файл тайм-аута" /Library/Frameworks/Python.framework/Versions/3.7/lib/python3 .7 / site-packages / urllib3 / connectionpool.py ", строка 672, в urlopen chunked = chunked, файл" /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site -packages / urllib3 / connectionpool.py ", строка 387, в _make_requ est conn.request (метод, URL, ** httplib_request_kw) Файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", строка 1229, в запросе Файл self._send_request (метод, URL, тело, заголовки, encode_chunked) Файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client.py", строка 1270, в _send_request self.putheader (hdr, value) Файл "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/http/client. py ", строка 1207, в putheader поднимают ValueError ('Неверное значение заголовка% r'% (values ​​[i],))) ValueError: Неверное значение заголовка b'token omitted \ n '

где omitted - токен доступа, полученный от Github. В ошибке появляется правильный токен. Это базовый c пример, приведенный в документации PyGithub, поэтому я не уверен, что мне не хватает. Когда я запускаю код вне метода щелчка он работает нормально. Я использую Python 3.7.2 и PyGithub 1.45 и Click 7.0.

Ответы [ 2 ]

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

Оказывается, что \n в сообщении об ошибке было ключом. Я читал в переменных окружения, не удаляя символ новой строки. Я установил функцию на

def readEnvironment():
    'This function reads in the environment variables form a file if needed'
    if os.path.isfile('.env') is True:
        with open('.env', 'r') as file:
            for line in file:
                if line.startswith('#'):
                    continue
                # Remove leading `export `
                # then, split name / value pair
                key, value = line.split('=', 1)
                os.environ[key] = value[:-1]

, а затем все работало нормально.

0 голосов
/ 09 февраля 2020

Возможно, вы захотите использовать встроенную поддержку Click в envvar, и, возможно, приведете к строке?

@click.command()
@click.option('--token', required=True, help='The Github access token', envvar='GITHUB_ACCESS_TOKEN')
def github(token):
    client = Github(str(token))
    print(client)
    for repo in client.get_user().get_repos():
        print(repo.name)
...