From bc4e07343e5f7dc880b0d17dca34e9f450299f52 Mon Sep 17 00:00:00 2001 From: Joseph Schorr Date: Thu, 13 Aug 2015 15:35:37 -0400 Subject: [PATCH] Fix PATCH semantics due to recent API changes --- endpoints/v2/blob.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/endpoints/v2/blob.py b/endpoints/v2/blob.py index 78d71ec58..ef8e1a341 100644 --- a/endpoints/v2/blob.py +++ b/endpoints/v2/blob.py @@ -109,8 +109,8 @@ def download_blob(namespace, repo_name, digest): return Response(storage.stream_read(found.locations, path), headers=headers) -def _render_range(end_byte): - return 'bytes=0-{0}'.format(end_byte) +def _render_range(end_byte, with_bytes_prefix=True): + return '{0}0-{1}'.format('bytes=' if with_bytes_prefix else '', end_byte - 1) @v2_bp.route('///blobs/uploads/', methods=['POST']) @@ -195,7 +195,6 @@ def _upload_chunk(namespace, repo_name, upload_uuid, range_required): start_offset, length = 0, -1 range_header = request.headers.get('range', None) - if range_required and range_header is None: _range_not_satisfiable(found.byte_count) @@ -208,11 +207,12 @@ def _upload_chunk(namespace, repo_name, upload_uuid, range_required): input_fp = wrap_with_hash(get_input_stream(request), found.sha_state) try: - storage.stream_upload_chunk({found.location.name}, upload_uuid, start_offset, length, input_fp) + length_written = storage.stream_upload_chunk({found.location.name}, upload_uuid, start_offset, + length, input_fp) except InvalidChunkException: _range_not_satisfiable(found.byte_count) - found.byte_count += length + found.byte_count += length_written return found @@ -240,12 +240,12 @@ def _finish_upload(namespace, repo_name, upload_obj, expected_digest): @require_repo_write @anon_protect def upload_chunk(namespace, repo_name, upload_uuid): - upload = _upload_chunk(namespace, repo_name, upload_uuid, range_required=True) + upload = _upload_chunk(namespace, repo_name, upload_uuid, range_required=False) upload.save() - accepted = make_response('', 202) + accepted = make_response('', 204) accepted.headers['Location'] = _current_request_path() - accepted.headers['Range'] = _render_range(upload.byte_count) + accepted.headers['Range'] = _render_range(upload.byte_count, with_bytes_prefix=False) accepted.headers['Docker-Upload-UUID'] = upload_uuid return accepted