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
This commit is contained in:
Naoto Nishizono 2015-02-10 18:54:14 +09:00
parent 557c3348fa
commit 771453c60d
2 changed files with 14 additions and 6 deletions

View File

@ -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,

View File

@ -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