From 16471795117bb2d200888e49af5b621377bc1436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kiss=20Gy=C3=B6rgy?= Date: Sun, 26 Apr 2015 09:40:20 +0200 Subject: [PATCH] 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. --- flask/cli.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/flask/cli.py b/flask/cli.py index 3796c083..2565657f 100644 --- a/flask/cli.py +++ b/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.