Dedent Common Whitespace From Multiline String
July 29, 2026 ยท View on GitHub
I'm adding tests to cover some custom logic in the usage messages that are produced by Click in a CLI I'm building. The usage output is a mutliline string formatted with some indentation. On top of that, I'm putting it in a Python test file with some additional syntactical indentation.
If this was Ruby, I would reach for the <<~ heredoc syntax. The closest
equivalent to that in Python is
textwrap.dedent.
Remove any common leading whitespace from every line in text.
This can be used to make triple-quoted strings line up with the left edge of the display, while still presenting them in the source code in indented form.
import textwrap
def test_base_help_message():
runner = BetterCliRunner()
help_result = runner.invoke(cli, ["--help"])
output = textwrap.dedent("""\
Usage: vmt [OPTIONS] COMMAND [ARGS]...
Options:
-v, --verbose See extra output when running commands
--help Show this message and exit.
Commands:
cancel
log
start
status
stop
""")
assert output in help_result.output
Before adding in textwrap.dedent, the test was failing because of bits of
extra whitespace that wasn't matching up with the actual CLI output.
Note: the leading \ after the opening """ is needed to remove the leading
newline that would otherwise be included.