рдХрд┐рд╕реА рдмрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП .get_contents()
рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ:
{'errors': [{'code': 'too_large', 'field': 'data',
'resource': 'Blob'}],
'message': 'This API returns blobs up to 1 MB in size. The requested blob is too large to fetch via the API, but you can use the Git Data API to request blobs up to 100 MB in size.',
'documentation_url': 'https://developer.github.com/v3/repos/contents/#get-contents'}
рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рд╣реИрдВрдбрд▓рд░ рдХреЗ рдкрд╛рд╕ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИ?
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдРрд╕рд╛ рдХреБрдЫ рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ:
contents = repository.get_dir_contents(urllib.parse.quote(server_path), ref=sha)
for content in contents:
if content.type != 'dir':
file_content = repository.get_contents(urllib.parse.quote(content.path), ref=sha)
рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
file_content = repository.get_git_blob(content.sha)
рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдкрд╣рд▓реЗ рднреА рднрд╛рдЧ рдЪреБрдХрд╛ рд╣реВрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪреВрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рд╣рдореЗрд╢рд╛ рдмреВрдБрдж рдХрд╛ SHA рдерд╛, рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп git_git_blob
рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, get_git_blob
рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП blob
(рдЗрд╕рд▓рд┐рдП рдирд╛рдо) рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ред
рдлрд╝реЙрд▓рдмреИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рджреЛ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛:
рдпрджрд┐ get_contents
рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдкрдХреЛ рдЗрди рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд╣реАрдВ рдмрддрд╛рддрд╛ рд╣реИред рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ рд╡рд╣рд╛рдБ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдордмреИрдХ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред
wontfix
рд░реВрдк рдореЗрдВ рдмрдВрджред рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдпрд╣ рдХреИрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдореИрдВ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрд╢ рд╣реВрдБред рдЬрд╣рд╛рдБ рддрдХ рдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдБ, рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд╛рдл рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред
рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдХреА рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рдЕрдВрддред
file_contents = repo.get_contents(dir_name, ref=branch)
рддрдм sha
рдкреНрд░рддреНрдпреЗрдХ file_content
рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмреНрд▓реЛ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
for file_content in file_contents:
try:
if file_content.encoding != 'base64':
# some error ...
# ok...
except GithubException:
# if file_content DOES NOT HAVE encoding, it is a large file
blob = repo.get_git_blob(file_content.sha)
# do something with blob
рдпрджрд┐ path_name
рдПрдХ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ 1M рд╕реЗ рдмрдбрд╝реА рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдпрд╛рд╕ / рдЕрдкрд╡рд╛рдж рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:
try:
res = repo.get_contents(path_name, ref=branch)
# ok, we have the content
except GithubException:
return get_blob_content(repo, branch, path_name)
рдЬрд╣рд╛рдБ 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])
рддреНрд░реБрдЯрд┐-рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рд▓рдВрдмрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рдпрд╣рд╛рдБ рд╣реИред
рдмреВрдБрдж рдорд┐рд▓рдиреЗ рдкрд░, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
blob = repo.get_git_blob(sha[0])
b64 = base64.b64decode(blob.content)
return b64.decode("utf8")
рд╕рд╛рде рд╣реА, рдЕрдкрдбреЗрдЯ рдлрд╝рд╛рдЗрд▓ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рд╕рд╛рдордирд╛ рдХрд░реЗрдЧреАред
raise self.__createException(status, responseHeaders, output)
github.GithubException.UnknownObjectException: 404 { "message": "рдирд╣реАрдВ рдорд┐рд▓рд╛", "documentation_url": " https://docs.github.com/rest/reference/repos#get -repository-рд╕рд╛рдордЧреНрд░реА"} рдпрд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ рдЬрдм рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╛рдкреНрдд рднрдВрдбрд╛рд░ рдлрд╛рдЗрд▓реЗрдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореИрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдХреА рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░ рдЕрдВрддред
рддрдм
sha
рдкреНрд░рддреНрдпреЗрдХfile_content
рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдмреНрд▓реЛ рдХреЛ рд╣рдерд┐рдпрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИрдпрджрд┐
path_name
рдПрдХ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ 1M рд╕реЗ рдмрдбрд╝реА рд╣реИ, рддреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкреНрд░рдпрд╛рд╕ / рдЕрдкрд╡рд╛рдж рдмреНрд▓реЙрдХ рдХрд░рдиреЗ рд╣реЛрдВрдЧреЗ:рдЬрд╣рд╛рдБ
get_blob_content
рдХреБрдЫ рдРрд╕рд╛ рд╣реИрддреНрд░реБрдЯрд┐-рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рд▓рдВрдмрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рдЪрд╛рд░ рдпрд╣рд╛рдБ рд╣реИред