From 16b451437f796e2f1bb98d06095eaba9991d1e57 Mon Sep 17 00:00:00 2001 From: Jimmy Zelinskie <jimmy.zelinskie+git@gmail.com> Date: Tue, 9 Aug 2016 12:28:00 -0400 Subject: [PATCH] v2/blob: s/make_response/Response() --- endpoints/v2/blob.py | 91 ++++++++++++++++++++-------------------- endpoints/v2/manifest.py | 35 +++++++++------- 2 files changed, 65 insertions(+), 61 deletions(-) diff --git a/endpoints/v2/blob.py b/endpoints/v2/blob.py index 8f6a43277..b463816db 100644 --- a/endpoints/v2/blob.py +++ b/endpoints/v2/blob.py @@ -1,7 +1,7 @@ import logging import re -from flask import make_response, url_for, request, redirect, Response, abort as flask_abort +from flask import url_for, request, redirect, Response, abort as flask_abort import resumablehashlib @@ -57,9 +57,7 @@ def check_blob_exists(namespace_name, repo_name, digest): headers['Accept-Ranges'] = 'bytes' # Write the response to the Docker client. - response = make_response('') - response.headers.extend(headers) - return response + return Response(headers=headers) @v2_bp.route(BLOB_DIGEST_ROUTE, methods=['GET']) @@ -124,13 +122,15 @@ def start_blob_upload(namespace_name, repo_name): digest = request.args.get('digest', None) if digest is None: # Short-circuit because the user will send the blob data in another request. - accepted = make_response('', 202) - accepted.headers['Location'] = url_for('v2.upload_chunk', - repository='%s/%s' % (namespace_name, repo_name), - upload_uuid=new_upload_uuid) - accepted.headers['Range'] = _render_range(0) - accepted.headers['Docker-Upload-UUID'] = new_upload_uuid - return accepted + return Response( + status=202, + headers={ + 'Docker-Upload-UUID': new_upload_uuid, + 'Range': _render_range(0), + 'Location': url_for('v2.upload_chunk', repository='%s/%s' % (namespace_name, repo_name), + upload_uuid=new_upload_uuid) + }, + ) # The user plans to send us the entire body right now. # Find the upload. @@ -151,12 +151,14 @@ def start_blob_upload(namespace_name, repo_name): _finish_upload(namespace_name, repo_name, updated_blob_upload, digest) # Write the response to the docker client. - response = make_response('', 201) - response.headers['Docker-Content-Digest'] = digest - response.headers['Location'] = url_for('v2.download_blob', - repository='%s/%s' % (namespace_name, repo_name), - digest=digest) - return response + return Response( + status=201, + headers={ + 'Docker-Content-Digest': digest, + 'Location': url_for('v2.download_blob', repository='%s/%s' % (namespace_name, repo_name), + digest=digest), + }, + ) @v2_bp.route('/<repopath:repository>/blobs/uploads/<upload_uuid>', methods=['GET']) @@ -169,12 +171,13 @@ def fetch_existing_upload(namespace_name, repo_name, upload_uuid): if blob_upload is None: raise BlobUploadUnknown() - accepted = make_response('', 204) - accepted.headers.extend({ - 'Docker-Upload-UUID': upload_uuid, - 'Range': _render_range(blob_upload.byte_count+1), # Docker byte ranges are exclusive - }) - return accepted + return Response( + status=204, + headers={ + 'Docker-Upload-UUID': upload_uuid, + 'Range': _render_range(blob_upload.byte_count+1), # Docker byte ranges are exclusive + }, + ) @v2_bp.route('/<repopath:repository>/blobs/uploads/<upload_uuid>', methods=['PATCH']) @@ -198,13 +201,14 @@ def upload_chunk(namespace_name, repo_name, upload_uuid): v2.update_blob_upload(updated_blob_upload) # Write the response to the Docker client. - accepted = make_response('', 204) - accepted.headers.extend({ - 'Location': _current_request_path(), - 'Range': _render_range(updated_blob_upload.byte_count, with_bytes_prefix=False), - 'Docker-Upload-UUID': upload_uuid, - }) - return accepted + return Response( + status=204, + headers={ + 'Location': _current_request_path(), + 'Range': _render_range(updated_blob_upload.byte_count, with_bytes_prefix=False), + 'Docker-Upload-UUID': upload_uuid, + }, + ) @v2_bp.route('/<repopath:repository>/blobs/uploads/<upload_uuid>', methods=['PUT']) @@ -233,13 +237,14 @@ def monolithic_upload_or_last_chunk(namespace_name, repo_name, upload_uuid): _finish_upload(namespace_name, repo_name, updated_blob_upload, digest) # Write the response to the Docker client. - response = make_response('', 201) - response.headers.extend({ - 'Docker-Content-Digest': digest, - 'Location': url_for('v2.download_blob', repository='%s/%s' % (namespace_name, repo_name), - digest=digest) - }) - return response + return Response( + status=201, + headers={ + 'Docker-Content-Digest': digest, + 'Location': url_for('v2.download_blob', repository='%s/%s' % (namespace_name, repo_name), + digest=digest), + } + ) @v2_bp.route('/<repopath:repository>/blobs/uploads/<upload_uuid>', methods=['DELETE']) @@ -257,7 +262,7 @@ def cancel_upload(namespace_name, repo_name, upload_uuid): v2.delete_blob_upload(upload_uuid) storage.cancel_chunked_upload({upload.location_name}, upload.uuid, upload.storage_metadata) - return make_response('', 204) + return Response(status=204) @v2_bp.route('/<repopath:repository>/blobs/<digest>', methods=['DELETE']) @@ -288,13 +293,9 @@ def _abort_range_not_satisfiable(valid_end, upload_uuid): TODO(jzelinskie): Unify this with the V2RegistryException class. """ - invalid_range = make_response('', 416) - invalid_range.headers.extend({ - 'Location': _current_request_path(), - 'Range': '0-{0}'.format(valid_end), - 'Docker-Upload-UUID': upload_uuid, - }) - flask_abort(invalid_range) + flask_abort(Response(status=416, headers={'Location': _current_request_path(), + 'Range': '0-{0}'.format(valid_end), + 'Docker-Upload-UUID': upload_uuid})) def _parse_range_header(range_header_text): diff --git a/endpoints/v2/manifest.py b/endpoints/v2/manifest.py index 40a4445e2..96cb54257 100644 --- a/endpoints/v2/manifest.py +++ b/endpoints/v2/manifest.py @@ -2,7 +2,7 @@ import logging from functools import wraps -from flask import make_response, request, url_for +from flask import request, url_for, Response import features @@ -51,10 +51,11 @@ def fetch_manifest_by_tagname(namespace_name, repo_name, tag_name): track_and_log('pull_repo', repo, analytics_name='pull_repo_100x', analytics_sample=0.01) metric_queue.repository_pull.Inc(labelvalues=[namespace_name, repo_name, 'v2']) - response = make_response(manifest.bytes, 200) - response.headers['Content-Type'] = manifest.content_type - response.headers['Docker-Content-Digest'] = manifest.digest - return response + return Response( + manifest.bytes, + status=200, + headers={'Content-Type': manifest.content_type, 'Docker-Content-Digest': manifest.digest}, + ) @v2_bp.route(MANIFEST_DIGEST_ROUTE, methods=['GET']) @@ -73,10 +74,8 @@ def fetch_manifest_by_digest(namespace_name, repo_name, manifest_ref): track_and_log('pull_repo', repo) metric_queue.repository_pull.Inc(labelvalues=[namespace_name, repo_name, 'v2']) - response = make_response(manifest.json, 200) - response.headers['Content-Type'] = manifest.content_type - response.headers['Docker-Content-Digest'] = manifest.digest - return response + return Response(manifest.json, status=200, headers={'Content-Type': manifest.content_type, + 'Docker-Content-Digest': manifest.digest}) def _reject_manifest2_schema2(func): @@ -190,12 +189,16 @@ def _write_manifest(namespace_name, repo_name, manifest): spawn_notification(repo, 'repo_push', {'updated_tags': [manifest.tag]}) metric_queue.repository_push.Inc(labelvalues=[namespace_name, repo_name, 'v2']) - response = make_response('OK', 202) - response.headers['Docker-Content-Digest'] = manifest.digest - response.headers['Location'] = url_for('v2.fetch_manifest_by_digest', - repository='%s/%s' % (namespace_name, repo_name), - manifest_ref=manifest.digest) - return response + return Response( + 'OK', + status=202, + headers={ + 'Docker-Content-Digest': manifest.digest, + 'Location': url_for('v2.fetch_manifest_by_digest', + repository='%s/%s' % (namespace_name, repo_name), + manifest_ref=manifest.digest), + }, + ) @v2_bp.route(MANIFEST_DIGEST_ROUTE, methods=['DELETE']) @@ -223,7 +226,7 @@ def delete_manifest_by_digest(namespace_name, repo_name, digest): track_and_log('delete_tag', tag.repository, tag=tag.name, digest=digest) - return make_response('', 202) + return Response(status=202) def _generate_and_store_manifest(namespace_name, repo_name, tag_name):