gpt4 book ai didi

python - PyGitHub-错误 403 {"message": "This API returns blobs up to 1 MB in size

转载 作者:行者123 更新时间:2023-12-05 05:00:27 25 4
gpt4 key购买 nike

我正在编写一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com