From 771453c60d003d2db81bbd78bc9ef5eda0ea0352 Mon Sep 17 00:00:00 2001 From: Naoto Nishizono Date: Tue, 10 Feb 2015 18:54:14 +0900 Subject: [PATCH] Fix List Multipart Uploads to get multipart uploads contain slash in key Fix filter_max_uploads to get multipart uploads contain slash(/) in key(object name), such as X/Y/Z. Change-Id: I478d8a001708eed50114156c4b0ca06d45798fd7 --- swift3/controllers/multi_upload.py | 13 +++++++++---- swift3/test/unit/test_multi_upload.py | 7 +++++-- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/swift3/controllers/multi_upload.py b/swift3/controllers/multi_upload.py index 5d335cf8..cf5c8bc4 100644 --- a/swift3/controllers/multi_upload.py +++ b/swift3/controllers/multi_upload.py @@ -43,8 +43,9 @@ upload information: """ import os +import re -from swift.common.utils import split_path, json +from swift.common.utils import json from swift3.controllers.base import Controller, bucket_operation, \ object_operation @@ -140,9 +141,13 @@ class UploadsController(Controller): """ Handles List Multipart Uploads """ + pattern = re.compile('/[0-9]+$') + def filter_max_uploads(o): - name = o.get('name', '') - return name.count('/') == 1 + if 'name' not in o: + return False + else: + return pattern.search(o['name']) is None encoding_type = req.params.get('encoding-type') if encoding_type is not None and encoding_type != 'url': @@ -183,7 +188,7 @@ class UploadsController(Controller): uploads = [] prefixes = [] for o in objects: - obj, upid = split_path('/' + o['name'], 1, 2) + obj, upid = o['name'].rsplit('/', 1) uploads.append( {'key': obj, 'upload_id': upid, diff --git a/swift3/test/unit/test_multi_upload.py b/swift3/test/unit/test_multi_upload.py index 459e64f8..3912bed7 100644 --- a/swift3/test/unit/test_multi_upload.py +++ b/swift3/test/unit/test_multi_upload.py @@ -53,7 +53,10 @@ multiparts_template = \ ('object/Y/2', '2014-05-07T19:47:55.592270', 'HASH', 22), ('object/Z', '2014-05-07T19:47:56.592270', 'HASH', 3), ('object/Z/1', '2014-05-07T19:47:57.592270', 'HASH', 13), - ('object/Z/2', '2014-05-07T19:47:58.592270', 'HASH', 23)) + ('object/Z/2', '2014-05-07T19:47:58.592270', 'HASH', 23), + ('subdir/object/Z', '2014-05-07T19:47:58.592270', 'HASH', 4), + ('subdir/object/Z/1', '2014-05-07T19:47:58.592270', 'HASH', 41), + ('subdir/object/Z/2', '2014-05-07T19:47:58.592270', 'HASH', 41)) class TestSwift3MultiUpload(Swift3TestCase): @@ -192,7 +195,7 @@ class TestSwift3MultiUpload(Swift3TestCase): self.assertEquals(elem.find('NextUploadIdMarker').text, 'Z') self.assertEquals(elem.find('MaxUploads').text, '1000') self.assertEquals(elem.find('IsTruncated').text, 'false') - self.assertEquals(len(elem.findall('Upload')), 3) + self.assertEquals(len(elem.findall('Upload')), 4) objects = [(o[0], o[1][:-3] + 'Z') for o in multiparts_template] for u in elem.findall('Upload'): name = u.find('Key').text + '/' + u.find('UploadId').text