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:
parent
557c3348fa
commit
771453c60d
@ -43,8 +43,9 @@ upload information:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
import os
|
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, \
|
from swift3.controllers.base import Controller, bucket_operation, \
|
||||||
object_operation
|
object_operation
|
||||||
@ -140,9 +141,13 @@ class UploadsController(Controller):
|
|||||||
"""
|
"""
|
||||||
Handles List Multipart Uploads
|
Handles List Multipart Uploads
|
||||||
"""
|
"""
|
||||||
|
pattern = re.compile('/[0-9]+$')
|
||||||
|
|
||||||
def filter_max_uploads(o):
|
def filter_max_uploads(o):
|
||||||
name = o.get('name', '')
|
if 'name' not in o:
|
||||||
return name.count('/') == 1
|
return False
|
||||||
|
else:
|
||||||
|
return pattern.search(o['name']) is None
|
||||||
|
|
||||||
encoding_type = req.params.get('encoding-type')
|
encoding_type = req.params.get('encoding-type')
|
||||||
if encoding_type is not None and encoding_type != 'url':
|
if encoding_type is not None and encoding_type != 'url':
|
||||||
@ -183,7 +188,7 @@ class UploadsController(Controller):
|
|||||||
uploads = []
|
uploads = []
|
||||||
prefixes = []
|
prefixes = []
|
||||||
for o in objects:
|
for o in objects:
|
||||||
obj, upid = split_path('/' + o['name'], 1, 2)
|
obj, upid = o['name'].rsplit('/', 1)
|
||||||
uploads.append(
|
uploads.append(
|
||||||
{'key': obj,
|
{'key': obj,
|
||||||
'upload_id': upid,
|
'upload_id': upid,
|
||||||
|
@ -53,7 +53,10 @@ multiparts_template = \
|
|||||||
('object/Y/2', '2014-05-07T19:47:55.592270', 'HASH', 22),
|
('object/Y/2', '2014-05-07T19:47:55.592270', 'HASH', 22),
|
||||||
('object/Z', '2014-05-07T19:47:56.592270', 'HASH', 3),
|
('object/Z', '2014-05-07T19:47:56.592270', 'HASH', 3),
|
||||||
('object/Z/1', '2014-05-07T19:47:57.592270', 'HASH', 13),
|
('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):
|
class TestSwift3MultiUpload(Swift3TestCase):
|
||||||
@ -192,7 +195,7 @@ class TestSwift3MultiUpload(Swift3TestCase):
|
|||||||
self.assertEquals(elem.find('NextUploadIdMarker').text, 'Z')
|
self.assertEquals(elem.find('NextUploadIdMarker').text, 'Z')
|
||||||
self.assertEquals(elem.find('MaxUploads').text, '1000')
|
self.assertEquals(elem.find('MaxUploads').text, '1000')
|
||||||
self.assertEquals(elem.find('IsTruncated').text, 'false')
|
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]
|
objects = [(o[0], o[1][:-3] + 'Z') for o in multiparts_template]
|
||||||
for u in elem.findall('Upload'):
|
for u in elem.findall('Upload'):
|
||||||
name = u.find('Key').text + '/' + u.find('UploadId').text
|
name = u.find('Key').text + '/' + u.find('UploadId').text
|
||||||
|
Loading…
x
Reference in New Issue
Block a user