- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 Python 脚本来自动在 Github 上创建文件,如果它们存在,则更新它们。我正在使用具有以下逻辑的模块 PyGithub。
我遇到的问题是,当我尝试更新大于 1Mb 的文件时,我得到:
github.GithubException.GithubException: 403 {"message": "此 API 返回最大 1 MB 的 blob。请求的 blob 太大而无法通过 API 获取,但您可以使用 Git Data API 请求 blob最大 100 MB。", "errors": [{"resource": "Blob", "field": "data", "code": "too_large"}], "documentation_url": "https://developer.github.com/enterprise/2.20/v3/repos/contents/#get-contents"
我试过删除文件并重新创建它们,但我知道只是读取文件这一事实会触发错误。我尝试了几种选择,但没有任何效果。
我卡住了。感谢您的帮助
try:
repo.create_file(file_path, "elastic_backups", bk_object.text, branch="master")
print('creating new file ',file_path)
except:
contents = repo.get_contents(file_path, ref="master")
repo.update_file(contents.path, "updated elastic backup", bk_object.text, contents.sha, branch="master")
print(file_path, ' UPDATED')
最佳答案
我看到了一段不错的代码,可以解决您的问题。至少它对我有用。取自this GitHub issue .
正如许多人在其他类似问题中回答的那样:对于大于 1MB 的文件,您必须使用 GitHub 数据 API,它将这些文件存储为 blob(二进制大对象),遵循 documentation。你可以了解更多。对于每个 blob,您都会得到一个 SHA1 关联,它经过计算然后存储在 blob 对象中。因此,如果您想检索这个更大的文件,您需要提供 SHA1 以从 GitHub 检索 blob。下面的代码片段正是这样做的:
定义一个名为 get_blob_content()
的函数,它将实现我上面提到的所有逻辑:
def get_blob_content(repo, branch, path_name):
# first get the branch reference
ref = repo.get_git_ref(f'heads/{branch}')
# then get the tree
tree = repo.get_git_tree(ref.object.sha, recursive='/' in path_name).tree
# look for path in tree
sha = [x.sha for x in tree if x.path == path_name]
if not sha:
# well, not found..
return None
# we have sha
return repo.get_git_blob(sha[0])
在您的 Except
block 中,调用 get_blob_content()。
关于python - PyGitHub-错误 403 {"message": "This API returns blobs up to 1 MB in size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63103760/
我是一名优秀的程序员,十分优秀!