Skip to content

Commit

Permalink
Merge "fix alembic.util.messaging.msg to properly wrap at terminal wi…
Browse files Browse the repository at this point in the history
…dth" into main
  • Loading branch information
zzzeek authored and Gerrit Code Review committed Jan 13, 2024
2 parents f24a644 + 18f51d5 commit 2d60c77
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 9 deletions.
12 changes: 9 additions & 3 deletions alembic/util/messaging.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,11 +95,17 @@ def msg(
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()

Expand Down
6 changes: 6 additions & 0 deletions docs/build/unreleased/1384.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.. 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.
6 changes: 0 additions & 6 deletions tests/test_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -323,12 +323,6 @@ def test_plain_current(self):
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))
Expand Down
30 changes: 30 additions & 0 deletions tests/test_messaging.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
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",
)

0 comments on commit 2d60c77

Please sign in to comment.