Before writing object data to stdout, re-open it in binary mode
Otherwise, you can hit TypeErrors on Python3. Change-Id: I9a891508886feddac3982ce593bd95130392e035 Closes-Bug: 1775482
This commit is contained in:
parent
c53de3214e
commit
415b48056d
@ -378,8 +378,9 @@ class APIv1(api.BaseAPI):
|
||||
)
|
||||
if response.status_code == 200:
|
||||
if file == '-':
|
||||
for chunk in response.iter_content(64 * 1024):
|
||||
sys.stdout.write(chunk)
|
||||
with os.fdopen(sys.stdout.fileno(), 'wb') as f:
|
||||
for chunk in response.iter_content(64 * 1024):
|
||||
f.write(chunk)
|
||||
else:
|
||||
if not os.path.exists(os.path.dirname(file)):
|
||||
if len(os.path.dirname(file)) > 0:
|
||||
|
@ -241,7 +241,25 @@ class TestObjectSave(TestObjectAll):
|
||||
|
||||
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||
|
||||
with mock.patch('sys.stdout', new=six.BytesIO()) as fake_stdout:
|
||||
class FakeStdout(six.BytesIO):
|
||||
def __init__(self):
|
||||
six.BytesIO.__init__(self)
|
||||
self.context_manager_calls = []
|
||||
|
||||
def __enter__(self):
|
||||
self.context_manager_calls.append('__enter__')
|
||||
return self
|
||||
|
||||
def __exit__(self, *a):
|
||||
self.context_manager_calls.append('__exit__')
|
||||
|
||||
with mock.patch('sys.stdout') as fake_stdout, mock.patch(
|
||||
'os.fdopen', return_value=FakeStdout()) as fake_fdopen:
|
||||
fake_stdout.fileno.return_value = 123
|
||||
self.cmd.take_action(parsed_args)
|
||||
|
||||
self.assertEqual(fake_stdout.getvalue(), object_fakes.object_1_content)
|
||||
self.assertEqual(fake_fdopen.return_value.getvalue(),
|
||||
object_fakes.object_1_content)
|
||||
self.assertEqual(fake_fdopen.mock_calls, [mock.call(123, 'wb')])
|
||||
self.assertEqual(fake_fdopen.return_value.context_manager_calls,
|
||||
['__enter__', '__exit__'])
|
||||
|
6
releasenotes/notes/bug-1775482-7ed2a9a8765b313e.yaml
Normal file
6
releasenotes/notes/bug-1775482-7ed2a9a8765b313e.yaml
Normal file
@ -0,0 +1,6 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Re-open stdout in binary mode before writing object data in
|
||||
``object save --file -`` command.
|
||||
[Bug `1775482 <https://bugs.launchpad.net/python-openstackclient/+bug/1775482>`_]
|
Loading…
Reference in New Issue
Block a user