Add frontend button to fetch from OpenF1
All checks were successful
Build Formula10 Docker Image / build-docker (push) Successful in 24s

This commit is contained in:
2024-03-10 20:08:41 +01:00
parent 1ab92eff9a
commit d88ae9568f
3 changed files with 35 additions and 3 deletions

View File

@ -2,12 +2,15 @@ from typing import List
from urllib.parse import unquote from urllib.parse import unquote
from flask import redirect, render_template, request from flask import redirect, render_template, request
from werkzeug import Response 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.database.update_queries import update_race_result, update_user
from formula10.domain.domain_model import Model from formula10.domain.domain_model import Model
from formula10.domain.template_model import TemplateModel from formula10.domain.template_model import TemplateModel
from formula10 import app 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") @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) return update_race_result(race_id, pxxs, first_dnfs, dnfs, excluded, int(fastest_lap), sprint_pxxs, sprint_dnf_drivers)
@app.route("/result-fetch/<race_name>", 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") @app.route("/user")
def user_root() -> str: def user_root() -> str:
model = TemplateModel(active_user_name=None, model = TemplateModel(active_user_name=None,

View File

@ -1,5 +1,6 @@
from datetime import datetime
import json import json
from typing import Any, Dict, List, cast from typing import Any, Callable, Dict, List, cast
from requests import Response, get from requests import Response, get
from formula10.openf1.model.api_driver import ApiDriver 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()) response: List[Dict[str, str]] = request_helper(OPENF1_POSITION_ENDPOINT, _position.to_params())
return ApiPosition(response[0]) # 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))

View File

@ -45,10 +45,25 @@
{% set race_result_open=model.race_result_open(model.active_result_race_name_or_current_race_name()) %} {% set race_result_open=model.race_result_open(model.active_result_race_name_or_current_race_name()) %}
{% if race_result_open == true %} {% if race_result_open == true %}
{% set action_save_href = "/result-enter/" ~ model.active_result_race_name_or_current_race_name_sanitized() %} {% 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 %} {% else %}
{% set action_save_href = "" %} {% set action_save_href = "" %}
{% set action_fetch_href = "" %}
{% endif %} {% endif %}
<form action="{{ action_fetch_href }}" method="post">
<div class="card shadow-sm mb-2 w-100">
<div class="card-header">
OpenF1
</div>
<div class="card-body">
<input type="submit" class="btn btn-danger mt-2 w-100" value="Fetch from OpenF1"
{% if race_result_open == false %}disabled="disabled"{% endif %}>
</div>
</div>
</form>
<form class="grid card-grid" action="{{ action_save_href }}" method="post"> <form class="grid card-grid" action="{{ action_save_href }}" method="post">
{# Race result #} {# Race result #}