Merge "Allow --meta on upload"
This commit is contained in:
commit
cde257de5c
|
@ -1917,6 +1917,8 @@ class SwiftService(object):
|
||||||
return res
|
return res
|
||||||
|
|
||||||
# Merge the command line header options to the put_headers
|
# Merge the command line header options to the put_headers
|
||||||
|
put_headers.update(split_headers(
|
||||||
|
options['meta'], 'X-Object-Meta-'))
|
||||||
put_headers.update(split_headers(options['header'], ''))
|
put_headers.update(split_headers(options['header'], ''))
|
||||||
|
|
||||||
# Don't do segment job if object is not big enough, and never do
|
# Don't do segment job if object is not big enough, and never do
|
||||||
|
|
|
@ -891,8 +891,8 @@ def st_copy(parser, args, output_manager):
|
||||||
st_upload_options = '''[--changed] [--skip-identical] [--segment-size <size>]
|
st_upload_options = '''[--changed] [--skip-identical] [--segment-size <size>]
|
||||||
[--segment-container <container>] [--leave-segments]
|
[--segment-container <container>] [--leave-segments]
|
||||||
[--object-threads <thread>] [--segment-threads <threads>]
|
[--object-threads <thread>] [--segment-threads <threads>]
|
||||||
[--header <header>] [--use-slo] [--ignore-checksum]
|
[--meta <name:value>] [--header <header>] [--use-slo]
|
||||||
[--object-name <object-name>]
|
[--ignore-checksum] [--object-name <object-name>]
|
||||||
<container> <file_or_directory> [<file_or_directory>] [...]
|
<container> <file_or_directory> [<file_or_directory>] [...]
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
@ -928,6 +928,9 @@ Optional arguments:
|
||||||
--segment-threads <threads>
|
--segment-threads <threads>
|
||||||
Number of threads to use for uploading object segments.
|
Number of threads to use for uploading object segments.
|
||||||
Default is 10.
|
Default is 10.
|
||||||
|
-m, --meta <name:value>
|
||||||
|
Sets a meta data item. This option may be repeated.
|
||||||
|
Example: -m Color:Blue -m Size:Large
|
||||||
-H, --header <header:value>
|
-H, --header <header:value>
|
||||||
Adds a customized request header. This option may be
|
Adds a customized request header. This option may be
|
||||||
repeated. Example: -H "content-type:text/plain"
|
repeated. Example: -H "content-type:text/plain"
|
||||||
|
@ -978,6 +981,10 @@ def st_upload(parser, args, output_manager):
|
||||||
'--segment-threads', type=int, default=10,
|
'--segment-threads', type=int, default=10,
|
||||||
help='Number of threads to use for uploading object segments. '
|
help='Number of threads to use for uploading object segments. '
|
||||||
'Its value must be a positive integer. Default is 10.')
|
'Its value must be a positive integer. Default is 10.')
|
||||||
|
parser.add_argument(
|
||||||
|
'-m', '--meta', action='append', dest='meta', default=[],
|
||||||
|
help='Sets a meta data item. This option may be repeated. '
|
||||||
|
'Example: -m Color:Blue -m Size:Large')
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'-H', '--header', action='append', dest='header',
|
'-H', '--header', action='append', dest='header',
|
||||||
default=[], help='Set request headers with the syntax header:value. '
|
default=[], help='Set request headers with the syntax header:value. '
|
||||||
|
|
|
@ -1146,14 +1146,9 @@ class TestServiceUpload(_TestServiceBase):
|
||||||
container='test_c',
|
container='test_c',
|
||||||
source=f.name,
|
source=f.name,
|
||||||
obj='テスト/dummy.dat',
|
obj='テスト/dummy.dat',
|
||||||
options={'changed': False,
|
options=dict(s._options,
|
||||||
'skip_identical': False,
|
segment_size=10,
|
||||||
'leave_segments': True,
|
leave_segments=True))
|
||||||
'header': '',
|
|
||||||
'segment_size': 10,
|
|
||||||
'segment_container': None,
|
|
||||||
'use_slo': False,
|
|
||||||
'checksum': True})
|
|
||||||
|
|
||||||
mtime = r['headers']['x-object-meta-mtime']
|
mtime = r['headers']['x-object-meta-mtime']
|
||||||
self.assertEqual(expected_mtime, mtime)
|
self.assertEqual(expected_mtime, mtime)
|
||||||
|
@ -1350,12 +1345,8 @@ class TestServiceUpload(_TestServiceBase):
|
||||||
container='test_c',
|
container='test_c',
|
||||||
source=f.name,
|
source=f.name,
|
||||||
obj='test_o',
|
obj='test_o',
|
||||||
options={'changed': False,
|
options=dict(s._options,
|
||||||
'skip_identical': False,
|
leave_segments=True))
|
||||||
'leave_segments': True,
|
|
||||||
'header': '',
|
|
||||||
'segment_size': 0,
|
|
||||||
'checksum': True})
|
|
||||||
|
|
||||||
mtime = r['headers']['x-object-meta-mtime']
|
mtime = r['headers']['x-object-meta-mtime']
|
||||||
self.assertEqual(expected_mtime, mtime)
|
self.assertEqual(expected_mtime, mtime)
|
||||||
|
@ -1405,12 +1396,8 @@ class TestServiceUpload(_TestServiceBase):
|
||||||
container='test_c',
|
container='test_c',
|
||||||
source=f,
|
source=f,
|
||||||
obj='test_o',
|
obj='test_o',
|
||||||
options={'changed': False,
|
options=dict(s._options,
|
||||||
'skip_identical': False,
|
leave_segments=True))
|
||||||
'leave_segments': True,
|
|
||||||
'header': '',
|
|
||||||
'segment_size': 0,
|
|
||||||
'checksum': True})
|
|
||||||
|
|
||||||
mtime = float(r['headers']['x-object-meta-mtime'])
|
mtime = float(r['headers']['x-object-meta-mtime'])
|
||||||
self.assertEqual(mtime, expected_mtime)
|
self.assertEqual(mtime, expected_mtime)
|
||||||
|
@ -1452,12 +1439,8 @@ class TestServiceUpload(_TestServiceBase):
|
||||||
container='test_c',
|
container='test_c',
|
||||||
source=f.name,
|
source=f.name,
|
||||||
obj='test_o',
|
obj='test_o',
|
||||||
options={'changed': False,
|
options=dict(s._options,
|
||||||
'skip_identical': False,
|
leave_segments=True))
|
||||||
'leave_segments': True,
|
|
||||||
'header': '',
|
|
||||||
'segment_size': 0,
|
|
||||||
'checksum': True})
|
|
||||||
|
|
||||||
self.assertIs(r['success'], False)
|
self.assertIs(r['success'], False)
|
||||||
self.assertIn('md5 mismatch', str(r.get('error')))
|
self.assertIn('md5 mismatch', str(r.get('error')))
|
||||||
|
|
|
@ -624,7 +624,8 @@ class TestShell(unittest.TestCase):
|
||||||
connection.return_value.put_object.return_value = EMPTY_ETAG
|
connection.return_value.put_object.return_value = EMPTY_ETAG
|
||||||
connection.return_value.attempts = 0
|
connection.return_value.attempts = 0
|
||||||
argv = ["", "upload", "container", self.tmpfile,
|
argv = ["", "upload", "container", self.tmpfile,
|
||||||
"-H", "X-Storage-Policy:one"]
|
"-H", "X-Storage-Policy:one",
|
||||||
|
"--meta", "Color:Blue"]
|
||||||
swiftclient.shell.main(argv)
|
swiftclient.shell.main(argv)
|
||||||
connection.return_value.put_container.assert_called_once_with(
|
connection.return_value.put_container.assert_called_once_with(
|
||||||
'container',
|
'container',
|
||||||
|
@ -637,7 +638,8 @@ class TestShell(unittest.TestCase):
|
||||||
mock.ANY,
|
mock.ANY,
|
||||||
content_length=0,
|
content_length=0,
|
||||||
headers={'x-object-meta-mtime': mock.ANY,
|
headers={'x-object-meta-mtime': mock.ANY,
|
||||||
'X-Storage-Policy': 'one'},
|
'X-Storage-Policy': 'one',
|
||||||
|
'X-Object-Meta-Color': 'Blue'},
|
||||||
response_dict={})
|
response_dict={})
|
||||||
|
|
||||||
# upload to pseudo-folder (via <container> param)
|
# upload to pseudo-folder (via <container> param)
|
||||||
|
|
Loading…
Reference in New Issue