为什么我的存储库对象使用github3.py返回Nonetype?

时间:2016-03-01 21:04:45

标签: python nonetype github3.py

使用github3.py版本0.9.5 documentation,我试图创建一个存储库对象,但它不断返回Nonetype,因此我无法访问存储库的内容。似乎没有StackOverflow上的任何其他帖子,或者有关解决此问题的库的GitHub问题的对话。

AttributeError: 'NoneType' object has no attribute 'contents'是我收到的确切错误。

在说repo = repository('Django', auth)的行上我尝试用 fv4 更改 auth ,但这并没有改变任何其他内容。

#!/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 个答案:

答案 0 :(得分:1)

因此,您的代码有一些问题,但我先帮助您解决您的问题,然后我会继续处理其他问题。

您正在使用github3.repository在您感到困惑的行中。让我们看一下documentation的特定功能(您也可以通过调用help(repository)来查看)。您将看到repository需要两个参数ownerrepository,并将它们描述为存储库的所有者和存储库本身的名称。所以在您的使用中你会做

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

但是,这会留下您的身份验证凭据......嗯,这是另一回事,您正在做

fv4 = login(username, password, token)

您只需要指定其中一些参数。如果您想使用令牌,请执行

fv4 = login(token=token)

或者如果您想使用基本身份验证

fv4 = login(username, password)

两者都可以正常工作。如果您想继续进行身份验证,则可以执行

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

因为fv4是一个GitHub对象,其中记录了hererepository函数在所有内容下使用。

这样可以帮助您解决大部分问题。

请注意,在github3.py的文档示例中,我们通常会调用login() gh的结果。这是因为gh只是一个存储凭据的GitHub对象。它不是您的用户或类似的东西。那将是(在您的github3.py版本上)fv4 = gh.user()。 (如果其他人正在阅读并使用github3.py 1.0版本(目前处于预发布状态),那么它将是fv4 = gh.me()。)