Multi lines Click epilog from a file

53 views Asked by At

I'm developping a large Python3 application, with Click to handle parameters.
Some actions have many scenarios, and I describe them in the epilog.

To keep the script clean, I would like to put epilogs in separate files, read them and format them with \b to have the multi lines support.

Can I do this and how, please ?

My actual code :

import click

@click.command(epilog="""\b
Commands:
  action       Available values are : check, create, delete, get, index, list, restore, write
  part         Available values are : template, data, backup
  item         Available values are : level, folder, record, group, variable
\b
Available situations and parameters:
- activate (Activate a project version) (T) :
    (no parameter)
...
""")
@click.argument('action', metavar='action', type=click.Choice(['activate', 'check', 'create', 'copy', 'delete', 'get', 'index', 'list', 'restore', 'write']))
@click.argument('part', metavar='part', type=click.Choice(['backup', 'data', 'template', 'version']), required=False)
@click.argument('item', metavar='item', type=click.Choice(['level', 'folder', 'record', 'group', 'variable']), required=False)
def project(action, part, item):
  # some stuff

What I want :

import click

# >>> Read a 'project.epilog' file into epilog var <<< #
  
@click.command(epilog=epilog)
@click.argument('action', metavar='action', type=click.Choice(['activate', 'check', 'create', 'copy', 'delete', 'get', 'index', 'list', 'restore', 'write']))
@click.argument('part', metavar='part', type=click.Choice(['backup', 'data', 'template', 'version']), required=False)
@click.argument('item', metavar='item', type=click.Choice(['level', 'folder', 'record', 'group', 'variable']), required=False)
def project(action, part, item):
  # some stuff
1

There are 1 answers

0
fragadass On

I found the solution with re :

with open('project.epilog', 'rt') as f:
  epilog=re.sub('\\\\b', '\\b', f.read())

The final result is :

import click, re

with open('project.epilog', 'rt') as f:
  epilog=re.sub('\\\\b', '\\b', f.read())

@click.command(epilog=epilog)
@click.argument('action', metavar='action', type=click.Choice(['activate', 'check', 'create', 'copy', 'delete', 'get', 'index', 'list', 'restore', 'write']))
@click.argument('part', metavar='part', type=click.Choice(['backup', 'data', 'template', 'version']), required=False)
@click.argument('item', metavar='item', type=click.Choice(['level', 'folder', 'record', 'group', 'variable']), required=False)
def project(action, part, item):
  # some stuff