Почему мой объект репозитория возвращает Nonetype с github3.py?

Используя документацию github3.py версии 0.9.5, я пытаюсь создать объект репозитория, но он продолжает возвращаться Nonetype и поэтому я не могу получить доступ к содержимому хранилища. Похоже, что в Stackru нет других сообщений или разговоров по проблемам библиотеки GitHub, которые решают эту проблему.

AttributeError: 'NoneType' object has no attribute 'contents' это точная ошибка, которую я получил.

На линии, которая говорит repo = repository('Django', auth) Я попытался изменить аутентификацию с помощью fv4, но это ничего не меняет.

#!/usr/bin/env python

from github3 import authorize, repository, login
from pprint import PrettyPrinter as ppr
import github3
from getpass import getuser

pp = ppr(indent=4)


username = 'myusername'
password = 'mypassword'
scopes = ['user', 'repo', 'admin:public_key', 'admin:repo_hook']
note = 'github3.py test'
note_url = 'http://github.com/FreddieV4'

print("Attemping authorization...")


token = id = ''
with open('CREDENTIALS.txt', 'r') as fi:
    token = fi.readline().strip()
    id = fi.readline().strip()


print("AUTH token {}\nAUTH id {}\n".format(token, id))


print("Attempting login...\n")
fv4 = login(username, password, token=token)
print("Login successful!", str(fv4), '\n')


print("Attempting auth...\n")
auth = fv4.authorization(id)
print("Auth successful!", auth, '\n')


print("Reading repo...\n")
repo = repository('Django', auth)
print("Repo object...{}\n\n".format(dir(repo)))


print("Repo...{}\n\n".format(repo))
contents = repo.contents('README.md')


pp.pprint('CONTENTS {}'.format(contents))


contents.update('Testing github3.py', contents)

#print("commit: ", commit)

1 ответ

Решение

Итак, с вашим кодом есть несколько вещей, но позвольте мне сначала помочь вам с вашей непосредственной проблемой, а затем я перейду к другим проблемам.

Вы используете github3.repository в строке вы смущены. Давайте посмотрим на документацию для этой конкретной функции (которую вы также можете увидеть, вызвав help(repository)). Вы увидите, что repository ожидает два аргумента owner а также repository и описывает их как владельца хранилища и имя самого хранилища. Так что в вашем использовании вы бы сделали

repo = repository('Django', 'Django')

Но где это оставить ваши учетные данные аутентификации... Ну, вот другое дело, вы делаете

fv4 = login(username, password, token)

Вам нужно только указать некоторые из этих аргументов. Если вы хотите использовать токен, тогда

fv4 = login(token=token)

Или, если вы хотите использовать базовую аутентификацию

fv4 = login(username, password)

Оба будут работать нормально. Если вы хотите продолжить аутентификацию, вы можете сделать

repo = fv4.repository('Django', 'Django')

Так как fv4 это GitHub объект, который задокументирован здесь и который repository Функция использует под всем.

Так что это должно помочь вам справиться с большинством ваших проблем.


Обратите внимание, что в документированных примерах для github3.py мы обычно называем результат login()gh, Это потому что gh это просто GitHub объект с сохраненными учетными данными. Это не ваш пользователь или что-то в этом роде. Это было бы (на вашей версии github3.py) fv4 = gh.user(), (Если кто-то еще читает это и использует версию github3.py 1.0 (в настоящее время находится в предварительной версии), это будет fv4 = gh.me().)

Другие вопросы по тегам