From d88ae9568f8e8961fb25e62e823a83c26296264a Mon Sep 17 00:00:00 2001 From: Christoph Urlacher Date: Sun, 10 Mar 2024 20:08:41 +0100 Subject: [PATCH] Add frontend button to fetch from OpenF1 --- formula10/controller/admin_controller.py | 16 +++++++++++++++- formula10/openf1/openf1_fetcher.py | 7 +++++-- formula10/templates/result.jinja | 15 +++++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/formula10/controller/admin_controller.py b/formula10/controller/admin_controller.py index 2cd1a51..15fcea9 100644 --- a/formula10/controller/admin_controller.py +++ b/formula10/controller/admin_controller.py @@ -2,12 +2,15 @@ from typing import List from urllib.parse import unquote from flask import redirect, render_template, request from werkzeug import Response -from formula10.controller.error_controller import error_redirect +from formula10.controller.error_controller import error_redirect from formula10.database.update_queries import update_race_result, update_user from formula10.domain.domain_model import Model from formula10.domain.template_model import TemplateModel from formula10 import app +from formula10.openf1.model.api_session import ApiSession +from formula10.openf1.openf1_definitions import OPENF1_SESSION_NAME_RACE +from formula10.openf1.openf1_fetcher import fetch_openf1_driver, fetch_openf1_position, fetch_openf1_session @app.route("/result") @@ -44,6 +47,17 @@ def result_enter_post(race_name: str) -> Response: return update_race_result(race_id, pxxs, first_dnfs, dnfs, excluded, int(fastest_lap), sprint_pxxs, sprint_dnf_drivers) +@app.route("/result-fetch/", methods=["POST"]) +def result_fetch_post(race_name: str) -> Response: + session: ApiSession = fetch_openf1_session(OPENF1_SESSION_NAME_RACE, "KSA") + fetch_openf1_driver(session.session_key, "VER") + fetch_openf1_position(session.session_key, 1) + + # @todo Fetch stuff and build the race_result using update_race_result(...) + + return redirect("/result") + + @app.route("/user") def user_root() -> str: model = TemplateModel(active_user_name=None, diff --git a/formula10/openf1/openf1_fetcher.py b/formula10/openf1/openf1_fetcher.py index f39ff31..b4c668b 100644 --- a/formula10/openf1/openf1_fetcher.py +++ b/formula10/openf1/openf1_fetcher.py @@ -1,5 +1,6 @@ +from datetime import datetime import json -from typing import Any, Dict, List, cast +from typing import Any, Callable, Dict, List, cast from requests import Response, get from formula10.openf1.model.api_driver import ApiDriver @@ -70,4 +71,6 @@ def fetch_openf1_position(session_key: int, position: int): response: List[Dict[str, str]] = request_helper(OPENF1_POSITION_ENDPOINT, _position.to_params()) - return ApiPosition(response[0]) \ No newline at end of file + # Find the last driver that was on this position at last + predicate: Callable[[Dict[str, str]], datetime] = lambda position: datetime.strptime(position["date"], "%Y-%m-%dT%H:%M:%S.%f") + return ApiPosition(max(response, key=predicate)) \ No newline at end of file diff --git a/formula10/templates/result.jinja b/formula10/templates/result.jinja index 93ee95f..e4d5081 100644 --- a/formula10/templates/result.jinja +++ b/formula10/templates/result.jinja @@ -45,10 +45,25 @@ {% set race_result_open=model.race_result_open(model.active_result_race_name_or_current_race_name()) %} {% if race_result_open == true %} {% set action_save_href = "/result-enter/" ~ model.active_result_race_name_or_current_race_name_sanitized() %} + {% set action_fetch_href = "/result-fetch/" ~ model.active_result_race_name_or_current_race_name_sanitized() %} {% else %} {% set action_save_href = "" %} + {% set action_fetch_href = "" %} {% endif %} +
+
+
+ OpenF1 +
+ +
+ +
+
+
+
{# Race result #}