forked from orbit-oss/flask
Added routes command, which shows all the endpoints registered for the app.
Orderable by rules, endpoints and methods. Shows up in the builtin command list.
This commit is contained in:
parent
0e4607000d
commit
1647179511
1 changed files with 28 additions and 0 deletions
28
flask/cli.py
28
flask/cli.py
|
|
@ -304,6 +304,7 @@ class FlaskGroup(AppGroup):
|
|||
if add_default_commands:
|
||||
self.add_command(run_command)
|
||||
self.add_command(shell_command)
|
||||
self.add_command(routes_command)
|
||||
|
||||
self._loaded_plugin_commands = False
|
||||
|
||||
|
|
@ -461,6 +462,33 @@ def shell_command():
|
|||
code.interact(banner=banner, local=ctx)
|
||||
|
||||
|
||||
@click.command('routes', short_help='Show routes for the app.')
|
||||
@click.option('-r', 'order_by', flag_value='rule', default=True, help='Order by route')
|
||||
@click.option('-e', 'order_by', flag_value='endpoint', help='Order by endpoint')
|
||||
@click.option('-m', 'order_by', flag_value='methods', help='Order by methods')
|
||||
@with_appcontext
|
||||
def routes_command(order_by):
|
||||
"""Show all routes with endpoints and methods."""
|
||||
from flask.globals import _app_ctx_stack
|
||||
app = _app_ctx_stack.top.app
|
||||
|
||||
order_key = lambda rule: getattr(rule, order_by)
|
||||
sorted_rules = sorted(app.url_map.iter_rules(), key=order_key)
|
||||
|
||||
max_rule = max(len(rule.rule) for rule in sorted_rules)
|
||||
max_ep = max(len(rule.endpoint) for rule in sorted_rules)
|
||||
max_meth = max(len(', '.join(rule.methods)) for rule in sorted_rules)
|
||||
|
||||
columnformat = '{:<%s} {:<%s} {:<%s}' % (max_rule, max_ep, max_meth)
|
||||
click.echo(columnformat.format('Route', 'Endpoint', 'Methods'))
|
||||
under_count = max_rule + max_ep + max_meth + 4
|
||||
click.echo('-' * under_count)
|
||||
|
||||
for rule in sorted_rules:
|
||||
methods = ', '.join(rule.methods)
|
||||
click.echo(columnformat.format(rule.rule, rule.endpoint, methods))
|
||||
|
||||
|
||||
cli = FlaskGroup(help="""\
|
||||
This shell command acts as general utility script for Flask applications.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue