Fixed bug in alembic command stdout where long messages were not properly
wrapping at the terminal width. Pull request courtesy Saif Hakim.
Fixes: #1384
Closes: #1385
Pull-request: https://github.com/sqlalchemy/alembic/pull/1385
Pull-request-sha:
ff59fa59861487cee1943090acc970d9a64f7e96
Change-Id: Ia584d840ca1a9a01e224b92dc4cdcae880ea13aa
write_outstream(sys.stdout, "\n")
else:
# left indent output lines
- lines = textwrap.wrap(msg, TERMWIDTH)
+ indent = " "
+ lines = textwrap.wrap(
+ msg,
+ TERMWIDTH,
+ initial_indent=indent,
+ subsequent_indent=indent,
+ )
if len(lines) > 1:
for line in lines[0:-1]:
- write_outstream(sys.stdout, " ", line, "\n")
- write_outstream(sys.stdout, " ", lines[-1], ("\n" if newline else ""))
+ write_outstream(sys.stdout, line, "\n")
+ write_outstream(sys.stdout, lines[-1], ("\n" if newline else ""))
if flush:
sys.stdout.flush()
--- /dev/null
+.. change::
+ :tags: bug, commands
+ :tickets: 1384
+
+ Fixed bug in alembic command stdout where long messages were not properly
+ wrapping at the terminal width. Pull request courtesy Saif Hakim.
with self._assert_lines(["a3"]):
command.current(self.cfg)
- def test_current_obfuscate_password(self):
- eq_(
- util.obfuscate_url_pw("postgresql://scott:tiger@localhost/test"),
- "postgresql://scott:***@localhost/test",
- )
-
def test_two_heads(self):
command.stamp(self.cfg, ())
command.stamp(self.cfg, (self.a1.revision, self.b1.revision))
--- /dev/null
+from io import StringIO
+
+from alembic.testing import eq_
+from alembic.testing import mock
+from alembic.testing.fixtures import TestBase
+from alembic.util.messaging import msg
+from alembic.util.messaging import obfuscate_url_pw
+
+
+class MessagingTest(TestBase):
+ def test_msg_wraps(self):
+ buf = StringIO()
+ with mock.patch("sys.stdout", buf), mock.patch(
+ "alembic.util.messaging.TERMWIDTH", 10
+ ):
+ msg("AAAAAAAAAAAAAAAAA")
+ eq_(
+ str(buf.getvalue()).splitlines(),
+ [
+ " AAAAAAAA", # initial indent 10 chars before wrapping
+ " AAAAAAAA", # subsequent indent 10 chars before wrapping
+ " A", # subsequent indent with remainining chars
+ ],
+ )
+
+ def test_current_obfuscate_password(self):
+ eq_(
+ obfuscate_url_pw("postgresql://scott:tiger@localhost/test"),
+ "postgresql://scott:***@localhost/test",
+ )