mirror of https://github.com/docker/compose.git
Fix log printing for python3 by converting everything to unicode.
Signed-off-by: Daniel Nephin <dnephin@gmail.com>
This commit is contained in:
parent
a348993d2c
commit
9d9550c5b6
|
@ -57,7 +57,7 @@ class LogPrinter(object):
|
|||
def _make_log_generator(self, container, color_fn):
|
||||
prefix = color_fn(self._generate_prefix(container))
|
||||
# Attach to container before log printer starts running
|
||||
line_generator = split_buffer(self._attach(container), '\n')
|
||||
line_generator = split_buffer(self._attach(container), u'\n')
|
||||
|
||||
for line in line_generator:
|
||||
yield prefix + line
|
||||
|
|
|
@ -7,6 +7,7 @@ import platform
|
|||
import ssl
|
||||
import subprocess
|
||||
|
||||
import six
|
||||
from docker import version as docker_py_version
|
||||
from six.moves import input
|
||||
|
||||
|
@ -63,11 +64,11 @@ def split_buffer(reader, separator):
|
|||
separator, except for the last one if none was found on the end
|
||||
of the input.
|
||||
"""
|
||||
buffered = str('')
|
||||
separator = str(separator)
|
||||
buffered = six.text_type('')
|
||||
separator = six.text_type(separator)
|
||||
|
||||
for data in reader:
|
||||
buffered += data
|
||||
buffered += data.decode('utf-8')
|
||||
while True:
|
||||
index = buffered.find(separator)
|
||||
if index == -1:
|
||||
|
|
|
@ -12,7 +12,7 @@ from tests import unittest
|
|||
class LogPrinterTest(unittest.TestCase):
|
||||
def get_default_output(self, monochrome=False):
|
||||
def reader(*args, **kwargs):
|
||||
yield "hello\nworld"
|
||||
yield b"hello\nworld"
|
||||
|
||||
container = MockContainer(reader)
|
||||
output = run_log_printer([container], monochrome=monochrome)
|
||||
|
@ -36,11 +36,10 @@ class LogPrinterTest(unittest.TestCase):
|
|||
glyph = u'\u2022'
|
||||
|
||||
def reader(*args, **kwargs):
|
||||
yield glyph + '\n'
|
||||
yield glyph.encode('utf-8') + b'\n'
|
||||
|
||||
container = MockContainer(reader)
|
||||
output = run_log_printer([container])
|
||||
|
||||
if six.PY2:
|
||||
output = output.decode('utf-8')
|
||||
|
||||
|
|
|
@ -8,33 +8,33 @@ from compose.cli.utils import split_buffer
|
|||
class SplitBufferTest(unittest.TestCase):
|
||||
def test_single_line_chunks(self):
|
||||
def reader():
|
||||
yield 'abc\n'
|
||||
yield 'def\n'
|
||||
yield 'ghi\n'
|
||||
yield b'abc\n'
|
||||
yield b'def\n'
|
||||
yield b'ghi\n'
|
||||
|
||||
self.assert_produces(reader, ['abc\n', 'def\n', 'ghi\n'])
|
||||
|
||||
def test_no_end_separator(self):
|
||||
def reader():
|
||||
yield 'abc\n'
|
||||
yield 'def\n'
|
||||
yield 'ghi'
|
||||
yield b'abc\n'
|
||||
yield b'def\n'
|
||||
yield b'ghi'
|
||||
|
||||
self.assert_produces(reader, ['abc\n', 'def\n', 'ghi'])
|
||||
|
||||
def test_multiple_line_chunk(self):
|
||||
def reader():
|
||||
yield 'abc\ndef\nghi'
|
||||
yield b'abc\ndef\nghi'
|
||||
|
||||
self.assert_produces(reader, ['abc\n', 'def\n', 'ghi'])
|
||||
|
||||
def test_chunked_line(self):
|
||||
def reader():
|
||||
yield 'a'
|
||||
yield 'b'
|
||||
yield 'c'
|
||||
yield '\n'
|
||||
yield 'd'
|
||||
yield b'a'
|
||||
yield b'b'
|
||||
yield b'c'
|
||||
yield b'\n'
|
||||
yield b'd'
|
||||
|
||||
self.assert_produces(reader, ['abc\n', 'd'])
|
||||
|
||||
|
@ -42,12 +42,12 @@ class SplitBufferTest(unittest.TestCase):
|
|||
string = u"a\u2022c\n"
|
||||
|
||||
def reader():
|
||||
yield string
|
||||
yield string.encode('utf-8')
|
||||
|
||||
self.assert_produces(reader, [string])
|
||||
|
||||
def assert_produces(self, reader, expectations):
|
||||
split = split_buffer(reader(), '\n')
|
||||
split = split_buffer(reader(), u'\n')
|
||||
|
||||
for (actual, expected) in zip(split, expectations):
|
||||
self.assertEqual(type(actual), type(expected))
|
||||
|
|
Loading…
Reference in New Issue