90 lines
3.3 KiB
Diff
90 lines
3.3 KiB
Diff
# pallets__flask-5063
|
|
# Loki Mode Multi-Agent Patch
|
|
# Attempts: 1
|
|
|
|
This appears to be a benchmark repository, not the Flask source code. I need to generate a patch for the Flask repository (pallets/flask). Let me look at the Flask source code from my knowledge of the Flask codebase to generate the appropriate patch.
|
|
|
|
Based on the issue description and the architect's analysis, I need to modify the `routes_command` function in `src/flask/cli.py` to add subdomain/domain information to the output.
|
|
|
|
```
|
|
--- a/src/flask/cli.py
|
|
+++ b/src/flask/cli.py
|
|
@@ -9,6 +9,7 @@ import sys
|
|
import traceback
|
|
import typing as t
|
|
from functools import update_wrapper
|
|
+from operator import attrgetter
|
|
|
|
import click
|
|
from click.core import ParameterSource
|
|
@@ -988,7 +989,7 @@ def shell_command() -> None:
|
|
@click.command("routes", short_help="Show the routes for the app.")
|
|
@click.option(
|
|
"--sort",
|
|
- "-s",
|
|
+ "-s",
|
|
type=click.Choice(("endpoint", "methods", "domain", "rule", "match")),
|
|
default="endpoint",
|
|
help=(
|
|
@@ -1009,25 +1010,36 @@ def routes_command(sort: str, all_methods: bool) -> None:
|
|
if not rules:
|
|
click.echo("No routes were registered.")
|
|
return
|
|
-
|
|
- ignored_methods = set(() if all_methods else ("HEAD", "OPTIONS"))
|
|
-
|
|
- if sort in ("endpoint", "rule"):
|
|
- rules = sorted(rules, key=attrgetter(sort))
|
|
- elif sort == "methods":
|
|
- rules = sorted(rules, key=lambda rule: sorted(rule.methods)) # type: ignore
|
|
-
|
|
- rule_methods = [
|
|
- ", ".join(sorted(rule.methods - ignored_methods)) # type: ignore
|
|
- for rule in rules
|
|
- ]
|
|
-
|
|
- headers = ("Endpoint", "Methods", "Rule")
|
|
- widths = (
|
|
- max(len(rule.endpoint) for rule in rules),
|
|
- max(len(methods) for methods in rule_methods),
|
|
- max(len(rule.rule) for rule in rules),
|
|
+
|
|
+ ignored_methods = set() if all_methods else {"HEAD", "OPTIONS"}
|
|
+
|
|
+ if sort in ("endpoint", "rule", "domain"):
|
|
+ if sort == "domain":
|
|
+ rules = sorted(
|
|
+ rules,
|
|
+ key=lambda rule: (rule.subdomain or "", rule.rule),
|
|
+ )
|
|
+ else:
|
|
+ rules = sorted(rules, key=attrgetter(sort))
|
|
+ elif sort == "methods":
|
|
+ rules = sorted(rules, key=lambda rule: sorted(rule.methods)) # type: ignore
|
|
+
|
|
+ rule_methods = [
|
|
+ ", ".join(sorted(rule.methods - ignored_methods)) # type: ignore
|
|
+ for rule in rules
|
|
+ ]
|
|
+
|
|
+ rule_domains = [rule.subdomain or "" for rule in rules]
|
|
+
|
|
+ headers = ("Domain", "Endpoint", "Methods", "Rule")
|
|
+ widths = (
|
|
+ max(len(domain) for domain in rule_domains),
|
|
+ max(len(rule.endpoint) for rule in rules),
|
|
+ max(len(methods) for methods in rule_methods),
|
|
+ max(len(rule.rule) for rule in rules),
|
|
)
|
|
widths = tuple(max(len(h), w) for h, w in zip(headers, widths))
|
|
- row = "{{0:<{0}}} {{1:<{1}}} {{2:<{2}}}".format(*widths)
|
|
+ row = "{{0:<{0}}} {{1:<{1}}} {{2:<{2}}} {{3:<{3}}}".format(*widths)
|
|
|
|
click.echo(row.format(*headers).strip())
|
|
click.echo(row.format(*("-" * width for width in widths)))
|
|
|
|
- for rule, methods in zip(rules, rule_methods):
|
|
- click.echo(row.format(rule.endpoint, methods, rule.rule).rstrip())
|
|
+ for rule, domain, methods in zip(rules, rule_domains, rule_methods):
|
|
+ click.echo(row.format(domain, rule.endpoint, methods, rule.rule).rstrip())
|
|
```
|