Use path segments for journey result URLs

This commit is contained in:
Edward Betts 2026-05-26 13:19:22 +01:00
parent ce6e8afcc8
commit 1c230ce0d6
3 changed files with 76 additions and 55 deletions

50
app.py
View file

@ -389,9 +389,15 @@ def _results_url(
**params,
)
if journey_type == "inbound":
params["journey_type"] = "inbound"
return url_for(
"back_results",
station_crs=station_crs,
slug=slug,
travel_date=travel_date,
**params,
)
return url_for(
"results",
"out_results",
station_crs=station_crs,
slug=slug,
travel_date=travel_date,
@ -463,18 +469,17 @@ def search() -> ResponseReturnValue:
return redirect(url_for("index"))
@app.route("/results/<station_crs>/<slug>/<travel_date>")
def results(station_crs: str, slug: str, travel_date: str) -> ResponseReturnValue:
return _results(
station_crs,
slug,
travel_date,
request.args.get("journey_type", "outbound"),
request.args.get("return_date"),
)
@app.route("/results/<station_crs>/<slug>/out/<travel_date>")
def out_results(station_crs: str, slug: str, travel_date: str) -> ResponseReturnValue:
return _results(station_crs, slug, travel_date, "outbound", None)
@app.route("/results/<station_crs>/<slug>/<travel_date>/return/<return_date>")
@app.route("/results/<station_crs>/<slug>/back/<travel_date>")
def back_results(station_crs: str, slug: str, travel_date: str) -> ResponseReturnValue:
return _results(station_crs, slug, travel_date, "inbound", None)
@app.route("/results/<station_crs>/<slug>/return/<travel_date>/<return_date>")
def return_results(
station_crs: str, slug: str, travel_date: str, return_date: str
) -> ResponseReturnValue:
@ -1108,7 +1113,7 @@ def _results(
station_crs=station_crs,
slug=slug,
travel_date=travel_date,
journey_type=journey_type if journey_type == "inbound" else None,
path_journey_type="back" if journey_type == "inbound" else "out",
)
summary_html = _build_summary_html(
@ -1331,7 +1336,7 @@ def _results(
station_crs=station_crs,
slug=slug,
travel_date=travel_date,
journey_type=journey_type if journey_type == "inbound" else None,
path_journey_type="back" if journey_type == "inbound" else "out",
)
return render_template(
@ -1480,15 +1485,20 @@ def api_walkon_fares(
return jsonify({"error": str(e)}), 500
@app.route("/api/results_refresh/<station_crs>/<slug>/<travel_date>")
def api_results_refresh(station_crs: str, slug: str, travel_date: str) -> Response:
return _api_results_refresh(
station_crs, slug, travel_date, request.args.get("return_date")
)
@app.route(
"/api/results_refresh/<station_crs>/<slug>/<path_journey_type>/<travel_date>"
)
def api_results_refresh(
station_crs: str, slug: str, path_journey_type: str, travel_date: str
) -> Response:
if path_journey_type not in {"out", "back"}:
abort(404)
journey_type = "inbound" if path_journey_type == "back" else "outbound"
return _api_results_refresh(station_crs, slug, travel_date, None, journey_type)
@app.route(
"/api/results_refresh/<station_crs>/<slug>/<travel_date>/return/<return_date>"
"/api/results_refresh/<station_crs>/<slug>/return/<travel_date>/<return_date>"
)
def api_return_results_refresh(
station_crs: str, slug: str, travel_date: str, return_date: str