from flask import current_app


def list_routes():
    """List URLs of all application routes."""
    for rule in sorted(current_app.url_map.iter_rules(), key=lambda r: r.rule):
        print("{:10} {}".format(", ".join(rule.methods - set(['OPTIONS', 'HEAD'])), rule.rule))  # noqa


def setup_commands(application):
    application.cli.command('list-routes')(list_routes)

import click
from flask import current_app
from flask.cli import with_appcontext


@click.command('list-routes')
@with_appcontext
def list_routes():
    """List URLs of all application routes."""
    for rule in sorted(current_app.url_map.iter_rules(), key=lambda r: r.rule):
        print("{:10} {}".format(", ".join(rule.methods - set(['OPTIONS', 'HEAD'])), rule.rule))  # noqa


def setup_commands(application):
    application.cli.add_command(list_routes)

Switch existing command to standard approach
Switch existing command to standard approach

This is the suggested approach in the documentation [1] and using
it makes it clearer what's going on and to add other commands with
arguments, which we'll do in the next commit.

[1]: https://flask.palletsprojects.com/en/2.0.x/cli/#custom-commands
