Skip to content

Commit de0c3f4

Browse files
committed
WIP: download assets
1 parent 73b069f commit de0c3f4

File tree

1 file changed

+26
-4
lines changed

1 file changed

+26
-4
lines changed

bin/github-backup

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,24 @@ def _request_url_error(template, retry_timeout):
537537
return False
538538

539539

540+
def download_file(url, path, auth):
541+
request = Request(url)
542+
request.add_header('Accept', 'application/octet-stream')
543+
request.add_header('Authorization', 'Basic '.encode('ascii') + auth)
544+
data = urlopen(request)
545+
with open(path, 'wb') as f:
546+
f.write(data.read())
547+
548+
# import requests
549+
# r = requests.get(url, stream=True, headers={
550+
# 'Accept': 'application/octet-stream',
551+
# 'Authorization': 'Basic '.encode('ascii') + auth
552+
# })
553+
# with open(path, 'wb') as f:
554+
# for chunk in r.iter_content(1024):
555+
# f.write(chunk)
556+
557+
540558
def get_authenticated_user(args):
541559
template = 'https://{0}/user'.format(get_github_api_host(args))
542560
data = retrieve_data(args, template, single_request=True)
@@ -898,17 +916,21 @@ def backup_releases(args, repo_cwd, repository, repos_template):
898916

899917
query_args = {}
900918

901-
_release_template = '{0}/{1}/releases'.format(repos_template, repository_fullname)
902-
_releases = retrieve_data(args, _release_template, query_args=query_args)
919+
release_template = '{0}/{1}/releases'.format(repos_template, repository_fullname)
920+
releases = retrieve_data(args, release_template, query_args=query_args)
903921

904922
# for each release, store it
905-
log_info('Saving {0} releases to disk'.format(len(_releases)))
906-
for release in _releases:
923+
log_info('Saving {0} releases to disk'.format(len(releases)))
924+
for release in releases:
907925
release_name = release['tag_name']
908926
output_filepath = os.path.join(release_cwd, '{0}.json'.format(release_name))
909927
with codecs.open(output_filepath, 'w+', encoding='utf-8') as f:
910928
json_dump(release, f)
911929

930+
assets = retrieve_data(args, release['assets_url'])
931+
for asset in assets:
932+
download_file(asset['url'], os.path.join(release_cwd, asset['name']), get_auth(args))
933+
912934

913935
def fetch_repository(name,
914936
remote_url,

0 commit comments

Comments
 (0)