Support image save with chunk-size option
Add '--chunk-size' option to 'image save' command to control the size of bytes to read at one time. Change-Id: I0a02323384433010b8c6804a4337040acb13da8f Signed-off-by: Hang Yang <hangyang@verizonmedia.com>
This commit is contained in:

committed by
Stephen Finucane

parent
37228ae2d3
commit
13fe801968
@@ -528,6 +528,16 @@ class SaveImage(command.Command):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super().get_parser(prog_name)
|
parser = super().get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
"--chunk-size",
|
||||||
|
type=int,
|
||||||
|
default=1024,
|
||||||
|
metavar="<chunk-size>",
|
||||||
|
help=_(
|
||||||
|
"Size in bytes to read from the wire and buffer at one "
|
||||||
|
"time (default: 1024)"
|
||||||
|
),
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--file",
|
"--file",
|
||||||
metavar="<filename>",
|
metavar="<filename>",
|
||||||
@@ -550,7 +560,12 @@ class SaveImage(command.Command):
|
|||||||
if output_file is None:
|
if output_file is None:
|
||||||
output_file = getattr(sys.stdout, "buffer", sys.stdout)
|
output_file = getattr(sys.stdout, "buffer", sys.stdout)
|
||||||
|
|
||||||
image_client.download_image(image.id, stream=True, output=output_file)
|
image_client.download_image(
|
||||||
|
image.id,
|
||||||
|
stream=True,
|
||||||
|
output=output_file,
|
||||||
|
chunk_size=parsed_args.chunk_size,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class SetImage(command.Command):
|
class SetImage(command.Command):
|
||||||
|
@@ -1066,6 +1066,16 @@ class SaveImage(command.Command):
|
|||||||
|
|
||||||
def get_parser(self, prog_name):
|
def get_parser(self, prog_name):
|
||||||
parser = super().get_parser(prog_name)
|
parser = super().get_parser(prog_name)
|
||||||
|
parser.add_argument(
|
||||||
|
"--chunk-size",
|
||||||
|
type=int,
|
||||||
|
default=1024,
|
||||||
|
metavar="<chunk-size>",
|
||||||
|
help=_(
|
||||||
|
"Size in bytes to read from the wire and buffer at one "
|
||||||
|
"time (default: 1024)"
|
||||||
|
),
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
"--file",
|
"--file",
|
||||||
metavar="<filename>",
|
metavar="<filename>",
|
||||||
@@ -1090,7 +1100,12 @@ class SaveImage(command.Command):
|
|||||||
if output_file is None:
|
if output_file is None:
|
||||||
output_file = getattr(sys.stdout, "buffer", sys.stdout)
|
output_file = getattr(sys.stdout, "buffer", sys.stdout)
|
||||||
|
|
||||||
image_client.download_image(image.id, stream=True, output=output_file)
|
image_client.download_image(
|
||||||
|
image.id,
|
||||||
|
stream=True,
|
||||||
|
output=output_file,
|
||||||
|
chunk_size=parsed_args.chunk_size,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class SetImage(command.Command):
|
class SetImage(command.Command):
|
||||||
|
@@ -757,3 +757,50 @@ class TestImageShow(image_fakes.TestImagev1):
|
|||||||
|
|
||||||
size_index = columns.index('size')
|
size_index = columns.index('size')
|
||||||
self.assertEqual(data[size_index].human_readable(), '2K')
|
self.assertEqual(data[size_index].human_readable(), '2K')
|
||||||
|
|
||||||
|
|
||||||
|
class TestImageSave(image_fakes.TestImagev1):
|
||||||
|
image = image_fakes.create_one_image({})
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
self.image_client.find_image.return_value = self.image
|
||||||
|
self.image_client.download_image.return_value = self.image
|
||||||
|
|
||||||
|
# Get the command object to test
|
||||||
|
self.cmd = image.SaveImage(self.app, None)
|
||||||
|
|
||||||
|
def test_save_data(self):
|
||||||
|
arglist = ['--file', '/path/to/file', self.image.id]
|
||||||
|
|
||||||
|
verifylist = [('file', '/path/to/file'), ('image', self.image.id)]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.image_client.download_image.assert_called_once_with(
|
||||||
|
self.image.id, output='/path/to/file', stream=True, chunk_size=1024
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_save_data_with_chunk_size(self):
|
||||||
|
arglist = [
|
||||||
|
'--file',
|
||||||
|
'/path/to/file',
|
||||||
|
'--chunk-size',
|
||||||
|
'2048',
|
||||||
|
self.image.id,
|
||||||
|
]
|
||||||
|
|
||||||
|
verifylist = [
|
||||||
|
('file', '/path/to/file'),
|
||||||
|
('chunk_size', 2048),
|
||||||
|
('image', self.image.id),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.image_client.download_image.assert_called_once_with(
|
||||||
|
self.image.id, output='/path/to/file', stream=True, chunk_size=2048
|
||||||
|
)
|
||||||
|
@@ -2228,7 +2228,29 @@ class TestImageSave(TestImage):
|
|||||||
self.cmd.take_action(parsed_args)
|
self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
self.image_client.download_image.assert_called_once_with(
|
self.image_client.download_image.assert_called_once_with(
|
||||||
self.image.id, stream=True, output='/path/to/file'
|
self.image.id, output='/path/to/file', stream=True, chunk_size=1024
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_save_data_with_chunk_size(self):
|
||||||
|
arglist = [
|
||||||
|
'--file',
|
||||||
|
'/path/to/file',
|
||||||
|
'--chunk-size',
|
||||||
|
'2048',
|
||||||
|
self.image.id,
|
||||||
|
]
|
||||||
|
|
||||||
|
verifylist = [
|
||||||
|
('filename', '/path/to/file'),
|
||||||
|
('chunk_size', 2048),
|
||||||
|
('image', self.image.id),
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.image_client.download_image.assert_called_once_with(
|
||||||
|
self.image.id, output='/path/to/file', stream=True, chunk_size=2048
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Add ``--chunk-size`` option to ``image save`` command to control the size
|
||||||
|
of bytes to read at one time.
|
Reference in New Issue
Block a user