Почему мой объект репозитория возвращает 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()
.)