I am seeing that a newline is not being preserved in my EPILOG? I want to know why if I see that newline remains only when a line has 74
characters?
# http://click.pocoo.org/5/commands/
import click, sys
def main_caller(*args, **kwargs):
print('act on arguments', args, kwargs)
EPILOG = '''
# oneline
# twoline
\n
# oneline with 74char x
# twoline with 74char x
'''
@click.group(help='wwwwwwwwww', epilog=EPILOG, invoke_without_command=True, chain=True)
@click.argument('start_or_stop')
@click.option('-v', '--verbose', default=False, help='Print Verbose messages')
@click.option('-l', '--logfile', help='Path to logfile to store log messages')
@click.option('-a', '--action', multiple=True, type=click.Choice(['act1', 'act2', 'act3']), default=['act1', 'act2'])
def cli(*args, **kwargs):
'''foo bar'''
pass
@cli.command()
@click.option('--debug/--no-debug', default=False)
def cmd1(*args, **kwargs):
print('cmd1', args, kwargs)
return 'cmd11111'
@cli.command()
@click.option('-x', '--xxx', default='x')
def cmd2(*args, **kwargs):
print('cmd2', args, kwargs)
return 'cmd22222'
@cli.resultcallback()
def process_pipeline(*args, **kwargs):
print('process', args, kwargs)
print('args', sys.argv[1:])
if __name__ == '__main__':
cli()
Output is:
/click_sandbox.py --help
2017/02/24 19:31:43 Platform overridden to 'RHEL5_64'
Usage: click_sandbox.py [OPTIONS] START_OR_STOP COMMAND1 [ARGS]... [COMMAND2
[ARGS]...]...
wwwwwwwwww
Options:
-v, --verbose TEXT Print Verbose messages
-l, --logfile TEXT Path to logfile to store log messages
-a, --action [act1|act2|act3]
--help Show this message and exit.
Commands:
cmd1
cmd2
# oneline # twoline
# oneline with 74char x
# twoline with 74char x
The echo() function supports ANSI colors and styles. On Windows this uses colorama. Primarily this means that: Click's echo() function will automatically strip ANSI color codes if the stream is not connected to a terminal.
This is a special attribute where commands are supposed to remember what they need to pass on to their children. In order for this to work, we need to mark our function with pass_context() , because otherwise, the context object would be entirely hidden from us.
In Click 7.0 you use the \b marker to indicate that the formatting is to be preserved e.g.:
This paragraph is formatted normally and Click does
not preserve new lines.
\b
This paragraph is formatted as it
appears in the source:
item 1
item 2
This paragraph is formatted normally and Click does
not preserve new lines.
Your newlines are not being preserved because the epilog writer does word wrapping. This can be solved with a subclass to click.Group
, by creating a format_epilog()
which does not do word wrapping:
class SpecialEpilog(click.Group):
def format_epilog(self, ctx, formatter):
if self.epilog:
formatter.write_paragraph()
for line in self.epilog.split('\n'):
formatter.write_text(line)
# Tell click to use our epilog formatter
@click.group(cls=SpecialEpilog,
help='wwwwwwwwww', epilog=EPILOG, invoke_without_command=True, chain=True)
....
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With