diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index b416e91..bb7dda0 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -27,4 +27,4 @@ jobs:
run: poetry install --no-root
- name: 📊 Run tests
- run: poetry run pytest
+ run: poetry run pytest -rpP
diff --git a/README.md b/README.md
index a4d7994..dc5511c 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,7 @@ Table of Contents:
- [Interactive Jupyter notebook](#interactive-jupyter-notebook)
- [Using Jupyter Lab](#using-jupyter-lab)
- [Running the notebook in VS Code](#running-the-notebook-in-vs-code)
+ - [Running tests](#running-tests)
- [Contribution Guidelines](#contribution-guidelines)
- [Deployment](#deployment)
@@ -24,7 +25,7 @@ Table of Contents:
### What you'll need
-- [VSCode](https://code.visualstudio.com/) / [Intellij Pycharm](https://www.jetbrains.com/pycharm/)
+- [VSCode](https://code.visualstudio.com/) / [Pycharm](https://www.jetbrains.com/pycharm/)
- [Python 3.12](https://www.python.org/) (Please check [`pyproject.toml`](./pyproject.toml) for the latest supported python version)
- [Poetry](https://python-poetry.org/docs/#installing-with-the-official-installer) for dependency management
- [Docker Desktop](https://docs.docker.com/desktop/) [OPTIONAL]
@@ -39,13 +40,13 @@ Table of Contents:
poetry install --no-root
```
-**Note**: Ensure that the python intepreter in your IDE is set to the newly created virtual environment by poetry. If you have not modified poetry configuration, you can find the virtual environment location as stated [here](https://python-poetry.org/docs/configuration/#cache-directory).
+**Note**: Ensure that the python interpreter in your IDE is set to the newly created virtual environment by poetry. If you have not modified poetry configuration, you can find the virtual environment location as stated [here](https://python-poetry.org/docs/configuration/#cache-directory).
#### Running the project
- Open up a terminal in your IDE.
- Your IDE should activate the virtual environment for you automatically.
- - If it doesnt, you can follow either of these steps:
+ - If it doesn't, you can follow either of these steps:
- Set poetry [python interpreter path in VS Code](https://code.visualstudio.com/docs/python/environments#_working-with-python-interpreters) ***OR***
- Run `poetry shell` ***OR***
- Execute the `/Scripts/Activate` script from the virtual environment located [here](https://python-poetry.org/docs/configuration/#cache-directory)
@@ -84,6 +85,12 @@ poetry install --no-root
- Alternatively, you can install the [Jupyer extension](https://marketplace.visualstudio.com/items?itemName=ms-toolsai.jupyter) and run the notebook in VS Code.
- Ensure to use the poetry python environment as the kernel.
+### Running tests
+
+```sh
+poetry run pytest -rpP
+```
+
### Contribution Guidelines
- _**NEVER MERGE YOUR OWN CODE; ALWAYS RAISE A PR AGAINST `dev`!**_
diff --git a/app/constants.py b/app/constants.py
index 8772682..78db61b 100644
--- a/app/constants.py
+++ b/app/constants.py
@@ -1,3 +1,5 @@
+from datetime import datetime
+
METADATA_DESCRIPTION = """
Slick Telemetry backend written in python with fastf1. 🏎
@@ -19,3 +21,9 @@
"Session5Date",
"Session5DateUtc",
]
+
+MIN_SUPPORTED_YEAR = 1950
+MAX_SUPPORTED_YEAR = datetime.today().year
+
+MIN_SUPPORTED_ROUND = 1
+MAX_SUPPORTED_ROUND = 30
diff --git a/app/main.py b/app/main.py
index 64713bf..6871abe 100644
--- a/app/main.py
+++ b/app/main.py
@@ -1,19 +1,28 @@
import json
-from datetime import datetime
-from typing import Annotated
+from typing import Annotated, Literal
import fastf1
-from fastapi import FastAPI, Query, status
+from fastapi import FastAPI, HTTPException, Query, status
from fastapi.middleware.cors import CORSMiddleware
-
-
-from app.constants import EVENT_SCHEDULE_DATETIME_DTYPE_LIST, METADATA_DESCRIPTION
-from app.models import HealthCheck, Schedule
-from app.utils import get_default_year_for_schedule
+from fastf1.ergast import Ergast
+
+from app.constants import (
+ EVENT_SCHEDULE_DATETIME_DTYPE_LIST,
+ MAX_SUPPORTED_ROUND,
+ MAX_SUPPORTED_YEAR,
+ METADATA_DESCRIPTION,
+ MIN_SUPPORTED_ROUND,
+ MIN_SUPPORTED_YEAR,
+)
+from app.models import HealthCheck, Schedule, Standings
+from app.utils import get_default_year
# fastf1.set_log_level("WARNING") # TODO use for production and staging
-
+# Cors Middleware
+origins = ["http://localhost:3000"]
+# Ergast configuration
+ergast = Ergast(result_type="raw", auto_cast=True)
app = FastAPI(
@@ -31,16 +40,14 @@
},
)
-# Cors Middleware
-origins = [
- "http://localhost:3000"
-]
+
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
+ # HTTPSRedirectMiddleware # TODO use for production and staging
)
@@ -71,7 +78,8 @@ def get_health() -> HealthCheck:
to ensure a robust container orchestration and management is in place. Other
services which rely on proper functioning of the API service will not deploy if this
endpoint returns any other HTTP status code except 200 (OK).
- Returns:
+
+ **Returns**:
HealthCheck: Returns a JSON response with the health status
"""
return HealthCheck(status="OK")
@@ -90,23 +98,24 @@ def get_schedule(
int | None,
Query(
title="The year for which to get the schedule",
- gt=1949, # Supported years are 1950 to current
- le=datetime.today().year,
+ ge=MIN_SUPPORTED_YEAR,
+ le=MAX_SUPPORTED_YEAR,
),
] = None
) -> list[Schedule]:
"""
## Get events schedule for a Formula 1 calendar year
Endpoint to get events schedule for Formula 1 calendar year.
- Returns:
+
+ **Returns**:
list[Schedule]: Returns a JSON response with the list of event schedule
"""
if year is None:
- year = get_default_year_for_schedule()
+ year = get_default_year()
event_schedule = fastf1.get_event_schedule(year)
- # Convert timestamp(z) related columns' data into a string type
+ # Convert timestamp(z) related columns' data into string type
# https://stackoverflow.com/questions/50404559/python-error-typeerror-object-of-type-timestamp-is-not-json-serializable
for col in EVENT_SCHEDULE_DATETIME_DTYPE_LIST:
event_schedule[col] = event_schedule[col].astype(str)
@@ -118,3 +127,84 @@ def get_schedule(
event_schedule_as_json_obj = json.loads(event_schedule_as_json)
return event_schedule_as_json_obj
+
+
+@app.get(
+ "/standings",
+ tags=["standings"],
+ summary="Get drivers and contructors standings ",
+ response_description="Return a list of drivers and contructors standings at specific points of a season. If the season hasn't ended you will get the current standings.",
+ status_code=status.HTTP_200_OK,
+ response_model=Standings,
+)
+def get_standings(
+ year: Annotated[
+ int | None,
+ Query(
+ title="The year for which to get the driver and contructors standing. If the season hasn't ended you will get the current standings.",
+ ge=MIN_SUPPORTED_YEAR,
+ le=MAX_SUPPORTED_YEAR,
+ ),
+ ] = None,
+ round: Annotated[
+ int | None,
+ Query(
+ title="The round in a year for which to get the driver and contructor standings",
+ ge=MIN_SUPPORTED_ROUND,
+ le=MAX_SUPPORTED_ROUND,
+ ),
+ ] = None,
+) -> Standings:
+ """
+ ## Get driver and contructor standings
+ Endpoint to get driver and contructor standings at specific points of a season. If the season hasn't ended you will get the current standings.
+
+ **Returns**:
+ Standings: Returns a JSON response with the driver and constructor standings
+ """
+
+ if year is None and round is None:
+ # neither year nor round are provided; get results for the last round of the default year
+ year = get_default_year()
+ elif year is None and round is not None:
+ # only round is provided; error out
+ raise HTTPException(
+ status_code=status.HTTP_400_BAD_REQUEST,
+ detail='Bad request. Must provide the "year" parameter.',
+ )
+
+ # inputs are good; either one of the two remaining cases:
+ # 1. both year and round are provided
+ # 2. only year is provided
+
+ driver_standings = ergast.get_driver_standings(season=year, round=round)
+ constructor_standings = ergast.get_constructor_standings(season=year, round=round)
+
+ driver_standings_available = True if len(driver_standings) > 0 else False
+ constructor_standings_available = True if len(constructor_standings) > 0 else False
+
+ if driver_standings_available and constructor_standings_available:
+ # both driver and constructor standings are available
+ data: Standings = {
+ "season": driver_standings[0]["season"],
+ "round": driver_standings[0]["round"],
+ "DriverStandings": driver_standings[0]["DriverStandings"],
+ "ConstructorStandings": constructor_standings[0]["ConstructorStandings"],
+ }
+ return data
+ elif not driver_standings_available and not constructor_standings_available:
+ # neither driver nor constructor standings are available
+ raise HTTPException(
+ status_code=404, detail="Driver and constructor standings not found."
+ )
+ elif driver_standings_available:
+ # only driver standings are available
+ raise HTTPException(status_code=404, detail="Constructor standings not found.")
+ elif constructor_standings_available:
+ # only constructor standings are available
+ raise HTTPException(status_code=404, detail="Driver standings not found.")
+ else:
+ # something went wrong, investigate
+ raise HTTPException(
+ status_code=500, detail="Something went wrong. Investigate!"
+ )
diff --git a/app/models.py b/app/models.py
index 56b66ca..3c8bf2a 100644
--- a/app/models.py
+++ b/app/models.py
@@ -8,7 +8,7 @@ class ReadRoot(BaseModel):
class Schedule(BaseModel):
- """Model to store schedule data for a Formula 1 calendar year."""
+ """Response model for schedule data for a Formula 1 calendar year."""
RoundNumber: int
Country: str
@@ -39,3 +39,55 @@ class HealthCheck(BaseModel):
"""Response model to validate and return when performing a health check."""
status: str = "OK"
+
+
+class Driver(BaseModel):
+ """Model for storing driver data"""
+
+ driverId: str
+ permanentNumber: str
+ code: str
+ url: str
+ givenName: str
+ familyName: str
+ dateOfBirth: str
+ nationality: str
+
+
+class Contructor(BaseModel):
+ """Model for storing constructor data"""
+
+ constructorId: str
+ url: str
+ name: str
+ nationality: str
+
+
+class DriverStandings(BaseModel):
+ """Model for storing driver standings data"""
+
+ position: str
+ positionText: str
+ points: str
+ wins: str
+ Driver: Driver
+ Constructors: list[Contructor]
+
+
+class ConstructorStandings(BaseModel):
+ """Model for storing constructor standings data"""
+
+ position: str
+ positionText: str
+ points: str
+ wins: str
+ Constructor: Contructor
+
+
+class Standings(BaseModel):
+ """Response model for driver and contructor standings for a given season and round"""
+
+ season: int
+ round: int
+ DriverStandings: list[DriverStandings]
+ ConstructorStandings: list[ConstructorStandings]
diff --git a/app/test_main.py b/app/test_main.py
index d5fa1c2..d5bb1d1 100644
--- a/app/test_main.py
+++ b/app/test_main.py
@@ -2,55 +2,1217 @@
from fastapi.testclient import TestClient
+from app.constants import (
+ MAX_SUPPORTED_ROUND,
+ MAX_SUPPORTED_YEAR,
+ MIN_SUPPORTED_ROUND,
+ MIN_SUPPORTED_YEAR,
+)
from app.main import app
client = TestClient(app)
+# region root
+
+
def test_read_root():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"we_are": "SlickTelemetry"}
+# endregion root
+
+
+# region healtcheck
+
+
def test_healthcheck():
response = client.get("/health")
assert response.status_code == 200
assert response.json() == {"status": "OK"}
+# endregion healtcheck
+
+
+# region schedule
+
+# region schedule - good inputs
+
+
def test_get_schedule():
response = client.get("/schedule")
assert response.status_code == 200
- assert response.json()[0] == {
- "RoundNumber": 0,
- "Country": "Bahrain",
- "Location": "Sakhir",
- "OfficialEventName": "FORMULA 1 ARAMCO PRE-SEASON TESTING 2023",
- "EventDate": "2023-02-25",
- "EventName": "Pre-Season Testing",
- "EventFormat": "testing",
- "Session1": "Practice 1",
- "Session1Date": "2023-02-23 10:00:00+03:00",
- "Session1DateUtc": "2023-02-23 07:00:00",
- "Session2": "Practice 2",
- "Session2Date": "2023-02-24 10:00:00+03:00",
- "Session2DateUtc": "2023-02-24 07:00:00",
- "Session3": "Practice 3",
- "Session3Date": "2023-02-25 10:00:00+03:00",
- "Session3DateUtc": "2023-02-25 07:00:00",
- "Session4": "None",
- "Session4Date": "NaT",
- "Session4DateUtc": "NaT",
- "Session5": "None",
- "Session5Date": "NaT",
- "Session5DateUtc": "NaT",
- "F1ApiSupport": True,
- }
+ assert response.json() == [
+ {
+ "RoundNumber": 0,
+ "Country": "Bahrain",
+ "Location": "Sakhir",
+ "OfficialEventName": "FORMULA 1 ARAMCO PRE-SEASON TESTING 2023",
+ "EventDate": "2023-02-25",
+ "EventName": "Pre-Season Testing",
+ "EventFormat": "testing",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-02-23 10:00:00+03:00",
+ "Session1DateUtc": "2023-02-23 07:00:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-02-24 10:00:00+03:00",
+ "Session2DateUtc": "2023-02-24 07:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-02-25 10:00:00+03:00",
+ "Session3DateUtc": "2023-02-25 07:00:00",
+ "Session4": "None",
+ "Session4Date": "NaT",
+ "Session4DateUtc": "NaT",
+ "Session5": "None",
+ "Session5Date": "NaT",
+ "Session5DateUtc": "NaT",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 1,
+ "Country": "Bahrain",
+ "Location": "Sakhir",
+ "OfficialEventName": "FORMULA 1 GULF AIR BAHRAIN GRAND PRIX 2023",
+ "EventDate": "2023-03-05",
+ "EventName": "Bahrain Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-03-03 14:30:00+03:00",
+ "Session1DateUtc": "2023-03-03 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-03-03 18:00:00+03:00",
+ "Session2DateUtc": "2023-03-03 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-03-04 14:30:00+03:00",
+ "Session3DateUtc": "2023-03-04 11:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-03-04 18:00:00+03:00",
+ "Session4DateUtc": "2023-03-04 15:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-03-05 18:00:00+03:00",
+ "Session5DateUtc": "2023-03-05 15:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 2,
+ "Country": "Saudi Arabia",
+ "Location": "Jeddah",
+ "OfficialEventName": "FORMULA 1 STC SAUDI ARABIAN GRAND PRIX 2023",
+ "EventDate": "2023-03-19",
+ "EventName": "Saudi Arabian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-03-17 16:30:00+03:00",
+ "Session1DateUtc": "2023-03-17 13:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-03-17 20:00:00+03:00",
+ "Session2DateUtc": "2023-03-17 17:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-03-18 16:30:00+03:00",
+ "Session3DateUtc": "2023-03-18 13:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-03-18 20:00:00+03:00",
+ "Session4DateUtc": "2023-03-18 17:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-03-19 20:00:00+03:00",
+ "Session5DateUtc": "2023-03-19 17:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 3,
+ "Country": "Australia",
+ "Location": "Melbourne",
+ "OfficialEventName": "FORMULA 1 ROLEX AUSTRALIAN GRAND PRIX 2023",
+ "EventDate": "2023-04-02",
+ "EventName": "Australian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-03-31 12:30:00+10:00",
+ "Session1DateUtc": "2023-03-31 02:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-03-31 16:00:00+10:00",
+ "Session2DateUtc": "2023-03-31 06:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-04-01 12:30:00+10:00",
+ "Session3DateUtc": "2023-04-01 02:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-04-01 16:00:00+10:00",
+ "Session4DateUtc": "2023-04-01 06:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-04-02 15:00:00+10:00",
+ "Session5DateUtc": "2023-04-02 05:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 4,
+ "Country": "Azerbaijan",
+ "Location": "Baku",
+ "OfficialEventName": "FORMULA 1 AZERBAIJAN GRAND PRIX 2023",
+ "EventDate": "2023-04-30",
+ "EventName": "Azerbaijan Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-04-28 13:30:00+04:00",
+ "Session1DateUtc": "2023-04-28 09:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-04-28 17:00:00+04:00",
+ "Session2DateUtc": "2023-04-28 13:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-04-29 12:30:00+04:00",
+ "Session3DateUtc": "2023-04-29 08:30:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-04-29 17:30:00+04:00",
+ "Session4DateUtc": "2023-04-29 13:30:00",
+ "Session5": "Race",
+ "Session5Date": "2023-04-30 15:00:00+04:00",
+ "Session5DateUtc": "2023-04-30 11:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 5,
+ "Country": "United States",
+ "Location": "Miami",
+ "OfficialEventName": "FORMULA 1 CRYPTO.COM MIAMI GRAND PRIX 2023",
+ "EventDate": "2023-05-07",
+ "EventName": "Miami Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-05-05 14:00:00-04:00",
+ "Session1DateUtc": "2023-05-05 18:00:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-05-05 17:30:00-04:00",
+ "Session2DateUtc": "2023-05-05 21:30:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-05-06 12:30:00-04:00",
+ "Session3DateUtc": "2023-05-06 16:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-05-06 16:00:00-04:00",
+ "Session4DateUtc": "2023-05-06 20:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-05-07 15:30:00-04:00",
+ "Session5DateUtc": "2023-05-07 19:30:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 6,
+ "Country": "Monaco",
+ "Location": "Monaco",
+ "OfficialEventName": "FORMULA 1 GRAND PRIX DE MONACO 2023",
+ "EventDate": "2023-05-28",
+ "EventName": "Monaco Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-05-26 13:30:00+02:00",
+ "Session1DateUtc": "2023-05-26 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-05-26 17:00:00+02:00",
+ "Session2DateUtc": "2023-05-26 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-05-27 12:30:00+02:00",
+ "Session3DateUtc": "2023-05-27 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-05-27 16:00:00+02:00",
+ "Session4DateUtc": "2023-05-27 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-05-28 15:00:00+02:00",
+ "Session5DateUtc": "2023-05-28 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 7,
+ "Country": "Spain",
+ "Location": "Barcelona",
+ "OfficialEventName": "FORMULA 1 AWS GRAN PREMIO DE ESPAÑA 2023",
+ "EventDate": "2023-06-04",
+ "EventName": "Spanish Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-06-02 13:30:00+02:00",
+ "Session1DateUtc": "2023-06-02 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-06-02 17:00:00+02:00",
+ "Session2DateUtc": "2023-06-02 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-06-03 12:30:00+02:00",
+ "Session3DateUtc": "2023-06-03 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-06-03 16:00:00+02:00",
+ "Session4DateUtc": "2023-06-03 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-06-04 15:00:00+02:00",
+ "Session5DateUtc": "2023-06-04 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 8,
+ "Country": "Canada",
+ "Location": "Montréal",
+ "OfficialEventName": "FORMULA 1 PIRELLI GRAND PRIX DU CANADA 2023",
+ "EventDate": "2023-06-18",
+ "EventName": "Canadian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-06-16 13:30:00-04:00",
+ "Session1DateUtc": "2023-06-16 17:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-06-16 16:30:00-04:00",
+ "Session2DateUtc": "2023-06-16 20:30:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-06-17 12:30:00-04:00",
+ "Session3DateUtc": "2023-06-17 16:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-06-17 16:00:00-04:00",
+ "Session4DateUtc": "2023-06-17 20:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-06-18 14:00:00-04:00",
+ "Session5DateUtc": "2023-06-18 18:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 9,
+ "Country": "Austria",
+ "Location": "Spielberg",
+ "OfficialEventName": "FORMULA 1 ROLEX GROSSER PREIS VON ÖSTERREICH 2023",
+ "EventDate": "2023-07-02",
+ "EventName": "Austrian Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-06-30 13:30:00+02:00",
+ "Session1DateUtc": "2023-06-30 11:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-06-30 17:00:00+02:00",
+ "Session2DateUtc": "2023-06-30 15:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-07-01 12:00:00+02:00",
+ "Session3DateUtc": "2023-07-01 10:00:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-07-01 16:30:00+02:00",
+ "Session4DateUtc": "2023-07-01 14:30:00",
+ "Session5": "Race",
+ "Session5Date": "2023-07-02 15:00:00+02:00",
+ "Session5DateUtc": "2023-07-02 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 10,
+ "Country": "Great Britain",
+ "Location": "Silverstone",
+ "OfficialEventName": "FORMULA 1 ARAMCO BRITISH GRAND PRIX 2023",
+ "EventDate": "2023-07-09",
+ "EventName": "British Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-07-07 12:30:00+01:00",
+ "Session1DateUtc": "2023-07-07 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-07-07 16:00:00+01:00",
+ "Session2DateUtc": "2023-07-07 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-07-08 11:30:00+01:00",
+ "Session3DateUtc": "2023-07-08 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-07-08 15:00:00+01:00",
+ "Session4DateUtc": "2023-07-08 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-07-09 15:00:00+01:00",
+ "Session5DateUtc": "2023-07-09 14:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 11,
+ "Country": "Hungary",
+ "Location": "Budapest",
+ "OfficialEventName": "FORMULA 1 QATAR AIRWAYS HUNGARIAN GRAND PRIX 2023",
+ "EventDate": "2023-07-23",
+ "EventName": "Hungarian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-07-21 13:30:00+02:00",
+ "Session1DateUtc": "2023-07-21 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-07-21 17:00:00+02:00",
+ "Session2DateUtc": "2023-07-21 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-07-22 12:30:00+02:00",
+ "Session3DateUtc": "2023-07-22 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-07-22 16:00:00+02:00",
+ "Session4DateUtc": "2023-07-22 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-07-23 15:00:00+02:00",
+ "Session5DateUtc": "2023-07-23 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 12,
+ "Country": "Belgium",
+ "Location": "Spa-Francorchamps",
+ "OfficialEventName": "FORMULA 1 MSC CRUISES BELGIAN GRAND PRIX 2023",
+ "EventDate": "2023-07-30",
+ "EventName": "Belgian Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-07-28 13:30:00+02:00",
+ "Session1DateUtc": "2023-07-28 11:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-07-28 17:00:00+02:00",
+ "Session2DateUtc": "2023-07-28 15:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-07-29 12:00:00+02:00",
+ "Session3DateUtc": "2023-07-29 10:00:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-07-29 17:05:00+02:00",
+ "Session4DateUtc": "2023-07-29 15:05:00",
+ "Session5": "Race",
+ "Session5Date": "2023-07-30 15:00:00+02:00",
+ "Session5DateUtc": "2023-07-30 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 13,
+ "Country": "Netherlands",
+ "Location": "Zandvoort",
+ "OfficialEventName": "FORMULA 1 HEINEKEN DUTCH GRAND PRIX 2023",
+ "EventDate": "2023-08-27",
+ "EventName": "Dutch Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-08-25 12:30:00+02:00",
+ "Session1DateUtc": "2023-08-25 10:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-08-25 16:00:00+02:00",
+ "Session2DateUtc": "2023-08-25 14:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-08-26 11:30:00+02:00",
+ "Session3DateUtc": "2023-08-26 09:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-08-26 15:00:00+02:00",
+ "Session4DateUtc": "2023-08-26 13:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-08-27 15:00:00+02:00",
+ "Session5DateUtc": "2023-08-27 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 14,
+ "Country": "Italy",
+ "Location": "Monza",
+ "OfficialEventName": "FORMULA 1 PIRELLI GRAN PREMIO D’ITALIA 2023 ",
+ "EventDate": "2023-09-03",
+ "EventName": "Italian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-09-01 13:30:00+02:00",
+ "Session1DateUtc": "2023-09-01 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-09-01 17:00:00+02:00",
+ "Session2DateUtc": "2023-09-01 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-09-02 12:30:00+02:00",
+ "Session3DateUtc": "2023-09-02 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-09-02 16:00:00+02:00",
+ "Session4DateUtc": "2023-09-02 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-09-03 15:00:00+02:00",
+ "Session5DateUtc": "2023-09-03 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 15,
+ "Country": "Singapore",
+ "Location": "Marina Bay",
+ "OfficialEventName": "FORMULA 1 SINGAPORE AIRLINES SINGAPORE GRAND PRIX 2023 ",
+ "EventDate": "2023-09-17",
+ "EventName": "Singapore Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-09-15 17:30:00+08:00",
+ "Session1DateUtc": "2023-09-15 09:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-09-15 21:00:00+08:00",
+ "Session2DateUtc": "2023-09-15 13:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-09-16 17:30:00+08:00",
+ "Session3DateUtc": "2023-09-16 09:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-09-16 21:00:00+08:00",
+ "Session4DateUtc": "2023-09-16 13:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-09-17 20:00:00+08:00",
+ "Session5DateUtc": "2023-09-17 12:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 16,
+ "Country": "Japan",
+ "Location": "Suzuka",
+ "OfficialEventName": "FORMULA 1 LENOVO JAPANESE GRAND PRIX 2023 ",
+ "EventDate": "2023-09-24",
+ "EventName": "Japanese Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-09-22 11:30:00+09:00",
+ "Session1DateUtc": "2023-09-22 02:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-09-22 15:00:00+09:00",
+ "Session2DateUtc": "2023-09-22 06:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-09-23 11:30:00+09:00",
+ "Session3DateUtc": "2023-09-23 02:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-09-23 15:00:00+09:00",
+ "Session4DateUtc": "2023-09-23 06:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-09-24 14:00:00+09:00",
+ "Session5DateUtc": "2023-09-24 05:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 17,
+ "Country": "Qatar",
+ "Location": "Lusail",
+ "OfficialEventName": "FORMULA 1 QATAR AIRWAYS QATAR GRAND PRIX 2023",
+ "EventDate": "2023-10-08",
+ "EventName": "Qatar Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-10-06 16:30:00+03:00",
+ "Session1DateUtc": "2023-10-06 13:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-10-06 20:00:00+03:00",
+ "Session2DateUtc": "2023-10-06 17:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-10-07 16:20:00+03:00",
+ "Session3DateUtc": "2023-10-07 13:20:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-10-07 20:30:00+03:00",
+ "Session4DateUtc": "2023-10-07 17:30:00",
+ "Session5": "Race",
+ "Session5Date": "2023-10-08 20:00:00+03:00",
+ "Session5DateUtc": "2023-10-08 17:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 18,
+ "Country": "United States",
+ "Location": "Austin",
+ "OfficialEventName": "FORMULA 1 LENOVO UNITED STATES GRAND PRIX 2023",
+ "EventDate": "2023-10-22",
+ "EventName": "United States Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-10-20 12:30:00-05:00",
+ "Session1DateUtc": "2023-10-20 17:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-10-20 16:00:00-05:00",
+ "Session2DateUtc": "2023-10-20 21:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-10-21 12:30:00-05:00",
+ "Session3DateUtc": "2023-10-21 17:30:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-10-21 17:00:00-05:00",
+ "Session4DateUtc": "2023-10-21 22:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-10-22 14:00:00-05:00",
+ "Session5DateUtc": "2023-10-22 19:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 19,
+ "Country": "Mexico",
+ "Location": "Mexico City",
+ "OfficialEventName": "FORMULA 1 GRAN PREMIO DE LA CIUDAD DE MÉXICO 2023",
+ "EventDate": "2023-10-29",
+ "EventName": "Mexico City Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-10-27 12:30:00-06:00",
+ "Session1DateUtc": "2023-10-27 18:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-10-27 16:00:00-06:00",
+ "Session2DateUtc": "2023-10-27 22:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-10-28 11:30:00-06:00",
+ "Session3DateUtc": "2023-10-28 17:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-10-28 15:00:00-06:00",
+ "Session4DateUtc": "2023-10-28 21:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-10-29 14:00:00-06:00",
+ "Session5DateUtc": "2023-10-29 20:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 20,
+ "Country": "Brazil",
+ "Location": "São Paulo",
+ "OfficialEventName": "FORMULA 1 ROLEX GRANDE PRÊMIO DE SÃO PAULO 2023",
+ "EventDate": "2023-11-05",
+ "EventName": "São Paulo Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-11-03 11:30:00-03:00",
+ "Session1DateUtc": "2023-11-03 14:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-11-03 15:00:00-03:00",
+ "Session2DateUtc": "2023-11-03 18:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-11-04 11:00:00-03:00",
+ "Session3DateUtc": "2023-11-04 14:00:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-11-04 15:30:00-03:00",
+ "Session4DateUtc": "2023-11-04 18:30:00",
+ "Session5": "Race",
+ "Session5Date": "2023-11-05 14:00:00-03:00",
+ "Session5DateUtc": "2023-11-05 17:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 21,
+ "Country": "United States",
+ "Location": "Las Vegas",
+ "OfficialEventName": "FORMULA 1 HEINEKEN SILVER LAS VEGAS GRAND PRIX 2023",
+ "EventDate": "2023-11-18",
+ "EventName": "Las Vegas Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-11-16 20:30:00-08:00",
+ "Session1DateUtc": "2023-11-17 04:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-11-17 02:30:00-08:00",
+ "Session2DateUtc": "2023-11-17 10:30:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-11-17 20:30:00-08:00",
+ "Session3DateUtc": "2023-11-18 04:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-11-18 00:00:00-08:00",
+ "Session4DateUtc": "2023-11-18 08:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-11-18 22:00:00-08:00",
+ "Session5DateUtc": "2023-11-19 06:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 22,
+ "Country": "Abu Dhabi",
+ "Location": "Yas Island",
+ "OfficialEventName": "FORMULA 1 ETIHAD AIRWAYS ABU DHABI GRAND PRIX 2023 ",
+ "EventDate": "2023-11-26",
+ "EventName": "Abu Dhabi Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-11-24 13:30:00+04:00",
+ "Session1DateUtc": "2023-11-24 09:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-11-24 17:00:00+04:00",
+ "Session2DateUtc": "2023-11-24 13:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-11-25 14:30:00+04:00",
+ "Session3DateUtc": "2023-11-25 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-11-25 18:00:00+04:00",
+ "Session4DateUtc": "2023-11-25 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-11-26 17:00:00+04:00",
+ "Session5DateUtc": "2023-11-26 13:00:00",
+ "F1ApiSupport": True,
+ },
+ ]
+
+
+def test_get_schedule_good_year():
+ response = client.get("/schedule?year=2023")
+ assert response.status_code == 200
+ assert response.json() == [
+ {
+ "RoundNumber": 0,
+ "Country": "Bahrain",
+ "Location": "Sakhir",
+ "OfficialEventName": "FORMULA 1 ARAMCO PRE-SEASON TESTING 2023",
+ "EventDate": "2023-02-25",
+ "EventName": "Pre-Season Testing",
+ "EventFormat": "testing",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-02-23 10:00:00+03:00",
+ "Session1DateUtc": "2023-02-23 07:00:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-02-24 10:00:00+03:00",
+ "Session2DateUtc": "2023-02-24 07:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-02-25 10:00:00+03:00",
+ "Session3DateUtc": "2023-02-25 07:00:00",
+ "Session4": "None",
+ "Session4Date": "NaT",
+ "Session4DateUtc": "NaT",
+ "Session5": "None",
+ "Session5Date": "NaT",
+ "Session5DateUtc": "NaT",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 1,
+ "Country": "Bahrain",
+ "Location": "Sakhir",
+ "OfficialEventName": "FORMULA 1 GULF AIR BAHRAIN GRAND PRIX 2023",
+ "EventDate": "2023-03-05",
+ "EventName": "Bahrain Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-03-03 14:30:00+03:00",
+ "Session1DateUtc": "2023-03-03 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-03-03 18:00:00+03:00",
+ "Session2DateUtc": "2023-03-03 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-03-04 14:30:00+03:00",
+ "Session3DateUtc": "2023-03-04 11:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-03-04 18:00:00+03:00",
+ "Session4DateUtc": "2023-03-04 15:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-03-05 18:00:00+03:00",
+ "Session5DateUtc": "2023-03-05 15:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 2,
+ "Country": "Saudi Arabia",
+ "Location": "Jeddah",
+ "OfficialEventName": "FORMULA 1 STC SAUDI ARABIAN GRAND PRIX 2023",
+ "EventDate": "2023-03-19",
+ "EventName": "Saudi Arabian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-03-17 16:30:00+03:00",
+ "Session1DateUtc": "2023-03-17 13:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-03-17 20:00:00+03:00",
+ "Session2DateUtc": "2023-03-17 17:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-03-18 16:30:00+03:00",
+ "Session3DateUtc": "2023-03-18 13:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-03-18 20:00:00+03:00",
+ "Session4DateUtc": "2023-03-18 17:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-03-19 20:00:00+03:00",
+ "Session5DateUtc": "2023-03-19 17:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 3,
+ "Country": "Australia",
+ "Location": "Melbourne",
+ "OfficialEventName": "FORMULA 1 ROLEX AUSTRALIAN GRAND PRIX 2023",
+ "EventDate": "2023-04-02",
+ "EventName": "Australian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-03-31 12:30:00+10:00",
+ "Session1DateUtc": "2023-03-31 02:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-03-31 16:00:00+10:00",
+ "Session2DateUtc": "2023-03-31 06:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-04-01 12:30:00+10:00",
+ "Session3DateUtc": "2023-04-01 02:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-04-01 16:00:00+10:00",
+ "Session4DateUtc": "2023-04-01 06:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-04-02 15:00:00+10:00",
+ "Session5DateUtc": "2023-04-02 05:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 4,
+ "Country": "Azerbaijan",
+ "Location": "Baku",
+ "OfficialEventName": "FORMULA 1 AZERBAIJAN GRAND PRIX 2023",
+ "EventDate": "2023-04-30",
+ "EventName": "Azerbaijan Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-04-28 13:30:00+04:00",
+ "Session1DateUtc": "2023-04-28 09:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-04-28 17:00:00+04:00",
+ "Session2DateUtc": "2023-04-28 13:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-04-29 12:30:00+04:00",
+ "Session3DateUtc": "2023-04-29 08:30:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-04-29 17:30:00+04:00",
+ "Session4DateUtc": "2023-04-29 13:30:00",
+ "Session5": "Race",
+ "Session5Date": "2023-04-30 15:00:00+04:00",
+ "Session5DateUtc": "2023-04-30 11:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 5,
+ "Country": "United States",
+ "Location": "Miami",
+ "OfficialEventName": "FORMULA 1 CRYPTO.COM MIAMI GRAND PRIX 2023",
+ "EventDate": "2023-05-07",
+ "EventName": "Miami Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-05-05 14:00:00-04:00",
+ "Session1DateUtc": "2023-05-05 18:00:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-05-05 17:30:00-04:00",
+ "Session2DateUtc": "2023-05-05 21:30:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-05-06 12:30:00-04:00",
+ "Session3DateUtc": "2023-05-06 16:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-05-06 16:00:00-04:00",
+ "Session4DateUtc": "2023-05-06 20:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-05-07 15:30:00-04:00",
+ "Session5DateUtc": "2023-05-07 19:30:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 6,
+ "Country": "Monaco",
+ "Location": "Monaco",
+ "OfficialEventName": "FORMULA 1 GRAND PRIX DE MONACO 2023",
+ "EventDate": "2023-05-28",
+ "EventName": "Monaco Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-05-26 13:30:00+02:00",
+ "Session1DateUtc": "2023-05-26 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-05-26 17:00:00+02:00",
+ "Session2DateUtc": "2023-05-26 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-05-27 12:30:00+02:00",
+ "Session3DateUtc": "2023-05-27 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-05-27 16:00:00+02:00",
+ "Session4DateUtc": "2023-05-27 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-05-28 15:00:00+02:00",
+ "Session5DateUtc": "2023-05-28 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 7,
+ "Country": "Spain",
+ "Location": "Barcelona",
+ "OfficialEventName": "FORMULA 1 AWS GRAN PREMIO DE ESPAÑA 2023",
+ "EventDate": "2023-06-04",
+ "EventName": "Spanish Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-06-02 13:30:00+02:00",
+ "Session1DateUtc": "2023-06-02 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-06-02 17:00:00+02:00",
+ "Session2DateUtc": "2023-06-02 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-06-03 12:30:00+02:00",
+ "Session3DateUtc": "2023-06-03 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-06-03 16:00:00+02:00",
+ "Session4DateUtc": "2023-06-03 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-06-04 15:00:00+02:00",
+ "Session5DateUtc": "2023-06-04 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 8,
+ "Country": "Canada",
+ "Location": "Montréal",
+ "OfficialEventName": "FORMULA 1 PIRELLI GRAND PRIX DU CANADA 2023",
+ "EventDate": "2023-06-18",
+ "EventName": "Canadian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-06-16 13:30:00-04:00",
+ "Session1DateUtc": "2023-06-16 17:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-06-16 16:30:00-04:00",
+ "Session2DateUtc": "2023-06-16 20:30:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-06-17 12:30:00-04:00",
+ "Session3DateUtc": "2023-06-17 16:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-06-17 16:00:00-04:00",
+ "Session4DateUtc": "2023-06-17 20:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-06-18 14:00:00-04:00",
+ "Session5DateUtc": "2023-06-18 18:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 9,
+ "Country": "Austria",
+ "Location": "Spielberg",
+ "OfficialEventName": "FORMULA 1 ROLEX GROSSER PREIS VON ÖSTERREICH 2023",
+ "EventDate": "2023-07-02",
+ "EventName": "Austrian Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-06-30 13:30:00+02:00",
+ "Session1DateUtc": "2023-06-30 11:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-06-30 17:00:00+02:00",
+ "Session2DateUtc": "2023-06-30 15:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-07-01 12:00:00+02:00",
+ "Session3DateUtc": "2023-07-01 10:00:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-07-01 16:30:00+02:00",
+ "Session4DateUtc": "2023-07-01 14:30:00",
+ "Session5": "Race",
+ "Session5Date": "2023-07-02 15:00:00+02:00",
+ "Session5DateUtc": "2023-07-02 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 10,
+ "Country": "Great Britain",
+ "Location": "Silverstone",
+ "OfficialEventName": "FORMULA 1 ARAMCO BRITISH GRAND PRIX 2023",
+ "EventDate": "2023-07-09",
+ "EventName": "British Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-07-07 12:30:00+01:00",
+ "Session1DateUtc": "2023-07-07 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-07-07 16:00:00+01:00",
+ "Session2DateUtc": "2023-07-07 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-07-08 11:30:00+01:00",
+ "Session3DateUtc": "2023-07-08 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-07-08 15:00:00+01:00",
+ "Session4DateUtc": "2023-07-08 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-07-09 15:00:00+01:00",
+ "Session5DateUtc": "2023-07-09 14:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 11,
+ "Country": "Hungary",
+ "Location": "Budapest",
+ "OfficialEventName": "FORMULA 1 QATAR AIRWAYS HUNGARIAN GRAND PRIX 2023",
+ "EventDate": "2023-07-23",
+ "EventName": "Hungarian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-07-21 13:30:00+02:00",
+ "Session1DateUtc": "2023-07-21 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-07-21 17:00:00+02:00",
+ "Session2DateUtc": "2023-07-21 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-07-22 12:30:00+02:00",
+ "Session3DateUtc": "2023-07-22 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-07-22 16:00:00+02:00",
+ "Session4DateUtc": "2023-07-22 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-07-23 15:00:00+02:00",
+ "Session5DateUtc": "2023-07-23 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 12,
+ "Country": "Belgium",
+ "Location": "Spa-Francorchamps",
+ "OfficialEventName": "FORMULA 1 MSC CRUISES BELGIAN GRAND PRIX 2023",
+ "EventDate": "2023-07-30",
+ "EventName": "Belgian Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-07-28 13:30:00+02:00",
+ "Session1DateUtc": "2023-07-28 11:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-07-28 17:00:00+02:00",
+ "Session2DateUtc": "2023-07-28 15:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-07-29 12:00:00+02:00",
+ "Session3DateUtc": "2023-07-29 10:00:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-07-29 17:05:00+02:00",
+ "Session4DateUtc": "2023-07-29 15:05:00",
+ "Session5": "Race",
+ "Session5Date": "2023-07-30 15:00:00+02:00",
+ "Session5DateUtc": "2023-07-30 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 13,
+ "Country": "Netherlands",
+ "Location": "Zandvoort",
+ "OfficialEventName": "FORMULA 1 HEINEKEN DUTCH GRAND PRIX 2023",
+ "EventDate": "2023-08-27",
+ "EventName": "Dutch Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-08-25 12:30:00+02:00",
+ "Session1DateUtc": "2023-08-25 10:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-08-25 16:00:00+02:00",
+ "Session2DateUtc": "2023-08-25 14:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-08-26 11:30:00+02:00",
+ "Session3DateUtc": "2023-08-26 09:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-08-26 15:00:00+02:00",
+ "Session4DateUtc": "2023-08-26 13:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-08-27 15:00:00+02:00",
+ "Session5DateUtc": "2023-08-27 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 14,
+ "Country": "Italy",
+ "Location": "Monza",
+ "OfficialEventName": "FORMULA 1 PIRELLI GRAN PREMIO D’ITALIA 2023 ",
+ "EventDate": "2023-09-03",
+ "EventName": "Italian Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-09-01 13:30:00+02:00",
+ "Session1DateUtc": "2023-09-01 11:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-09-01 17:00:00+02:00",
+ "Session2DateUtc": "2023-09-01 15:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-09-02 12:30:00+02:00",
+ "Session3DateUtc": "2023-09-02 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-09-02 16:00:00+02:00",
+ "Session4DateUtc": "2023-09-02 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-09-03 15:00:00+02:00",
+ "Session5DateUtc": "2023-09-03 13:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 15,
+ "Country": "Singapore",
+ "Location": "Marina Bay",
+ "OfficialEventName": "FORMULA 1 SINGAPORE AIRLINES SINGAPORE GRAND PRIX 2023 ",
+ "EventDate": "2023-09-17",
+ "EventName": "Singapore Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-09-15 17:30:00+08:00",
+ "Session1DateUtc": "2023-09-15 09:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-09-15 21:00:00+08:00",
+ "Session2DateUtc": "2023-09-15 13:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-09-16 17:30:00+08:00",
+ "Session3DateUtc": "2023-09-16 09:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-09-16 21:00:00+08:00",
+ "Session4DateUtc": "2023-09-16 13:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-09-17 20:00:00+08:00",
+ "Session5DateUtc": "2023-09-17 12:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 16,
+ "Country": "Japan",
+ "Location": "Suzuka",
+ "OfficialEventName": "FORMULA 1 LENOVO JAPANESE GRAND PRIX 2023 ",
+ "EventDate": "2023-09-24",
+ "EventName": "Japanese Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-09-22 11:30:00+09:00",
+ "Session1DateUtc": "2023-09-22 02:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-09-22 15:00:00+09:00",
+ "Session2DateUtc": "2023-09-22 06:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-09-23 11:30:00+09:00",
+ "Session3DateUtc": "2023-09-23 02:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-09-23 15:00:00+09:00",
+ "Session4DateUtc": "2023-09-23 06:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-09-24 14:00:00+09:00",
+ "Session5DateUtc": "2023-09-24 05:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 17,
+ "Country": "Qatar",
+ "Location": "Lusail",
+ "OfficialEventName": "FORMULA 1 QATAR AIRWAYS QATAR GRAND PRIX 2023",
+ "EventDate": "2023-10-08",
+ "EventName": "Qatar Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-10-06 16:30:00+03:00",
+ "Session1DateUtc": "2023-10-06 13:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-10-06 20:00:00+03:00",
+ "Session2DateUtc": "2023-10-06 17:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-10-07 16:20:00+03:00",
+ "Session3DateUtc": "2023-10-07 13:20:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-10-07 20:30:00+03:00",
+ "Session4DateUtc": "2023-10-07 17:30:00",
+ "Session5": "Race",
+ "Session5Date": "2023-10-08 20:00:00+03:00",
+ "Session5DateUtc": "2023-10-08 17:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 18,
+ "Country": "United States",
+ "Location": "Austin",
+ "OfficialEventName": "FORMULA 1 LENOVO UNITED STATES GRAND PRIX 2023",
+ "EventDate": "2023-10-22",
+ "EventName": "United States Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-10-20 12:30:00-05:00",
+ "Session1DateUtc": "2023-10-20 17:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-10-20 16:00:00-05:00",
+ "Session2DateUtc": "2023-10-20 21:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-10-21 12:30:00-05:00",
+ "Session3DateUtc": "2023-10-21 17:30:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-10-21 17:00:00-05:00",
+ "Session4DateUtc": "2023-10-21 22:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-10-22 14:00:00-05:00",
+ "Session5DateUtc": "2023-10-22 19:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 19,
+ "Country": "Mexico",
+ "Location": "Mexico City",
+ "OfficialEventName": "FORMULA 1 GRAN PREMIO DE LA CIUDAD DE MÉXICO 2023",
+ "EventDate": "2023-10-29",
+ "EventName": "Mexico City Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-10-27 12:30:00-06:00",
+ "Session1DateUtc": "2023-10-27 18:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-10-27 16:00:00-06:00",
+ "Session2DateUtc": "2023-10-27 22:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-10-28 11:30:00-06:00",
+ "Session3DateUtc": "2023-10-28 17:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-10-28 15:00:00-06:00",
+ "Session4DateUtc": "2023-10-28 21:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-10-29 14:00:00-06:00",
+ "Session5DateUtc": "2023-10-29 20:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 20,
+ "Country": "Brazil",
+ "Location": "São Paulo",
+ "OfficialEventName": "FORMULA 1 ROLEX GRANDE PRÊMIO DE SÃO PAULO 2023",
+ "EventDate": "2023-11-05",
+ "EventName": "São Paulo Grand Prix",
+ "EventFormat": "sprint_shootout",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-11-03 11:30:00-03:00",
+ "Session1DateUtc": "2023-11-03 14:30:00",
+ "Session2": "Qualifying",
+ "Session2Date": "2023-11-03 15:00:00-03:00",
+ "Session2DateUtc": "2023-11-03 18:00:00",
+ "Session3": "Sprint Shootout",
+ "Session3Date": "2023-11-04 11:00:00-03:00",
+ "Session3DateUtc": "2023-11-04 14:00:00",
+ "Session4": "Sprint",
+ "Session4Date": "2023-11-04 15:30:00-03:00",
+ "Session4DateUtc": "2023-11-04 18:30:00",
+ "Session5": "Race",
+ "Session5Date": "2023-11-05 14:00:00-03:00",
+ "Session5DateUtc": "2023-11-05 17:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 21,
+ "Country": "United States",
+ "Location": "Las Vegas",
+ "OfficialEventName": "FORMULA 1 HEINEKEN SILVER LAS VEGAS GRAND PRIX 2023",
+ "EventDate": "2023-11-18",
+ "EventName": "Las Vegas Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-11-16 20:30:00-08:00",
+ "Session1DateUtc": "2023-11-17 04:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-11-17 02:30:00-08:00",
+ "Session2DateUtc": "2023-11-17 10:30:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-11-17 20:30:00-08:00",
+ "Session3DateUtc": "2023-11-18 04:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-11-18 00:00:00-08:00",
+ "Session4DateUtc": "2023-11-18 08:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-11-18 22:00:00-08:00",
+ "Session5DateUtc": "2023-11-19 06:00:00",
+ "F1ApiSupport": True,
+ },
+ {
+ "RoundNumber": 22,
+ "Country": "Abu Dhabi",
+ "Location": "Yas Island",
+ "OfficialEventName": "FORMULA 1 ETIHAD AIRWAYS ABU DHABI GRAND PRIX 2023 ",
+ "EventDate": "2023-11-26",
+ "EventName": "Abu Dhabi Grand Prix",
+ "EventFormat": "conventional",
+ "Session1": "Practice 1",
+ "Session1Date": "2023-11-24 13:30:00+04:00",
+ "Session1DateUtc": "2023-11-24 09:30:00",
+ "Session2": "Practice 2",
+ "Session2Date": "2023-11-24 17:00:00+04:00",
+ "Session2DateUtc": "2023-11-24 13:00:00",
+ "Session3": "Practice 3",
+ "Session3Date": "2023-11-25 14:30:00+04:00",
+ "Session3DateUtc": "2023-11-25 10:30:00",
+ "Session4": "Qualifying",
+ "Session4Date": "2023-11-25 18:00:00+04:00",
+ "Session4DateUtc": "2023-11-25 14:00:00",
+ "Session5": "Race",
+ "Session5Date": "2023-11-26 17:00:00+04:00",
+ "Session5DateUtc": "2023-11-26 13:00:00",
+ "F1ApiSupport": True,
+ },
+ ]
+
+
+# endregion schedule - good inputs
+
+# region schedule - no or bad inputs
def test_get_schedule_bad_year_no_input():
- response = client.get("/schedule/?year=")
+ response = client.get("/schedule?year=")
assert response.status_code == 422
assert response.json() == {
"detail": [
@@ -66,26 +1228,24 @@ def test_get_schedule_bad_year_no_input():
def test_get_schedule_bad_year_lower_limit():
- response = client.get("/schedule/?year=1949")
+ response = client.get(f"/schedule?year={MIN_SUPPORTED_YEAR - 1}")
assert response.status_code == 422
assert response.json() == {
"detail": [
{
- "type": "greater_than",
+ "type": "greater_than_equal",
"loc": ["query", "year"],
- "msg": "Input should be greater than 1949",
+ "msg": "Input should be greater than or equal to 1950",
"input": "1949",
- "ctx": {"gt": 1949},
- "url": "https://errors.pydantic.dev/2.5/v/greater_than",
+ "ctx": {"ge": 1950},
+ "url": "https://errors.pydantic.dev/2.5/v/greater_than_equal",
}
]
}
def test_get_schedule_bad_year_upper_limit():
- current_year = datetime.today().year
- bad_year = current_year + 1
- response = client.get(f"/schedule/?year={bad_year}")
+ response = client.get(f"/schedule?year={MAX_SUPPORTED_YEAR + 1}")
assert response.status_code == 422
assert response.json() == {
"detail": [
@@ -99,3 +1259,2270 @@ def test_get_schedule_bad_year_upper_limit():
}
]
}
+
+
+# endregion schedule - no or bad inputs
+
+# endregion schedule
+
+
+# region standings
+
+# region standings - good inputs
+
+
+def test_get_standings():
+ response = client.get("/standings")
+ assert response.status_code == 200
+ assert response.json() == {
+ "season": 2023,
+ "round": 22,
+ "DriverStandings": [
+ {
+ "position": "1",
+ "positionText": "1",
+ "points": "575",
+ "wins": "19",
+ "Driver": {
+ "driverId": "max_verstappen",
+ "permanentNumber": "33",
+ "code": "VER",
+ "url": "http://en.wikipedia.org/wiki/Max_Verstappen",
+ "givenName": "Max",
+ "familyName": "Verstappen",
+ "dateOfBirth": "1997-09-30",
+ "nationality": "Dutch",
+ },
+ "Constructors": [
+ {
+ "constructorId": "red_bull",
+ "url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
+ "name": "Red Bull",
+ "nationality": "Austrian",
+ }
+ ],
+ },
+ {
+ "position": "2",
+ "positionText": "2",
+ "points": "285",
+ "wins": "2",
+ "Driver": {
+ "driverId": "perez",
+ "permanentNumber": "11",
+ "code": "PER",
+ "url": "http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez",
+ "givenName": "Sergio",
+ "familyName": "Pérez",
+ "dateOfBirth": "1990-01-26",
+ "nationality": "Mexican",
+ },
+ "Constructors": [
+ {
+ "constructorId": "red_bull",
+ "url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
+ "name": "Red Bull",
+ "nationality": "Austrian",
+ }
+ ],
+ },
+ {
+ "position": "3",
+ "positionText": "3",
+ "points": "234",
+ "wins": "0",
+ "Driver": {
+ "driverId": "hamilton",
+ "permanentNumber": "44",
+ "code": "HAM",
+ "url": "http://en.wikipedia.org/wiki/Lewis_Hamilton",
+ "givenName": "Lewis",
+ "familyName": "Hamilton",
+ "dateOfBirth": "1985-01-07",
+ "nationality": "British",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mercedes",
+ "url": "http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One",
+ "name": "Mercedes",
+ "nationality": "German",
+ }
+ ],
+ },
+ {
+ "position": "4",
+ "positionText": "4",
+ "points": "206",
+ "wins": "0",
+ "Driver": {
+ "driverId": "alonso",
+ "permanentNumber": "14",
+ "code": "ALO",
+ "url": "http://en.wikipedia.org/wiki/Fernando_Alonso",
+ "givenName": "Fernando",
+ "familyName": "Alonso",
+ "dateOfBirth": "1981-07-29",
+ "nationality": "Spanish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "aston_martin",
+ "url": "http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One",
+ "name": "Aston Martin",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "5",
+ "positionText": "5",
+ "points": "206",
+ "wins": "0",
+ "Driver": {
+ "driverId": "leclerc",
+ "permanentNumber": "16",
+ "code": "LEC",
+ "url": "http://en.wikipedia.org/wiki/Charles_Leclerc",
+ "givenName": "Charles",
+ "familyName": "Leclerc",
+ "dateOfBirth": "1997-10-16",
+ "nationality": "Monegasque",
+ },
+ "Constructors": [
+ {
+ "constructorId": "ferrari",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
+ "name": "Ferrari",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "6",
+ "positionText": "6",
+ "points": "205",
+ "wins": "0",
+ "Driver": {
+ "driverId": "norris",
+ "permanentNumber": "4",
+ "code": "NOR",
+ "url": "http://en.wikipedia.org/wiki/Lando_Norris",
+ "givenName": "Lando",
+ "familyName": "Norris",
+ "dateOfBirth": "1999-11-13",
+ "nationality": "British",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mclaren",
+ "url": "http://en.wikipedia.org/wiki/McLaren",
+ "name": "McLaren",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "7",
+ "positionText": "7",
+ "points": "200",
+ "wins": "1",
+ "Driver": {
+ "driverId": "sainz",
+ "permanentNumber": "55",
+ "code": "SAI",
+ "url": "http://en.wikipedia.org/wiki/Carlos_Sainz_Jr.",
+ "givenName": "Carlos",
+ "familyName": "Sainz",
+ "dateOfBirth": "1994-09-01",
+ "nationality": "Spanish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "ferrari",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
+ "name": "Ferrari",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "8",
+ "positionText": "8",
+ "points": "175",
+ "wins": "0",
+ "Driver": {
+ "driverId": "russell",
+ "permanentNumber": "63",
+ "code": "RUS",
+ "url": "http://en.wikipedia.org/wiki/George_Russell_(racing_driver)",
+ "givenName": "George",
+ "familyName": "Russell",
+ "dateOfBirth": "1998-02-15",
+ "nationality": "British",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mercedes",
+ "url": "http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One",
+ "name": "Mercedes",
+ "nationality": "German",
+ }
+ ],
+ },
+ {
+ "position": "9",
+ "positionText": "9",
+ "points": "97",
+ "wins": "0",
+ "Driver": {
+ "driverId": "piastri",
+ "permanentNumber": "81",
+ "code": "PIA",
+ "url": "http://en.wikipedia.org/wiki/Oscar_Piastri",
+ "givenName": "Oscar",
+ "familyName": "Piastri",
+ "dateOfBirth": "2001-04-06",
+ "nationality": "Australian",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mclaren",
+ "url": "http://en.wikipedia.org/wiki/McLaren",
+ "name": "McLaren",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "10",
+ "positionText": "10",
+ "points": "74",
+ "wins": "0",
+ "Driver": {
+ "driverId": "stroll",
+ "permanentNumber": "18",
+ "code": "STR",
+ "url": "http://en.wikipedia.org/wiki/Lance_Stroll",
+ "givenName": "Lance",
+ "familyName": "Stroll",
+ "dateOfBirth": "1998-10-29",
+ "nationality": "Canadian",
+ },
+ "Constructors": [
+ {
+ "constructorId": "aston_martin",
+ "url": "http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One",
+ "name": "Aston Martin",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "11",
+ "positionText": "11",
+ "points": "62",
+ "wins": "0",
+ "Driver": {
+ "driverId": "gasly",
+ "permanentNumber": "10",
+ "code": "GAS",
+ "url": "http://en.wikipedia.org/wiki/Pierre_Gasly",
+ "givenName": "Pierre",
+ "familyName": "Gasly",
+ "dateOfBirth": "1996-02-07",
+ "nationality": "French",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alpine",
+ "url": "http://en.wikipedia.org/wiki/Alpine_F1_Team",
+ "name": "Alpine F1 Team",
+ "nationality": "French",
+ }
+ ],
+ },
+ {
+ "position": "12",
+ "positionText": "12",
+ "points": "58",
+ "wins": "0",
+ "Driver": {
+ "driverId": "ocon",
+ "permanentNumber": "31",
+ "code": "OCO",
+ "url": "http://en.wikipedia.org/wiki/Esteban_Ocon",
+ "givenName": "Esteban",
+ "familyName": "Ocon",
+ "dateOfBirth": "1996-09-17",
+ "nationality": "French",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alpine",
+ "url": "http://en.wikipedia.org/wiki/Alpine_F1_Team",
+ "name": "Alpine F1 Team",
+ "nationality": "French",
+ }
+ ],
+ },
+ {
+ "position": "13",
+ "positionText": "13",
+ "points": "27",
+ "wins": "0",
+ "Driver": {
+ "driverId": "albon",
+ "permanentNumber": "23",
+ "code": "ALB",
+ "url": "http://en.wikipedia.org/wiki/Alexander_Albon",
+ "givenName": "Alexander",
+ "familyName": "Albon",
+ "dateOfBirth": "1996-03-23",
+ "nationality": "Thai",
+ },
+ "Constructors": [
+ {
+ "constructorId": "williams",
+ "url": "http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering",
+ "name": "Williams",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "14",
+ "positionText": "14",
+ "points": "17",
+ "wins": "0",
+ "Driver": {
+ "driverId": "tsunoda",
+ "permanentNumber": "22",
+ "code": "TSU",
+ "url": "http://en.wikipedia.org/wiki/Yuki_Tsunoda",
+ "givenName": "Yuki",
+ "familyName": "Tsunoda",
+ "dateOfBirth": "2000-05-11",
+ "nationality": "Japanese",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "15",
+ "positionText": "15",
+ "points": "10",
+ "wins": "0",
+ "Driver": {
+ "driverId": "bottas",
+ "permanentNumber": "77",
+ "code": "BOT",
+ "url": "http://en.wikipedia.org/wiki/Valtteri_Bottas",
+ "givenName": "Valtteri",
+ "familyName": "Bottas",
+ "dateOfBirth": "1989-08-28",
+ "nationality": "Finnish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alfa",
+ "url": "http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One",
+ "name": "Alfa Romeo",
+ "nationality": "Swiss",
+ }
+ ],
+ },
+ {
+ "position": "16",
+ "positionText": "16",
+ "points": "9",
+ "wins": "0",
+ "Driver": {
+ "driverId": "hulkenberg",
+ "permanentNumber": "27",
+ "code": "HUL",
+ "url": "http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg",
+ "givenName": "Nico",
+ "familyName": "Hülkenberg",
+ "dateOfBirth": "1987-08-19",
+ "nationality": "German",
+ },
+ "Constructors": [
+ {
+ "constructorId": "haas",
+ "url": "http://en.wikipedia.org/wiki/Haas_F1_Team",
+ "name": "Haas F1 Team",
+ "nationality": "American",
+ }
+ ],
+ },
+ {
+ "position": "17",
+ "positionText": "17",
+ "points": "6",
+ "wins": "0",
+ "Driver": {
+ "driverId": "ricciardo",
+ "permanentNumber": "3",
+ "code": "RIC",
+ "url": "http://en.wikipedia.org/wiki/Daniel_Ricciardo",
+ "givenName": "Daniel",
+ "familyName": "Ricciardo",
+ "dateOfBirth": "1989-07-01",
+ "nationality": "Australian",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "18",
+ "positionText": "18",
+ "points": "6",
+ "wins": "0",
+ "Driver": {
+ "driverId": "zhou",
+ "permanentNumber": "24",
+ "code": "ZHO",
+ "url": "http://en.wikipedia.org/wiki/Zhou_Guanyu",
+ "givenName": "Guanyu",
+ "familyName": "Zhou",
+ "dateOfBirth": "1999-05-30",
+ "nationality": "Chinese",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alfa",
+ "url": "http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One",
+ "name": "Alfa Romeo",
+ "nationality": "Swiss",
+ }
+ ],
+ },
+ {
+ "position": "19",
+ "positionText": "19",
+ "points": "3",
+ "wins": "0",
+ "Driver": {
+ "driverId": "kevin_magnussen",
+ "permanentNumber": "20",
+ "code": "MAG",
+ "url": "http://en.wikipedia.org/wiki/Kevin_Magnussen",
+ "givenName": "Kevin",
+ "familyName": "Magnussen",
+ "dateOfBirth": "1992-10-05",
+ "nationality": "Danish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "haas",
+ "url": "http://en.wikipedia.org/wiki/Haas_F1_Team",
+ "name": "Haas F1 Team",
+ "nationality": "American",
+ }
+ ],
+ },
+ {
+ "position": "20",
+ "positionText": "20",
+ "points": "2",
+ "wins": "0",
+ "Driver": {
+ "driverId": "lawson",
+ "permanentNumber": "40",
+ "code": "LAW",
+ "url": "http://en.wikipedia.org/wiki/Liam_Lawson",
+ "givenName": "Liam",
+ "familyName": "Lawson",
+ "dateOfBirth": "2002-02-11",
+ "nationality": "New Zealander",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "21",
+ "positionText": "21",
+ "points": "1",
+ "wins": "0",
+ "Driver": {
+ "driverId": "sargeant",
+ "permanentNumber": "2",
+ "code": "SAR",
+ "url": "http://en.wikipedia.org/wiki/Logan_Sargeant",
+ "givenName": "Logan",
+ "familyName": "Sargeant",
+ "dateOfBirth": "2000-12-31",
+ "nationality": "American",
+ },
+ "Constructors": [
+ {
+ "constructorId": "williams",
+ "url": "http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering",
+ "name": "Williams",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "22",
+ "positionText": "22",
+ "points": "0",
+ "wins": "0",
+ "Driver": {
+ "driverId": "de_vries",
+ "permanentNumber": "21",
+ "code": "DEV",
+ "url": "http://en.wikipedia.org/wiki/Nyck_de_Vries",
+ "givenName": "Nyck",
+ "familyName": "de Vries",
+ "dateOfBirth": "1995-02-06",
+ "nationality": "Dutch",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ ],
+ "ConstructorStandings": [
+ {
+ "position": "1",
+ "positionText": "1",
+ "points": "860",
+ "wins": "21",
+ "Constructor": {
+ "constructorId": "red_bull",
+ "url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
+ "name": "Red Bull",
+ "nationality": "Austrian",
+ },
+ },
+ {
+ "position": "2",
+ "positionText": "2",
+ "points": "409",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "mercedes",
+ "url": "http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One",
+ "name": "Mercedes",
+ "nationality": "German",
+ },
+ },
+ {
+ "position": "3",
+ "positionText": "3",
+ "points": "406",
+ "wins": "1",
+ "Constructor": {
+ "constructorId": "ferrari",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
+ "name": "Ferrari",
+ "nationality": "Italian",
+ },
+ },
+ {
+ "position": "4",
+ "positionText": "4",
+ "points": "302",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "mclaren",
+ "url": "http://en.wikipedia.org/wiki/McLaren",
+ "name": "McLaren",
+ "nationality": "British",
+ },
+ },
+ {
+ "position": "5",
+ "positionText": "5",
+ "points": "280",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "aston_martin",
+ "url": "http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One",
+ "name": "Aston Martin",
+ "nationality": "British",
+ },
+ },
+ {
+ "position": "6",
+ "positionText": "6",
+ "points": "120",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "alpine",
+ "url": "http://en.wikipedia.org/wiki/Alpine_F1_Team",
+ "name": "Alpine F1 Team",
+ "nationality": "French",
+ },
+ },
+ {
+ "position": "7",
+ "positionText": "7",
+ "points": "28",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "williams",
+ "url": "http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering",
+ "name": "Williams",
+ "nationality": "British",
+ },
+ },
+ {
+ "position": "8",
+ "positionText": "8",
+ "points": "25",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ },
+ },
+ {
+ "position": "9",
+ "positionText": "9",
+ "points": "16",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "alfa",
+ "url": "http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One",
+ "name": "Alfa Romeo",
+ "nationality": "Swiss",
+ },
+ },
+ {
+ "position": "10",
+ "positionText": "10",
+ "points": "12",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "haas",
+ "url": "http://en.wikipedia.org/wiki/Haas_F1_Team",
+ "name": "Haas F1 Team",
+ "nationality": "American",
+ },
+ },
+ ],
+ }
+
+
+def test_get_standings_good_year_only():
+ response = client.get("/standings?year=2023")
+ assert response.status_code == 200
+ assert response.json() == {
+ "season": 2023,
+ "round": 22,
+ "DriverStandings": [
+ {
+ "position": "1",
+ "positionText": "1",
+ "points": "575",
+ "wins": "19",
+ "Driver": {
+ "driverId": "max_verstappen",
+ "permanentNumber": "33",
+ "code": "VER",
+ "url": "http://en.wikipedia.org/wiki/Max_Verstappen",
+ "givenName": "Max",
+ "familyName": "Verstappen",
+ "dateOfBirth": "1997-09-30",
+ "nationality": "Dutch",
+ },
+ "Constructors": [
+ {
+ "constructorId": "red_bull",
+ "url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
+ "name": "Red Bull",
+ "nationality": "Austrian",
+ }
+ ],
+ },
+ {
+ "position": "2",
+ "positionText": "2",
+ "points": "285",
+ "wins": "2",
+ "Driver": {
+ "driverId": "perez",
+ "permanentNumber": "11",
+ "code": "PER",
+ "url": "http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez",
+ "givenName": "Sergio",
+ "familyName": "Pérez",
+ "dateOfBirth": "1990-01-26",
+ "nationality": "Mexican",
+ },
+ "Constructors": [
+ {
+ "constructorId": "red_bull",
+ "url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
+ "name": "Red Bull",
+ "nationality": "Austrian",
+ }
+ ],
+ },
+ {
+ "position": "3",
+ "positionText": "3",
+ "points": "234",
+ "wins": "0",
+ "Driver": {
+ "driverId": "hamilton",
+ "permanentNumber": "44",
+ "code": "HAM",
+ "url": "http://en.wikipedia.org/wiki/Lewis_Hamilton",
+ "givenName": "Lewis",
+ "familyName": "Hamilton",
+ "dateOfBirth": "1985-01-07",
+ "nationality": "British",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mercedes",
+ "url": "http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One",
+ "name": "Mercedes",
+ "nationality": "German",
+ }
+ ],
+ },
+ {
+ "position": "4",
+ "positionText": "4",
+ "points": "206",
+ "wins": "0",
+ "Driver": {
+ "driverId": "alonso",
+ "permanentNumber": "14",
+ "code": "ALO",
+ "url": "http://en.wikipedia.org/wiki/Fernando_Alonso",
+ "givenName": "Fernando",
+ "familyName": "Alonso",
+ "dateOfBirth": "1981-07-29",
+ "nationality": "Spanish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "aston_martin",
+ "url": "http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One",
+ "name": "Aston Martin",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "5",
+ "positionText": "5",
+ "points": "206",
+ "wins": "0",
+ "Driver": {
+ "driverId": "leclerc",
+ "permanentNumber": "16",
+ "code": "LEC",
+ "url": "http://en.wikipedia.org/wiki/Charles_Leclerc",
+ "givenName": "Charles",
+ "familyName": "Leclerc",
+ "dateOfBirth": "1997-10-16",
+ "nationality": "Monegasque",
+ },
+ "Constructors": [
+ {
+ "constructorId": "ferrari",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
+ "name": "Ferrari",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "6",
+ "positionText": "6",
+ "points": "205",
+ "wins": "0",
+ "Driver": {
+ "driverId": "norris",
+ "permanentNumber": "4",
+ "code": "NOR",
+ "url": "http://en.wikipedia.org/wiki/Lando_Norris",
+ "givenName": "Lando",
+ "familyName": "Norris",
+ "dateOfBirth": "1999-11-13",
+ "nationality": "British",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mclaren",
+ "url": "http://en.wikipedia.org/wiki/McLaren",
+ "name": "McLaren",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "7",
+ "positionText": "7",
+ "points": "200",
+ "wins": "1",
+ "Driver": {
+ "driverId": "sainz",
+ "permanentNumber": "55",
+ "code": "SAI",
+ "url": "http://en.wikipedia.org/wiki/Carlos_Sainz_Jr.",
+ "givenName": "Carlos",
+ "familyName": "Sainz",
+ "dateOfBirth": "1994-09-01",
+ "nationality": "Spanish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "ferrari",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
+ "name": "Ferrari",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "8",
+ "positionText": "8",
+ "points": "175",
+ "wins": "0",
+ "Driver": {
+ "driverId": "russell",
+ "permanentNumber": "63",
+ "code": "RUS",
+ "url": "http://en.wikipedia.org/wiki/George_Russell_(racing_driver)",
+ "givenName": "George",
+ "familyName": "Russell",
+ "dateOfBirth": "1998-02-15",
+ "nationality": "British",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mercedes",
+ "url": "http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One",
+ "name": "Mercedes",
+ "nationality": "German",
+ }
+ ],
+ },
+ {
+ "position": "9",
+ "positionText": "9",
+ "points": "97",
+ "wins": "0",
+ "Driver": {
+ "driverId": "piastri",
+ "permanentNumber": "81",
+ "code": "PIA",
+ "url": "http://en.wikipedia.org/wiki/Oscar_Piastri",
+ "givenName": "Oscar",
+ "familyName": "Piastri",
+ "dateOfBirth": "2001-04-06",
+ "nationality": "Australian",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mclaren",
+ "url": "http://en.wikipedia.org/wiki/McLaren",
+ "name": "McLaren",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "10",
+ "positionText": "10",
+ "points": "74",
+ "wins": "0",
+ "Driver": {
+ "driverId": "stroll",
+ "permanentNumber": "18",
+ "code": "STR",
+ "url": "http://en.wikipedia.org/wiki/Lance_Stroll",
+ "givenName": "Lance",
+ "familyName": "Stroll",
+ "dateOfBirth": "1998-10-29",
+ "nationality": "Canadian",
+ },
+ "Constructors": [
+ {
+ "constructorId": "aston_martin",
+ "url": "http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One",
+ "name": "Aston Martin",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "11",
+ "positionText": "11",
+ "points": "62",
+ "wins": "0",
+ "Driver": {
+ "driverId": "gasly",
+ "permanentNumber": "10",
+ "code": "GAS",
+ "url": "http://en.wikipedia.org/wiki/Pierre_Gasly",
+ "givenName": "Pierre",
+ "familyName": "Gasly",
+ "dateOfBirth": "1996-02-07",
+ "nationality": "French",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alpine",
+ "url": "http://en.wikipedia.org/wiki/Alpine_F1_Team",
+ "name": "Alpine F1 Team",
+ "nationality": "French",
+ }
+ ],
+ },
+ {
+ "position": "12",
+ "positionText": "12",
+ "points": "58",
+ "wins": "0",
+ "Driver": {
+ "driverId": "ocon",
+ "permanentNumber": "31",
+ "code": "OCO",
+ "url": "http://en.wikipedia.org/wiki/Esteban_Ocon",
+ "givenName": "Esteban",
+ "familyName": "Ocon",
+ "dateOfBirth": "1996-09-17",
+ "nationality": "French",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alpine",
+ "url": "http://en.wikipedia.org/wiki/Alpine_F1_Team",
+ "name": "Alpine F1 Team",
+ "nationality": "French",
+ }
+ ],
+ },
+ {
+ "position": "13",
+ "positionText": "13",
+ "points": "27",
+ "wins": "0",
+ "Driver": {
+ "driverId": "albon",
+ "permanentNumber": "23",
+ "code": "ALB",
+ "url": "http://en.wikipedia.org/wiki/Alexander_Albon",
+ "givenName": "Alexander",
+ "familyName": "Albon",
+ "dateOfBirth": "1996-03-23",
+ "nationality": "Thai",
+ },
+ "Constructors": [
+ {
+ "constructorId": "williams",
+ "url": "http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering",
+ "name": "Williams",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "14",
+ "positionText": "14",
+ "points": "17",
+ "wins": "0",
+ "Driver": {
+ "driverId": "tsunoda",
+ "permanentNumber": "22",
+ "code": "TSU",
+ "url": "http://en.wikipedia.org/wiki/Yuki_Tsunoda",
+ "givenName": "Yuki",
+ "familyName": "Tsunoda",
+ "dateOfBirth": "2000-05-11",
+ "nationality": "Japanese",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "15",
+ "positionText": "15",
+ "points": "10",
+ "wins": "0",
+ "Driver": {
+ "driverId": "bottas",
+ "permanentNumber": "77",
+ "code": "BOT",
+ "url": "http://en.wikipedia.org/wiki/Valtteri_Bottas",
+ "givenName": "Valtteri",
+ "familyName": "Bottas",
+ "dateOfBirth": "1989-08-28",
+ "nationality": "Finnish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alfa",
+ "url": "http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One",
+ "name": "Alfa Romeo",
+ "nationality": "Swiss",
+ }
+ ],
+ },
+ {
+ "position": "16",
+ "positionText": "16",
+ "points": "9",
+ "wins": "0",
+ "Driver": {
+ "driverId": "hulkenberg",
+ "permanentNumber": "27",
+ "code": "HUL",
+ "url": "http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg",
+ "givenName": "Nico",
+ "familyName": "Hülkenberg",
+ "dateOfBirth": "1987-08-19",
+ "nationality": "German",
+ },
+ "Constructors": [
+ {
+ "constructorId": "haas",
+ "url": "http://en.wikipedia.org/wiki/Haas_F1_Team",
+ "name": "Haas F1 Team",
+ "nationality": "American",
+ }
+ ],
+ },
+ {
+ "position": "17",
+ "positionText": "17",
+ "points": "6",
+ "wins": "0",
+ "Driver": {
+ "driverId": "ricciardo",
+ "permanentNumber": "3",
+ "code": "RIC",
+ "url": "http://en.wikipedia.org/wiki/Daniel_Ricciardo",
+ "givenName": "Daniel",
+ "familyName": "Ricciardo",
+ "dateOfBirth": "1989-07-01",
+ "nationality": "Australian",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "18",
+ "positionText": "18",
+ "points": "6",
+ "wins": "0",
+ "Driver": {
+ "driverId": "zhou",
+ "permanentNumber": "24",
+ "code": "ZHO",
+ "url": "http://en.wikipedia.org/wiki/Zhou_Guanyu",
+ "givenName": "Guanyu",
+ "familyName": "Zhou",
+ "dateOfBirth": "1999-05-30",
+ "nationality": "Chinese",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alfa",
+ "url": "http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One",
+ "name": "Alfa Romeo",
+ "nationality": "Swiss",
+ }
+ ],
+ },
+ {
+ "position": "19",
+ "positionText": "19",
+ "points": "3",
+ "wins": "0",
+ "Driver": {
+ "driverId": "kevin_magnussen",
+ "permanentNumber": "20",
+ "code": "MAG",
+ "url": "http://en.wikipedia.org/wiki/Kevin_Magnussen",
+ "givenName": "Kevin",
+ "familyName": "Magnussen",
+ "dateOfBirth": "1992-10-05",
+ "nationality": "Danish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "haas",
+ "url": "http://en.wikipedia.org/wiki/Haas_F1_Team",
+ "name": "Haas F1 Team",
+ "nationality": "American",
+ }
+ ],
+ },
+ {
+ "position": "20",
+ "positionText": "20",
+ "points": "2",
+ "wins": "0",
+ "Driver": {
+ "driverId": "lawson",
+ "permanentNumber": "40",
+ "code": "LAW",
+ "url": "http://en.wikipedia.org/wiki/Liam_Lawson",
+ "givenName": "Liam",
+ "familyName": "Lawson",
+ "dateOfBirth": "2002-02-11",
+ "nationality": "New Zealander",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "21",
+ "positionText": "21",
+ "points": "1",
+ "wins": "0",
+ "Driver": {
+ "driverId": "sargeant",
+ "permanentNumber": "2",
+ "code": "SAR",
+ "url": "http://en.wikipedia.org/wiki/Logan_Sargeant",
+ "givenName": "Logan",
+ "familyName": "Sargeant",
+ "dateOfBirth": "2000-12-31",
+ "nationality": "American",
+ },
+ "Constructors": [
+ {
+ "constructorId": "williams",
+ "url": "http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering",
+ "name": "Williams",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "22",
+ "positionText": "22",
+ "points": "0",
+ "wins": "0",
+ "Driver": {
+ "driverId": "de_vries",
+ "permanentNumber": "21",
+ "code": "DEV",
+ "url": "http://en.wikipedia.org/wiki/Nyck_de_Vries",
+ "givenName": "Nyck",
+ "familyName": "de Vries",
+ "dateOfBirth": "1995-02-06",
+ "nationality": "Dutch",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ ],
+ "ConstructorStandings": [
+ {
+ "position": "1",
+ "positionText": "1",
+ "points": "860",
+ "wins": "21",
+ "Constructor": {
+ "constructorId": "red_bull",
+ "url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
+ "name": "Red Bull",
+ "nationality": "Austrian",
+ },
+ },
+ {
+ "position": "2",
+ "positionText": "2",
+ "points": "409",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "mercedes",
+ "url": "http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One",
+ "name": "Mercedes",
+ "nationality": "German",
+ },
+ },
+ {
+ "position": "3",
+ "positionText": "3",
+ "points": "406",
+ "wins": "1",
+ "Constructor": {
+ "constructorId": "ferrari",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
+ "name": "Ferrari",
+ "nationality": "Italian",
+ },
+ },
+ {
+ "position": "4",
+ "positionText": "4",
+ "points": "302",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "mclaren",
+ "url": "http://en.wikipedia.org/wiki/McLaren",
+ "name": "McLaren",
+ "nationality": "British",
+ },
+ },
+ {
+ "position": "5",
+ "positionText": "5",
+ "points": "280",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "aston_martin",
+ "url": "http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One",
+ "name": "Aston Martin",
+ "nationality": "British",
+ },
+ },
+ {
+ "position": "6",
+ "positionText": "6",
+ "points": "120",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "alpine",
+ "url": "http://en.wikipedia.org/wiki/Alpine_F1_Team",
+ "name": "Alpine F1 Team",
+ "nationality": "French",
+ },
+ },
+ {
+ "position": "7",
+ "positionText": "7",
+ "points": "28",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "williams",
+ "url": "http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering",
+ "name": "Williams",
+ "nationality": "British",
+ },
+ },
+ {
+ "position": "8",
+ "positionText": "8",
+ "points": "25",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ },
+ },
+ {
+ "position": "9",
+ "positionText": "9",
+ "points": "16",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "alfa",
+ "url": "http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One",
+ "name": "Alfa Romeo",
+ "nationality": "Swiss",
+ },
+ },
+ {
+ "position": "10",
+ "positionText": "10",
+ "points": "12",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "haas",
+ "url": "http://en.wikipedia.org/wiki/Haas_F1_Team",
+ "name": "Haas F1 Team",
+ "nationality": "American",
+ },
+ },
+ ],
+ }
+
+
+def test_get_standings_good_year_and_round():
+ response = client.get("/standings?year=2023&round=5")
+ assert response.status_code == 200
+ assert response.json() == {
+ "season": 2023,
+ "round": 5,
+ "DriverStandings": [
+ {
+ "position": "1",
+ "positionText": "1",
+ "points": "119",
+ "wins": "3",
+ "Driver": {
+ "driverId": "max_verstappen",
+ "permanentNumber": "33",
+ "code": "VER",
+ "url": "http://en.wikipedia.org/wiki/Max_Verstappen",
+ "givenName": "Max",
+ "familyName": "Verstappen",
+ "dateOfBirth": "1997-09-30",
+ "nationality": "Dutch",
+ },
+ "Constructors": [
+ {
+ "constructorId": "red_bull",
+ "url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
+ "name": "Red Bull",
+ "nationality": "Austrian",
+ }
+ ],
+ },
+ {
+ "position": "2",
+ "positionText": "2",
+ "points": "105",
+ "wins": "2",
+ "Driver": {
+ "driverId": "perez",
+ "permanentNumber": "11",
+ "code": "PER",
+ "url": "http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez",
+ "givenName": "Sergio",
+ "familyName": "Pérez",
+ "dateOfBirth": "1990-01-26",
+ "nationality": "Mexican",
+ },
+ "Constructors": [
+ {
+ "constructorId": "red_bull",
+ "url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
+ "name": "Red Bull",
+ "nationality": "Austrian",
+ }
+ ],
+ },
+ {
+ "position": "3",
+ "positionText": "3",
+ "points": "75",
+ "wins": "0",
+ "Driver": {
+ "driverId": "alonso",
+ "permanentNumber": "14",
+ "code": "ALO",
+ "url": "http://en.wikipedia.org/wiki/Fernando_Alonso",
+ "givenName": "Fernando",
+ "familyName": "Alonso",
+ "dateOfBirth": "1981-07-29",
+ "nationality": "Spanish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "aston_martin",
+ "url": "http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One",
+ "name": "Aston Martin",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "4",
+ "positionText": "4",
+ "points": "56",
+ "wins": "0",
+ "Driver": {
+ "driverId": "hamilton",
+ "permanentNumber": "44",
+ "code": "HAM",
+ "url": "http://en.wikipedia.org/wiki/Lewis_Hamilton",
+ "givenName": "Lewis",
+ "familyName": "Hamilton",
+ "dateOfBirth": "1985-01-07",
+ "nationality": "British",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mercedes",
+ "url": "http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One",
+ "name": "Mercedes",
+ "nationality": "German",
+ }
+ ],
+ },
+ {
+ "position": "5",
+ "positionText": "5",
+ "points": "44",
+ "wins": "0",
+ "Driver": {
+ "driverId": "sainz",
+ "permanentNumber": "55",
+ "code": "SAI",
+ "url": "http://en.wikipedia.org/wiki/Carlos_Sainz_Jr.",
+ "givenName": "Carlos",
+ "familyName": "Sainz",
+ "dateOfBirth": "1994-09-01",
+ "nationality": "Spanish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "ferrari",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
+ "name": "Ferrari",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "6",
+ "positionText": "6",
+ "points": "40",
+ "wins": "0",
+ "Driver": {
+ "driverId": "russell",
+ "permanentNumber": "63",
+ "code": "RUS",
+ "url": "http://en.wikipedia.org/wiki/George_Russell_(racing_driver)",
+ "givenName": "George",
+ "familyName": "Russell",
+ "dateOfBirth": "1998-02-15",
+ "nationality": "British",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mercedes",
+ "url": "http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One",
+ "name": "Mercedes",
+ "nationality": "German",
+ }
+ ],
+ },
+ {
+ "position": "7",
+ "positionText": "7",
+ "points": "34",
+ "wins": "0",
+ "Driver": {
+ "driverId": "leclerc",
+ "permanentNumber": "16",
+ "code": "LEC",
+ "url": "http://en.wikipedia.org/wiki/Charles_Leclerc",
+ "givenName": "Charles",
+ "familyName": "Leclerc",
+ "dateOfBirth": "1997-10-16",
+ "nationality": "Monegasque",
+ },
+ "Constructors": [
+ {
+ "constructorId": "ferrari",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
+ "name": "Ferrari",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "8",
+ "positionText": "8",
+ "points": "27",
+ "wins": "0",
+ "Driver": {
+ "driverId": "stroll",
+ "permanentNumber": "18",
+ "code": "STR",
+ "url": "http://en.wikipedia.org/wiki/Lance_Stroll",
+ "givenName": "Lance",
+ "familyName": "Stroll",
+ "dateOfBirth": "1998-10-29",
+ "nationality": "Canadian",
+ },
+ "Constructors": [
+ {
+ "constructorId": "aston_martin",
+ "url": "http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One",
+ "name": "Aston Martin",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "9",
+ "positionText": "9",
+ "points": "10",
+ "wins": "0",
+ "Driver": {
+ "driverId": "norris",
+ "permanentNumber": "4",
+ "code": "NOR",
+ "url": "http://en.wikipedia.org/wiki/Lando_Norris",
+ "givenName": "Lando",
+ "familyName": "Norris",
+ "dateOfBirth": "1999-11-13",
+ "nationality": "British",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mclaren",
+ "url": "http://en.wikipedia.org/wiki/McLaren",
+ "name": "McLaren",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "10",
+ "positionText": "10",
+ "points": "8",
+ "wins": "0",
+ "Driver": {
+ "driverId": "gasly",
+ "permanentNumber": "10",
+ "code": "GAS",
+ "url": "http://en.wikipedia.org/wiki/Pierre_Gasly",
+ "givenName": "Pierre",
+ "familyName": "Gasly",
+ "dateOfBirth": "1996-02-07",
+ "nationality": "French",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alpine",
+ "url": "http://en.wikipedia.org/wiki/Alpine_F1_Team",
+ "name": "Alpine F1 Team",
+ "nationality": "French",
+ }
+ ],
+ },
+ {
+ "position": "11",
+ "positionText": "11",
+ "points": "6",
+ "wins": "0",
+ "Driver": {
+ "driverId": "hulkenberg",
+ "permanentNumber": "27",
+ "code": "HUL",
+ "url": "http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg",
+ "givenName": "Nico",
+ "familyName": "Hülkenberg",
+ "dateOfBirth": "1987-08-19",
+ "nationality": "German",
+ },
+ "Constructors": [
+ {
+ "constructorId": "haas",
+ "url": "http://en.wikipedia.org/wiki/Haas_F1_Team",
+ "name": "Haas F1 Team",
+ "nationality": "American",
+ }
+ ],
+ },
+ {
+ "position": "12",
+ "positionText": "12",
+ "points": "6",
+ "wins": "0",
+ "Driver": {
+ "driverId": "ocon",
+ "permanentNumber": "31",
+ "code": "OCO",
+ "url": "http://en.wikipedia.org/wiki/Esteban_Ocon",
+ "givenName": "Esteban",
+ "familyName": "Ocon",
+ "dateOfBirth": "1996-09-17",
+ "nationality": "French",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alpine",
+ "url": "http://en.wikipedia.org/wiki/Alpine_F1_Team",
+ "name": "Alpine F1 Team",
+ "nationality": "French",
+ }
+ ],
+ },
+ {
+ "position": "13",
+ "positionText": "13",
+ "points": "4",
+ "wins": "0",
+ "Driver": {
+ "driverId": "bottas",
+ "permanentNumber": "77",
+ "code": "BOT",
+ "url": "http://en.wikipedia.org/wiki/Valtteri_Bottas",
+ "givenName": "Valtteri",
+ "familyName": "Bottas",
+ "dateOfBirth": "1989-08-28",
+ "nationality": "Finnish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alfa",
+ "url": "http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One",
+ "name": "Alfa Romeo",
+ "nationality": "Swiss",
+ }
+ ],
+ },
+ {
+ "position": "14",
+ "positionText": "14",
+ "points": "4",
+ "wins": "0",
+ "Driver": {
+ "driverId": "piastri",
+ "permanentNumber": "81",
+ "code": "PIA",
+ "url": "http://en.wikipedia.org/wiki/Oscar_Piastri",
+ "givenName": "Oscar",
+ "familyName": "Piastri",
+ "dateOfBirth": "2001-04-06",
+ "nationality": "Australian",
+ },
+ "Constructors": [
+ {
+ "constructorId": "mclaren",
+ "url": "http://en.wikipedia.org/wiki/McLaren",
+ "name": "McLaren",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "15",
+ "positionText": "15",
+ "points": "2",
+ "wins": "0",
+ "Driver": {
+ "driverId": "zhou",
+ "permanentNumber": "24",
+ "code": "ZHO",
+ "url": "http://en.wikipedia.org/wiki/Zhou_Guanyu",
+ "givenName": "Guanyu",
+ "familyName": "Zhou",
+ "dateOfBirth": "1999-05-30",
+ "nationality": "Chinese",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alfa",
+ "url": "http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One",
+ "name": "Alfa Romeo",
+ "nationality": "Swiss",
+ }
+ ],
+ },
+ {
+ "position": "16",
+ "positionText": "16",
+ "points": "2",
+ "wins": "0",
+ "Driver": {
+ "driverId": "tsunoda",
+ "permanentNumber": "22",
+ "code": "TSU",
+ "url": "http://en.wikipedia.org/wiki/Yuki_Tsunoda",
+ "givenName": "Yuki",
+ "familyName": "Tsunoda",
+ "dateOfBirth": "2000-05-11",
+ "nationality": "Japanese",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ {
+ "position": "17",
+ "positionText": "17",
+ "points": "2",
+ "wins": "0",
+ "Driver": {
+ "driverId": "kevin_magnussen",
+ "permanentNumber": "20",
+ "code": "MAG",
+ "url": "http://en.wikipedia.org/wiki/Kevin_Magnussen",
+ "givenName": "Kevin",
+ "familyName": "Magnussen",
+ "dateOfBirth": "1992-10-05",
+ "nationality": "Danish",
+ },
+ "Constructors": [
+ {
+ "constructorId": "haas",
+ "url": "http://en.wikipedia.org/wiki/Haas_F1_Team",
+ "name": "Haas F1 Team",
+ "nationality": "American",
+ }
+ ],
+ },
+ {
+ "position": "18",
+ "positionText": "18",
+ "points": "1",
+ "wins": "0",
+ "Driver": {
+ "driverId": "albon",
+ "permanentNumber": "23",
+ "code": "ALB",
+ "url": "http://en.wikipedia.org/wiki/Alexander_Albon",
+ "givenName": "Alexander",
+ "familyName": "Albon",
+ "dateOfBirth": "1996-03-23",
+ "nationality": "Thai",
+ },
+ "Constructors": [
+ {
+ "constructorId": "williams",
+ "url": "http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering",
+ "name": "Williams",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "19",
+ "positionText": "19",
+ "points": "0",
+ "wins": "0",
+ "Driver": {
+ "driverId": "sargeant",
+ "permanentNumber": "2",
+ "code": "SAR",
+ "url": "http://en.wikipedia.org/wiki/Logan_Sargeant",
+ "givenName": "Logan",
+ "familyName": "Sargeant",
+ "dateOfBirth": "2000-12-31",
+ "nationality": "American",
+ },
+ "Constructors": [
+ {
+ "constructorId": "williams",
+ "url": "http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering",
+ "name": "Williams",
+ "nationality": "British",
+ }
+ ],
+ },
+ {
+ "position": "20",
+ "positionText": "20",
+ "points": "0",
+ "wins": "0",
+ "Driver": {
+ "driverId": "de_vries",
+ "permanentNumber": "21",
+ "code": "DEV",
+ "url": "http://en.wikipedia.org/wiki/Nyck_de_Vries",
+ "givenName": "Nyck",
+ "familyName": "de Vries",
+ "dateOfBirth": "1995-02-06",
+ "nationality": "Dutch",
+ },
+ "Constructors": [
+ {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ }
+ ],
+ },
+ ],
+ "ConstructorStandings": [
+ {
+ "position": "1",
+ "positionText": "1",
+ "points": "224",
+ "wins": "5",
+ "Constructor": {
+ "constructorId": "red_bull",
+ "url": "http://en.wikipedia.org/wiki/Red_Bull_Racing",
+ "name": "Red Bull",
+ "nationality": "Austrian",
+ },
+ },
+ {
+ "position": "2",
+ "positionText": "2",
+ "points": "102",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "aston_martin",
+ "url": "http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One",
+ "name": "Aston Martin",
+ "nationality": "British",
+ },
+ },
+ {
+ "position": "3",
+ "positionText": "3",
+ "points": "96",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "mercedes",
+ "url": "http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One",
+ "name": "Mercedes",
+ "nationality": "German",
+ },
+ },
+ {
+ "position": "4",
+ "positionText": "4",
+ "points": "78",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "ferrari",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_Ferrari",
+ "name": "Ferrari",
+ "nationality": "Italian",
+ },
+ },
+ {
+ "position": "5",
+ "positionText": "5",
+ "points": "14",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "mclaren",
+ "url": "http://en.wikipedia.org/wiki/McLaren",
+ "name": "McLaren",
+ "nationality": "British",
+ },
+ },
+ {
+ "position": "6",
+ "positionText": "6",
+ "points": "14",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "alpine",
+ "url": "http://en.wikipedia.org/wiki/Alpine_F1_Team",
+ "name": "Alpine F1 Team",
+ "nationality": "French",
+ },
+ },
+ {
+ "position": "7",
+ "positionText": "7",
+ "points": "8",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "haas",
+ "url": "http://en.wikipedia.org/wiki/Haas_F1_Team",
+ "name": "Haas F1 Team",
+ "nationality": "American",
+ },
+ },
+ {
+ "position": "8",
+ "positionText": "8",
+ "points": "6",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "alfa",
+ "url": "http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One",
+ "name": "Alfa Romeo",
+ "nationality": "Swiss",
+ },
+ },
+ {
+ "position": "9",
+ "positionText": "9",
+ "points": "2",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "alphatauri",
+ "url": "http://en.wikipedia.org/wiki/Scuderia_AlphaTauri",
+ "name": "AlphaTauri",
+ "nationality": "Italian",
+ },
+ },
+ {
+ "position": "10",
+ "positionText": "10",
+ "points": "1",
+ "wins": "0",
+ "Constructor": {
+ "constructorId": "williams",
+ "url": "http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering",
+ "name": "Williams",
+ "nationality": "British",
+ },
+ },
+ ],
+ }
+
+
+# endregion standings - good inputs
+
+# region standings - no inputs
+
+
+def test_get_standings_bad_year_only_no_input():
+ response = client.get("/standings?year=")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "int_parsing",
+ "loc": ["query", "year"],
+ "msg": "Input should be a valid integer, unable to parse string as an integer",
+ "input": "",
+ "url": "https://errors.pydantic.dev/2.5/v/int_parsing",
+ }
+ ]
+ }
+
+
+def test_get_standings_bad_round_only_no_input():
+ response = client.get("/standings?round=")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "int_parsing",
+ "loc": ["query", "round"],
+ "msg": "Input should be a valid integer, unable to parse string as an integer",
+ "input": "",
+ "url": "https://errors.pydantic.dev/2.5/v/int_parsing",
+ }
+ ]
+ }
+
+
+def test_get_standings_good_round_bad_year_no_input():
+ response = client.get("/standings?round=3")
+ assert response.status_code == 400
+ assert response.json() == {
+ "detail": 'Bad request. Must provide the "year" parameter.'
+ }
+
+
+def test_get_standings_bad_year_and_round_no_input():
+ response = client.get("/standings?year=&round=")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "int_parsing",
+ "loc": ["query", "year"],
+ "msg": "Input should be a valid integer, unable to parse string as an integer",
+ "input": "",
+ "url": "https://errors.pydantic.dev/2.5/v/int_parsing",
+ },
+ {
+ "type": "int_parsing",
+ "loc": ["query", "round"],
+ "msg": "Input should be a valid integer, unable to parse string as an integer",
+ "input": "",
+ "url": "https://errors.pydantic.dev/2.5/v/int_parsing",
+ },
+ ]
+ }
+
+
+# endregion standings - no inputs
+
+# region standings - bad inputs
+
+
+def test_get_standings_bad_year_only_lower_limit():
+ response = client.get(f"/standings?year={MIN_SUPPORTED_YEAR - 1}")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "greater_than_equal",
+ "loc": ["query", "year"],
+ "msg": "Input should be greater than or equal to 1950",
+ "input": "1949",
+ "ctx": {"ge": 1950},
+ "url": "https://errors.pydantic.dev/2.5/v/greater_than_equal",
+ }
+ ]
+ }
+
+
+def test_get_standings_bad_year_only_upper_limit():
+ response = client.get(f"/standings?year={MAX_SUPPORTED_YEAR + 1}")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "less_than_equal",
+ "loc": ["query", "year"],
+ "msg": "Input should be less than or equal to 2024",
+ "input": "2025",
+ "ctx": {"le": 2024},
+ "url": "https://errors.pydantic.dev/2.5/v/less_than_equal",
+ }
+ ]
+ }
+
+
+def test_get_standings_bad_round_only_lower_limit():
+ response = client.get(f"/standings?round={MIN_SUPPORTED_ROUND - 1}")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "greater_than_equal",
+ "loc": ["query", "round"],
+ "msg": "Input should be greater than or equal to 1",
+ "input": "0",
+ "ctx": {"ge": 1},
+ "url": "https://errors.pydantic.dev/2.5/v/greater_than_equal",
+ }
+ ]
+ }
+
+
+def test_get_standings_bad_round_only_upper_limit():
+ response = client.get(f"/standings?round={MAX_SUPPORTED_ROUND + 1}")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "less_than_equal",
+ "loc": ["query", "round"],
+ "msg": "Input should be less than or equal to 30",
+ "input": "31",
+ "ctx": {"le": 30},
+ "url": "https://errors.pydantic.dev/2.5/v/less_than_equal",
+ }
+ ]
+ }
+
+
+def test_get_standings_good_year_bad_round_lower_limit():
+ response = client.get(f"/standings?year=2023&round={MIN_SUPPORTED_ROUND - 1}")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "greater_than_equal",
+ "loc": ["query", "round"],
+ "msg": "Input should be greater than or equal to 1",
+ "input": "0",
+ "ctx": {"ge": 1},
+ "url": "https://errors.pydantic.dev/2.5/v/greater_than_equal",
+ }
+ ]
+ }
+
+
+def test_get_standings_good_year_bad_round_upper_limit():
+ response = client.get(f"/standings?year=2023&round={MAX_SUPPORTED_ROUND + 1}")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "less_than_equal",
+ "loc": ["query", "round"],
+ "msg": "Input should be less than or equal to 30",
+ "input": "31",
+ "ctx": {"le": 30},
+ "url": "https://errors.pydantic.dev/2.5/v/less_than_equal",
+ }
+ ]
+ }
+
+
+def test_get_standings_good_round_bad_year_lower_limit():
+ response = client.get(f"/standings?year={MIN_SUPPORTED_YEAR - 1}&round=2")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "greater_than_equal",
+ "loc": ["query", "year"],
+ "msg": "Input should be greater than or equal to 1950",
+ "input": "1949",
+ "ctx": {"ge": 1950},
+ "url": "https://errors.pydantic.dev/2.5/v/greater_than_equal",
+ }
+ ]
+ }
+
+
+def test_get_standings_good_round_bad_year_upper_limit():
+ response = client.get(f"/standings?year={MAX_SUPPORTED_YEAR + 1}&round=2")
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "less_than_equal",
+ "loc": ["query", "year"],
+ "msg": "Input should be less than or equal to 2024",
+ "input": "2025",
+ "ctx": {"le": 2024},
+ "url": "https://errors.pydantic.dev/2.5/v/less_than_equal",
+ }
+ ]
+ }
+
+
+def test_get_standings_bad_year_and_round_lower_limit():
+ response = client.get(
+ f"/standings?year={MIN_SUPPORTED_YEAR - 1}&round={MIN_SUPPORTED_ROUND - 1}"
+ )
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "greater_than_equal",
+ "loc": ["query", "year"],
+ "msg": "Input should be greater than or equal to 1950",
+ "input": "1949",
+ "ctx": {"ge": 1950},
+ "url": "https://errors.pydantic.dev/2.5/v/greater_than_equal",
+ },
+ {
+ "type": "greater_than_equal",
+ "loc": ["query", "round"],
+ "msg": "Input should be greater than or equal to 1",
+ "input": "0",
+ "ctx": {"ge": 1},
+ "url": "https://errors.pydantic.dev/2.5/v/greater_than_equal",
+ },
+ ]
+ }
+
+
+def test_get_standings_bad_year_and_round_upper_limit():
+ response = client.get(
+ f"/standings?year={MAX_SUPPORTED_YEAR + 1}&round={MAX_SUPPORTED_ROUND + 1}"
+ )
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "less_than_equal",
+ "loc": ["query", "year"],
+ "msg": "Input should be less than or equal to 2024",
+ "input": "2025",
+ "ctx": {"le": 2024},
+ "url": "https://errors.pydantic.dev/2.5/v/less_than_equal",
+ },
+ {
+ "type": "less_than_equal",
+ "loc": ["query", "round"],
+ "msg": "Input should be less than or equal to 30",
+ "input": "31",
+ "ctx": {"le": 30},
+ "url": "https://errors.pydantic.dev/2.5/v/less_than_equal",
+ },
+ ]
+ }
+
+
+def test_get_standings_bad_year_lower_limit_round_upper_limit():
+ response = client.get(
+ f"/standings?year={MIN_SUPPORTED_YEAR - 1}&round={MAX_SUPPORTED_ROUND + 1}"
+ )
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "greater_than_equal",
+ "loc": ["query", "year"],
+ "msg": "Input should be greater than or equal to 1950",
+ "input": "1949",
+ "ctx": {"ge": 1950},
+ "url": "https://errors.pydantic.dev/2.5/v/greater_than_equal",
+ },
+ {
+ "type": "less_than_equal",
+ "loc": ["query", "round"],
+ "msg": "Input should be less than or equal to 30",
+ "input": "31",
+ "ctx": {"le": 30},
+ "url": "https://errors.pydantic.dev/2.5/v/less_than_equal",
+ },
+ ]
+ }
+
+
+def test_get_standings_bad_year_upper_limit_round_lower_limit():
+ response = client.get(
+ f"/standings?year={MAX_SUPPORTED_YEAR + 1}&round={MIN_SUPPORTED_ROUND - 1}"
+ )
+ assert response.status_code == 422
+ assert response.json() == {
+ "detail": [
+ {
+ "type": "less_than_equal",
+ "loc": ["query", "year"],
+ "msg": "Input should be less than or equal to 2024",
+ "input": "2025",
+ "ctx": {"le": 2024},
+ "url": "https://errors.pydantic.dev/2.5/v/less_than_equal",
+ },
+ {
+ "type": "greater_than_equal",
+ "loc": ["query", "round"],
+ "msg": "Input should be greater than or equal to 1",
+ "input": "0",
+ "ctx": {"ge": 1},
+ "url": "https://errors.pydantic.dev/2.5/v/greater_than_equal",
+ },
+ ]
+ }
+
+
+# endregion standings - bad inputs
+
+# endregion standings
diff --git a/app/utils.py b/app/utils.py
index 282994d..c73591c 100644
--- a/app/utils.py
+++ b/app/utils.py
@@ -3,7 +3,7 @@
import fastf1
-def get_default_year_for_schedule() -> int:
+def get_default_year() -> int:
# default year is defined as the year which has data for atleast 1 race session
current_year = datetime.today().year
diff --git a/notebooks/playground.ipynb b/notebooks/pratik-playground.ipynb
similarity index 70%
rename from notebooks/playground.ipynb
rename to notebooks/pratik-playground.ipynb
index 58d9417..e86589c 100644
--- a/notebooks/playground.ipynb
+++ b/notebooks/pratik-playground.ipynb
@@ -2,7 +2,7 @@
"cells": [
{
"cell_type": "code",
- "execution_count": 1,
+ "execution_count": 11,
"id": "f4e32ad5-e506-434c-8ec8-d8a1c10547af",
"metadata": {},
"outputs": [],
@@ -16,28 +16,17 @@
"pd.set_option(\"display.max_colwidth\", None)\n",
"\n",
"# Ergast options\n",
- "ergast = Ergast(result_type=\"pandas\", auto_cast=True)"
+ "ergast = Ergast(result_type=\"raw\", auto_cast=True)"
]
},
{
"cell_type": "code",
- "execution_count": 2,
+ "execution_count": 12,
"id": "15a9f59c-11c3-4461-b887-fe8eeacb2a35",
"metadata": {
"scrolled": true
},
"outputs": [
- {
- "name": "stderr",
- "output_type": "stream",
- "text": [
- "req WARNING \t\n",
- "\n",
- "DEFAULT CACHE ENABLED!\n",
- "\tCache directory: /Users/pratik/Library/Caches/fastf1.\n",
- "\tSize: 104.31 MB\n"
- ]
- },
{
"data": {
"text/html": [
@@ -889,7 +878,7 @@
"22 2023-11-26 17:00:00+04:00 2023-11-26 13:00:00 True "
]
},
- "execution_count": 2,
+ "execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
@@ -901,7 +890,7 @@
},
{
"cell_type": "code",
- "execution_count": 3,
+ "execution_count": 13,
"id": "02f26061-c4b8-4b33-a240-14f4ee0411d4",
"metadata": {},
"outputs": [
@@ -909,7 +898,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
- "core INFO \tLoading data for Bahrain Grand Prix - Qualifying [v3.1.6]\n",
+ "core INFO \tLoading data for Bahrain Grand Prix - Qualifying [v3.2.0]\n",
"req INFO \tUsing cached data for session_info\n",
"req INFO \tUsing cached data for driver_info\n",
"req INFO \tUsing cached data for session_status_data\n",
@@ -978,7 +967,7 @@
"
Verstappen | \n",
" Max Verstappen | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/M/MAXVER01_Max_Verstappen/maxver01.png.transform/1col/image.png | \n",
- " | \n",
+ " NED | \n",
" 1.0 | \n",
" | \n",
" NaN | \n",
@@ -1002,7 +991,7 @@
" Perez | \n",
" Sergio Perez | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/S/SERPER01_Sergio_Perez/serper01.png.transform/1col/image.png | \n",
- " | \n",
+ " MEX | \n",
" 2.0 | \n",
" | \n",
" NaN | \n",
@@ -1026,7 +1015,7 @@
" Leclerc | \n",
" Charles Leclerc | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/C/CHALEC01_Charles_Leclerc/chalec01.png.transform/1col/image.png | \n",
- " | \n",
+ " MON | \n",
" 3.0 | \n",
" | \n",
" NaN | \n",
@@ -1050,7 +1039,7 @@
" Sainz | \n",
" Carlos Sainz | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/C/CARSAI01_Carlos_Sainz/carsai01.png.transform/1col/image.png | \n",
- " | \n",
+ " ESP | \n",
" 4.0 | \n",
" | \n",
" NaN | \n",
@@ -1074,7 +1063,7 @@
" Alonso | \n",
" Fernando Alonso | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/F/FERALO01_Fernando_Alonso/feralo01.png.transform/1col/image.png | \n",
- " | \n",
+ " ESP | \n",
" 5.0 | \n",
" | \n",
" NaN | \n",
@@ -1098,7 +1087,7 @@
" Russell | \n",
" George Russell | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/G/GEORUS01_George_Russell/georus01.png.transform/1col/image.png | \n",
- " | \n",
+ " GBR | \n",
" 6.0 | \n",
" | \n",
" NaN | \n",
@@ -1122,7 +1111,7 @@
" Hamilton | \n",
" Lewis Hamilton | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/L/LEWHAM01_Lewis_Hamilton/lewham01.png.transform/1col/image.png | \n",
- " | \n",
+ " GBR | \n",
" 7.0 | \n",
" | \n",
" NaN | \n",
@@ -1146,7 +1135,7 @@
" Stroll | \n",
" Lance Stroll | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/L/LANSTR01_Lance_Stroll/lanstr01.png.transform/1col/image.png | \n",
- " | \n",
+ " CAN | \n",
" 8.0 | \n",
" | \n",
" NaN | \n",
@@ -1170,7 +1159,7 @@
" Ocon | \n",
" Esteban Ocon | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/E/ESTOCO01_Esteban_Ocon/estoco01.png.transform/1col/image.png | \n",
- " | \n",
+ " FRA | \n",
" 9.0 | \n",
" | \n",
" NaN | \n",
@@ -1194,7 +1183,7 @@
" Hulkenberg | \n",
" Nico Hulkenberg | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/N/NICHUL01_Nico_Hulkenberg/nichul01.png.transform/1col/image.png | \n",
- " | \n",
+ " GER | \n",
" 10.0 | \n",
" | \n",
" NaN | \n",
@@ -1218,7 +1207,7 @@
" Norris | \n",
" Lando Norris | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/L/LANNOR01_Lando_Norris/lannor01.png.transform/1col/image.png | \n",
- " | \n",
+ " GBR | \n",
" 11.0 | \n",
" | \n",
" NaN | \n",
@@ -1242,7 +1231,7 @@
" Bottas | \n",
" Valtteri Bottas | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/V/VALBOT01_Valtteri_Bottas/valbot01.png.transform/1col/image.png | \n",
- " | \n",
+ " FIN | \n",
" 12.0 | \n",
" | \n",
" NaN | \n",
@@ -1266,7 +1255,7 @@
" Zhou | \n",
" Guanyu Zhou | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/G/GUAZHO01_Guanyu_Zhou/guazho01.png.transform/1col/image.png | \n",
- " | \n",
+ " CHN | \n",
" 13.0 | \n",
" | \n",
" NaN | \n",
@@ -1290,7 +1279,7 @@
" Tsunoda | \n",
" Yuki Tsunoda | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/Y/YUKTSU01_Yuki_Tsunoda/yuktsu01.png.transform/1col/image.png | \n",
- " | \n",
+ " JPN | \n",
" 14.0 | \n",
" | \n",
" NaN | \n",
@@ -1314,7 +1303,7 @@
" Albon | \n",
" Alexander Albon | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/A/ALEALB01_Alexander_Albon/alealb01.png.transform/1col/image.png | \n",
- " | \n",
+ " THA | \n",
" 15.0 | \n",
" | \n",
" NaN | \n",
@@ -1338,7 +1327,7 @@
" Sargeant | \n",
" Logan Sargeant | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/L/LOGSAR01_Logan_Sargeant/logsar01.png.transform/1col/image.png | \n",
- " | \n",
+ " USA | \n",
" 16.0 | \n",
" | \n",
" NaN | \n",
@@ -1362,7 +1351,7 @@
" Magnussen | \n",
" Kevin Magnussen | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/K/KEVMAG01_Kevin_Magnussen/kevmag01.png.transform/1col/image.png | \n",
- " | \n",
+ " DEN | \n",
" 17.0 | \n",
" | \n",
" NaN | \n",
@@ -1386,7 +1375,7 @@
" Piastri | \n",
" Oscar Piastri | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/O/OSCPIA01_Oscar_Piastri/oscpia01.png.transform/1col/image.png | \n",
- " | \n",
+ " AUS | \n",
" 18.0 | \n",
" | \n",
" NaN | \n",
@@ -1410,7 +1399,7 @@
" De Vries | \n",
" Nyck De Vries | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/N/NYCDEV01_Nyck_De%20Vries/nycdev01.png.transform/1col/image.png | \n",
- " | \n",
+ " NED | \n",
" 19.0 | \n",
" | \n",
" NaN | \n",
@@ -1434,7 +1423,7 @@
" Gasly | \n",
" Pierre Gasly | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/P/PIEGAS01_Pierre_Gasly/piegas01.png.transform/1col/image.png | \n",
- " | \n",
+ " FRA | \n",
" 20.0 | \n",
" | \n",
" NaN | \n",
@@ -1517,26 +1506,26 @@
"10 https://www.formula1.com/content/dam/fom-website/drivers/P/PIEGAS01_Pierre_Gasly/piegas01.png.transform/1col/image.png \n",
"\n",
" CountryCode Position ClassifiedPosition GridPosition \\\n",
- "1 1.0 NaN \n",
- "11 2.0 NaN \n",
- "16 3.0 NaN \n",
- "55 4.0 NaN \n",
- "14 5.0 NaN \n",
- "63 6.0 NaN \n",
- "44 7.0 NaN \n",
- "18 8.0 NaN \n",
- "31 9.0 NaN \n",
- "27 10.0 NaN \n",
- "4 11.0 NaN \n",
- "77 12.0 NaN \n",
- "24 13.0 NaN \n",
- "22 14.0 NaN \n",
- "23 15.0 NaN \n",
- "2 16.0 NaN \n",
- "20 17.0 NaN \n",
- "81 18.0 NaN \n",
- "21 19.0 NaN \n",
- "10 20.0 NaN \n",
+ "1 NED 1.0 NaN \n",
+ "11 MEX 2.0 NaN \n",
+ "16 MON 3.0 NaN \n",
+ "55 ESP 4.0 NaN \n",
+ "14 ESP 5.0 NaN \n",
+ "63 GBR 6.0 NaN \n",
+ "44 GBR 7.0 NaN \n",
+ "18 CAN 8.0 NaN \n",
+ "31 FRA 9.0 NaN \n",
+ "27 GER 10.0 NaN \n",
+ "4 GBR 11.0 NaN \n",
+ "77 FIN 12.0 NaN \n",
+ "24 CHN 13.0 NaN \n",
+ "22 JPN 14.0 NaN \n",
+ "23 THA 15.0 NaN \n",
+ "2 USA 16.0 NaN \n",
+ "20 DEN 17.0 NaN \n",
+ "81 AUS 18.0 NaN \n",
+ "21 NED 19.0 NaN \n",
+ "10 FRA 20.0 NaN \n",
"\n",
" Q1 Q2 Q3 Time \\\n",
"1 0 days 00:01:31.295000 0 days 00:01:30.503000 0 days 00:01:29.708000 NaT \n",
@@ -1583,7 +1572,7 @@
"10 NaN "
]
},
- "execution_count": 3,
+ "execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
@@ -1603,7 +1592,7 @@
},
{
"cell_type": "code",
- "execution_count": 4,
+ "execution_count": 14,
"id": "ea9e656e-5f0b-450c-a45d-83ecd55597af",
"metadata": {},
"outputs": [
@@ -1611,7 +1600,7 @@
"name": "stderr",
"output_type": "stream",
"text": [
- "core INFO \tLoading data for Bahrain Grand Prix - Race [v3.1.6]\n",
+ "core INFO \tLoading data for Bahrain Grand Prix - Race [v3.2.0]\n",
"req INFO \tUsing cached data for session_info\n",
"req INFO \tUsing cached data for driver_info\n",
"req INFO \tUsing cached data for session_status_data\n",
@@ -1685,7 +1674,7 @@
" Verstappen | \n",
" Max Verstappen | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/M/MAXVER01_Max_Verstappen/maxver01.png.transform/1col/image.png | \n",
- " | \n",
+ " NED | \n",
" 1.0 | \n",
" 1 | \n",
" 1.0 | \n",
@@ -1709,7 +1698,7 @@
" Perez | \n",
" Sergio Perez | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/S/SERPER01_Sergio_Perez/serper01.png.transform/1col/image.png | \n",
- " | \n",
+ " MEX | \n",
" 2.0 | \n",
" 2 | \n",
" 2.0 | \n",
@@ -1733,7 +1722,7 @@
" Alonso | \n",
" Fernando Alonso | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/F/FERALO01_Fernando_Alonso/feralo01.png.transform/1col/image.png | \n",
- " | \n",
+ " ESP | \n",
" 3.0 | \n",
" 3 | \n",
" 5.0 | \n",
@@ -1757,7 +1746,7 @@
" Sainz | \n",
" Carlos Sainz | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/C/CARSAI01_Carlos_Sainz/carsai01.png.transform/1col/image.png | \n",
- " | \n",
+ " ESP | \n",
" 4.0 | \n",
" 4 | \n",
" 4.0 | \n",
@@ -1781,7 +1770,7 @@
" Hamilton | \n",
" Lewis Hamilton | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/L/LEWHAM01_Lewis_Hamilton/lewham01.png.transform/1col/image.png | \n",
- " | \n",
+ " GBR | \n",
" 5.0 | \n",
" 5 | \n",
" 7.0 | \n",
@@ -1805,7 +1794,7 @@
" Stroll | \n",
" Lance Stroll | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/L/LANSTR01_Lance_Stroll/lanstr01.png.transform/1col/image.png | \n",
- " | \n",
+ " CAN | \n",
" 6.0 | \n",
" 6 | \n",
" 8.0 | \n",
@@ -1829,7 +1818,7 @@
" Russell | \n",
" George Russell | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/G/GEORUS01_George_Russell/georus01.png.transform/1col/image.png | \n",
- " | \n",
+ " GBR | \n",
" 7.0 | \n",
" 7 | \n",
" 6.0 | \n",
@@ -1853,7 +1842,7 @@
" Bottas | \n",
" Valtteri Bottas | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/V/VALBOT01_Valtteri_Bottas/valbot01.png.transform/1col/image.png | \n",
- " | \n",
+ " FIN | \n",
" 8.0 | \n",
" 8 | \n",
" 12.0 | \n",
@@ -1877,7 +1866,7 @@
" Gasly | \n",
" Pierre Gasly | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/P/PIEGAS01_Pierre_Gasly/piegas01.png.transform/1col/image.png | \n",
- " | \n",
+ " FRA | \n",
" 9.0 | \n",
" 9 | \n",
" 20.0 | \n",
@@ -1901,7 +1890,7 @@
" Albon | \n",
" Alexander Albon | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/A/ALEALB01_Alexander_Albon/alealb01.png.transform/1col/image.png | \n",
- " | \n",
+ " THA | \n",
" 10.0 | \n",
" 10 | \n",
" 15.0 | \n",
@@ -1925,7 +1914,7 @@
" Tsunoda | \n",
" Yuki Tsunoda | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/Y/YUKTSU01_Yuki_Tsunoda/yuktsu01.png.transform/1col/image.png | \n",
- " | \n",
+ " JPN | \n",
" 11.0 | \n",
" 11 | \n",
" 14.0 | \n",
@@ -1949,7 +1938,7 @@
" Sargeant | \n",
" Logan Sargeant | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/L/LOGSAR01_Logan_Sargeant/logsar01.png.transform/1col/image.png | \n",
- " | \n",
+ " USA | \n",
" 12.0 | \n",
" 12 | \n",
" 16.0 | \n",
@@ -1973,7 +1962,7 @@
" Magnussen | \n",
" Kevin Magnussen | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/K/KEVMAG01_Kevin_Magnussen/kevmag01.png.transform/1col/image.png | \n",
- " | \n",
+ " DEN | \n",
" 13.0 | \n",
" 13 | \n",
" 17.0 | \n",
@@ -1997,7 +1986,7 @@
" De Vries | \n",
" Nyck De Vries | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/N/NYCDEV01_Nyck_De%20Vries/nycdev01.png.transform/1col/image.png | \n",
- " | \n",
+ " NED | \n",
" 14.0 | \n",
" 14 | \n",
" 19.0 | \n",
@@ -2021,7 +2010,7 @@
" Hulkenberg | \n",
" Nico Hulkenberg | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/N/NICHUL01_Nico_Hulkenberg/nichul01.png.transform/1col/image.png | \n",
- " | \n",
+ " GER | \n",
" 15.0 | \n",
" 15 | \n",
" 10.0 | \n",
@@ -2045,7 +2034,7 @@
" Zhou | \n",
" Guanyu Zhou | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/G/GUAZHO01_Guanyu_Zhou/guazho01.png.transform/1col/image.png | \n",
- " | \n",
+ " CHN | \n",
" 16.0 | \n",
" 16 | \n",
" 13.0 | \n",
@@ -2069,7 +2058,7 @@
" Norris | \n",
" Lando Norris | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/L/LANNOR01_Lando_Norris/lannor01.png.transform/1col/image.png | \n",
- " | \n",
+ " GBR | \n",
" 17.0 | \n",
" 17 | \n",
" 11.0 | \n",
@@ -2093,7 +2082,7 @@
" Ocon | \n",
" Esteban Ocon | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/E/ESTOCO01_Esteban_Ocon/estoco01.png.transform/1col/image.png | \n",
- " | \n",
+ " FRA | \n",
" 18.0 | \n",
" R | \n",
" 9.0 | \n",
@@ -2117,7 +2106,7 @@
" Leclerc | \n",
" Charles Leclerc | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/C/CHALEC01_Charles_Leclerc/chalec01.png.transform/1col/image.png | \n",
- " | \n",
+ " MON | \n",
" 19.0 | \n",
" R | \n",
" 3.0 | \n",
@@ -2141,7 +2130,7 @@
" Piastri | \n",
" Oscar Piastri | \n",
" https://www.formula1.com/content/dam/fom-website/drivers/O/OSCPIA01_Oscar_Piastri/oscpia01.png.transform/1col/image.png | \n",
- " | \n",
+ " AUS | \n",
" 20.0 | \n",
" R | \n",
" 18.0 | \n",
@@ -2224,26 +2213,26 @@
"81 https://www.formula1.com/content/dam/fom-website/drivers/O/OSCPIA01_Oscar_Piastri/oscpia01.png.transform/1col/image.png \n",
"\n",
" CountryCode Position ClassifiedPosition GridPosition Q1 Q2 Q3 \\\n",
- "1 1.0 1 1.0 NaT NaT NaT \n",
- "11 2.0 2 2.0 NaT NaT NaT \n",
- "14 3.0 3 5.0 NaT NaT NaT \n",
- "55 4.0 4 4.0 NaT NaT NaT \n",
- "44 5.0 5 7.0 NaT NaT NaT \n",
- "18 6.0 6 8.0 NaT NaT NaT \n",
- "63 7.0 7 6.0 NaT NaT NaT \n",
- "77 8.0 8 12.0 NaT NaT NaT \n",
- "10 9.0 9 20.0 NaT NaT NaT \n",
- "23 10.0 10 15.0 NaT NaT NaT \n",
- "22 11.0 11 14.0 NaT NaT NaT \n",
- "2 12.0 12 16.0 NaT NaT NaT \n",
- "20 13.0 13 17.0 NaT NaT NaT \n",
- "21 14.0 14 19.0 NaT NaT NaT \n",
- "27 15.0 15 10.0 NaT NaT NaT \n",
- "24 16.0 16 13.0 NaT NaT NaT \n",
- "4 17.0 17 11.0 NaT NaT NaT \n",
- "31 18.0 R 9.0 NaT NaT NaT \n",
- "16 19.0 R 3.0 NaT NaT NaT \n",
- "81 20.0 R 18.0 NaT NaT NaT \n",
+ "1 NED 1.0 1 1.0 NaT NaT NaT \n",
+ "11 MEX 2.0 2 2.0 NaT NaT NaT \n",
+ "14 ESP 3.0 3 5.0 NaT NaT NaT \n",
+ "55 ESP 4.0 4 4.0 NaT NaT NaT \n",
+ "44 GBR 5.0 5 7.0 NaT NaT NaT \n",
+ "18 CAN 6.0 6 8.0 NaT NaT NaT \n",
+ "63 GBR 7.0 7 6.0 NaT NaT NaT \n",
+ "77 FIN 8.0 8 12.0 NaT NaT NaT \n",
+ "10 FRA 9.0 9 20.0 NaT NaT NaT \n",
+ "23 THA 10.0 10 15.0 NaT NaT NaT \n",
+ "22 JPN 11.0 11 14.0 NaT NaT NaT \n",
+ "2 USA 12.0 12 16.0 NaT NaT NaT \n",
+ "20 DEN 13.0 13 17.0 NaT NaT NaT \n",
+ "21 NED 14.0 14 19.0 NaT NaT NaT \n",
+ "27 GER 15.0 15 10.0 NaT NaT NaT \n",
+ "24 CHN 16.0 16 13.0 NaT NaT NaT \n",
+ "4 GBR 17.0 17 11.0 NaT NaT NaT \n",
+ "31 FRA 18.0 R 9.0 NaT NaT NaT \n",
+ "16 MON 19.0 R 3.0 NaT NaT NaT \n",
+ "81 AUS 20.0 R 18.0 NaT NaT NaT \n",
"\n",
" Time Status Points \n",
"1 0 days 01:33:56.736000 Finished 25.0 \n",
@@ -2268,7 +2257,7 @@
"81 NaT Electrical 0.0 "
]
},
- "execution_count": 4,
+ "execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
@@ -2286,7 +2275,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 15,
"id": "130a094d-3133-4d45-b0cf-b20f2ed9277d",
"metadata": {
"editable": true,
@@ -2838,7 +2827,7 @@
"[1056 rows x 31 columns]"
]
},
- "execution_count": 5,
+ "execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
@@ -2849,8 +2838,42 @@
},
{
"cell_type": "code",
- "execution_count": 6,
- "id": "79307aca-102e-4702-b5aa-6f59de44ec63",
+ "execution_count": null,
+ "id": "398816a5-113c-4126-b1de-405e2e9db390",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "{'Meeting': {'Key': 1141,\n",
+ " 'Name': 'Bahrain Grand Prix',\n",
+ " 'OfficialName': 'FORMULA 1 GULF AIR BAHRAIN GRAND PRIX 2023',\n",
+ " 'Location': 'Sakhir',\n",
+ " 'Country': {'Key': 36, 'Code': 'BRN', 'Name': 'Bahrain'},\n",
+ " 'Circuit': {'Key': 63, 'ShortName': 'Sakhir'}},\n",
+ " 'ArchiveStatus': {'Status': 'Generating'},\n",
+ " 'Key': 7953,\n",
+ " 'Type': 'Race',\n",
+ " 'Name': 'Race',\n",
+ " 'StartDate': datetime.datetime(2023, 3, 5, 18, 0),\n",
+ " 'EndDate': datetime.datetime(2023, 3, 5, 20, 0),\n",
+ " 'GmtOffset': datetime.timedelta(seconds=10800),\n",
+ " 'Path': '2023/2023-03-05_Bahrain_Grand_Prix/2023-03-05_Race/'}"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "race_event.session_info"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "cdc295cb-37a3-493c-acec-557aee7dc8e5",
"metadata": {},
"outputs": [
{
@@ -2874,1463 +2897,77 @@
" \n",
" \n",
" | \n",
- " position | \n",
- " positionText | \n",
- " points | \n",
- " wins | \n",
- " driverId | \n",
- " driverNumber | \n",
- " driverCode | \n",
- " driverUrl | \n",
- " givenName | \n",
- " familyName | \n",
- " dateOfBirth | \n",
- " driverNationality | \n",
- " constructorIds | \n",
- " constructorUrls | \n",
- " constructorNames | \n",
- " constructorNationalities | \n",
+ " Time | \n",
+ " Status | \n",
+ " Message | \n",
"
\n",
" \n",
" \n",
" \n",
" 0 | \n",
+ " 0 days 00:05:28.637000 | \n",
" 1 | \n",
- " 1 | \n",
- " 119.0 | \n",
- " 3 | \n",
- " max_verstappen | \n",
- " 33 | \n",
- " VER | \n",
- " http://en.wikipedia.org/wiki/Max_Verstappen | \n",
- " Max | \n",
- " Verstappen | \n",
- " 1997-09-30 | \n",
- " Dutch | \n",
- " [red_bull] | \n",
- " [http://en.wikipedia.org/wiki/Red_Bull_Racing] | \n",
- " [Red Bull] | \n",
- " [Austrian] | \n",
+ " AllClear | \n",
"
\n",
" \n",
" 1 | \n",
+ " 0 days 00:21:59.040000 | \n",
" 2 | \n",
- " 2 | \n",
- " 105.0 | \n",
- " 2 | \n",
- " perez | \n",
- " 11 | \n",
- " PER | \n",
- " http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez | \n",
- " Sergio | \n",
- " Pérez | \n",
- " 1990-01-26 | \n",
- " Mexican | \n",
- " [red_bull] | \n",
- " [http://en.wikipedia.org/wiki/Red_Bull_Racing] | \n",
- " [Red Bull] | \n",
- " [Austrian] | \n",
+ " Yellow | \n",
"
\n",
" \n",
" 2 | \n",
- " 3 | \n",
- " 3 | \n",
- " 75.0 | \n",
- " 0 | \n",
- " alonso | \n",
- " 14 | \n",
- " ALO | \n",
- " http://en.wikipedia.org/wiki/Fernando_Alonso | \n",
- " Fernando | \n",
- " Alonso | \n",
- " 1981-07-29 | \n",
- " Spanish | \n",
- " [aston_martin] | \n",
- " [http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One] | \n",
- " [Aston Martin] | \n",
- " [British] | \n",
+ " 0 days 00:22:03.165000 | \n",
+ " 1 | \n",
+ " AllClear | \n",
"
\n",
" \n",
" 3 | \n",
- " 4 | \n",
- " 4 | \n",
- " 56.0 | \n",
- " 0 | \n",
- " hamilton | \n",
- " 44 | \n",
- " HAM | \n",
- " http://en.wikipedia.org/wiki/Lewis_Hamilton | \n",
- " Lewis | \n",
- " Hamilton | \n",
- " 1985-01-07 | \n",
- " British | \n",
- " [mercedes] | \n",
- " [http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One] | \n",
- " [Mercedes] | \n",
- " [German] | \n",
+ " 0 days 01:03:07.651000 | \n",
+ " 2 | \n",
+ " Yellow | \n",
"
\n",
" \n",
" 4 | \n",
- " 5 | \n",
- " 5 | \n",
- " 44.0 | \n",
- " 0 | \n",
- " sainz | \n",
- " 55 | \n",
- " SAI | \n",
- " http://en.wikipedia.org/wiki/Carlos_Sainz_Jr. | \n",
- " Carlos | \n",
- " Sainz | \n",
- " 1994-09-01 | \n",
- " Spanish | \n",
- " [ferrari] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_Ferrari] | \n",
- " [Ferrari] | \n",
- " [Italian] | \n",
+ " 0 days 01:03:08.151000 | \n",
+ " 1 | \n",
+ " AllClear | \n",
"
\n",
" \n",
" 5 | \n",
- " 6 | \n",
- " 6 | \n",
- " 40.0 | \n",
- " 0 | \n",
- " russell | \n",
- " 63 | \n",
- " RUS | \n",
- " http://en.wikipedia.org/wiki/George_Russell_(racing_driver) | \n",
- " George | \n",
- " Russell | \n",
- " 1998-02-15 | \n",
- " British | \n",
- " [mercedes] | \n",
- " [http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One] | \n",
- " [Mercedes] | \n",
- " [German] | \n",
+ " 0 days 01:04:15.978000 | \n",
+ " 2 | \n",
+ " Yellow | \n",
"
\n",
" \n",
" 6 | \n",
- " 7 | \n",
- " 7 | \n",
- " 34.0 | \n",
- " 0 | \n",
- " leclerc | \n",
- " 16 | \n",
- " LEC | \n",
- " http://en.wikipedia.org/wiki/Charles_Leclerc | \n",
- " Charles | \n",
- " Leclerc | \n",
- " 1997-10-16 | \n",
- " Monegasque | \n",
- " [ferrari] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_Ferrari] | \n",
- " [Ferrari] | \n",
- " [Italian] | \n",
+ " 0 days 01:04:51.243000 | \n",
+ " 1 | \n",
+ " AllClear | \n",
"
\n",
" \n",
" 7 | \n",
- " 8 | \n",
- " 8 | \n",
- " 27.0 | \n",
- " 0 | \n",
- " stroll | \n",
- " 18 | \n",
- " STR | \n",
- " http://en.wikipedia.org/wiki/Lance_Stroll | \n",
- " Lance | \n",
- " Stroll | \n",
- " 1998-10-29 | \n",
- " Canadian | \n",
- " [aston_martin] | \n",
- " [http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One] | \n",
- " [Aston Martin] | \n",
- " [British] | \n",
+ " 0 days 02:08:59.830000 | \n",
+ " 2 | \n",
+ " Yellow | \n",
"
\n",
" \n",
" 8 | \n",
- " 9 | \n",
- " 9 | \n",
- " 10.0 | \n",
- " 0 | \n",
- " norris | \n",
- " 4 | \n",
- " NOR | \n",
- " http://en.wikipedia.org/wiki/Lando_Norris | \n",
- " Lando | \n",
- " Norris | \n",
- " 1999-11-13 | \n",
- " British | \n",
- " [mclaren] | \n",
- " [http://en.wikipedia.org/wiki/McLaren] | \n",
- " [McLaren] | \n",
- " [British] | \n",
+ " 0 days 02:09:18.298000 | \n",
+ " 6 | \n",
+ " VSCDeployed | \n",
"
\n",
" \n",
" 9 | \n",
- " 10 | \n",
- " 10 | \n",
- " 8.0 | \n",
- " 0 | \n",
- " gasly | \n",
- " 10 | \n",
- " GAS | \n",
- " http://en.wikipedia.org/wiki/Pierre_Gasly | \n",
- " Pierre | \n",
- " Gasly | \n",
- " 1996-02-07 | \n",
- " French | \n",
- " [alpine] | \n",
- " [http://en.wikipedia.org/wiki/Alpine_F1_Team] | \n",
- " [Alpine F1 Team] | \n",
- " [French] | \n",
+ " 0 days 02:10:53.875000 | \n",
+ " 7 | \n",
+ " VSCEnding | \n",
"
\n",
" \n",
" 10 | \n",
- " 11 | \n",
- " 11 | \n",
- " 6.0 | \n",
- " 0 | \n",
- " hulkenberg | \n",
- " 27 | \n",
- " HUL | \n",
- " http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg | \n",
- " Nico | \n",
- " Hülkenberg | \n",
- " 1987-08-19 | \n",
- " German | \n",
- " [haas] | \n",
- " [http://en.wikipedia.org/wiki/Haas_F1_Team] | \n",
- " [Haas F1 Team] | \n",
- " [American] | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 12 | \n",
- " 12 | \n",
- " 6.0 | \n",
- " 0 | \n",
- " ocon | \n",
- " 31 | \n",
- " OCO | \n",
- " http://en.wikipedia.org/wiki/Esteban_Ocon | \n",
- " Esteban | \n",
- " Ocon | \n",
- " 1996-09-17 | \n",
- " French | \n",
- " [alpine] | \n",
- " [http://en.wikipedia.org/wiki/Alpine_F1_Team] | \n",
- " [Alpine F1 Team] | \n",
- " [French] | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 13 | \n",
- " 13 | \n",
- " 4.0 | \n",
- " 0 | \n",
- " bottas | \n",
- " 77 | \n",
- " BOT | \n",
- " http://en.wikipedia.org/wiki/Valtteri_Bottas | \n",
- " Valtteri | \n",
- " Bottas | \n",
- " 1989-08-28 | \n",
- " Finnish | \n",
- " [alfa] | \n",
- " [http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One] | \n",
- " [Alfa Romeo] | \n",
- " [Swiss] | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 14 | \n",
- " 14 | \n",
- " 4.0 | \n",
- " 0 | \n",
- " piastri | \n",
- " 81 | \n",
- " PIA | \n",
- " http://en.wikipedia.org/wiki/Oscar_Piastri | \n",
- " Oscar | \n",
- " Piastri | \n",
- " 2001-04-06 | \n",
- " Australian | \n",
- " [mclaren] | \n",
- " [http://en.wikipedia.org/wiki/McLaren] | \n",
- " [McLaren] | \n",
- " [British] | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 15 | \n",
- " 15 | \n",
- " 2.0 | \n",
- " 0 | \n",
- " zhou | \n",
- " 24 | \n",
- " ZHO | \n",
- " http://en.wikipedia.org/wiki/Zhou_Guanyu | \n",
- " Guanyu | \n",
- " Zhou | \n",
- " 1999-05-30 | \n",
- " Chinese | \n",
- " [alfa] | \n",
- " [http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One] | \n",
- " [Alfa Romeo] | \n",
- " [Swiss] | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 16 | \n",
- " 16 | \n",
- " 2.0 | \n",
- " 0 | \n",
- " tsunoda | \n",
- " 22 | \n",
- " TSU | \n",
- " http://en.wikipedia.org/wiki/Yuki_Tsunoda | \n",
- " Yuki | \n",
- " Tsunoda | \n",
- " 2000-05-11 | \n",
- " Japanese | \n",
- " [alphatauri] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] | \n",
- " [AlphaTauri] | \n",
- " [Italian] | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 17 | \n",
- " 17 | \n",
- " 2.0 | \n",
- " 0 | \n",
- " kevin_magnussen | \n",
- " 20 | \n",
- " MAG | \n",
- " http://en.wikipedia.org/wiki/Kevin_Magnussen | \n",
- " Kevin | \n",
- " Magnussen | \n",
- " 1992-10-05 | \n",
- " Danish | \n",
- " [haas] | \n",
- " [http://en.wikipedia.org/wiki/Haas_F1_Team] | \n",
- " [Haas F1 Team] | \n",
- " [American] | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 18 | \n",
- " 18 | \n",
- " 1.0 | \n",
- " 0 | \n",
- " albon | \n",
- " 23 | \n",
- " ALB | \n",
- " http://en.wikipedia.org/wiki/Alexander_Albon | \n",
- " Alexander | \n",
- " Albon | \n",
- " 1996-03-23 | \n",
- " Thai | \n",
- " [williams] | \n",
- " [http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering] | \n",
- " [Williams] | \n",
- " [British] | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 19 | \n",
- " 19 | \n",
- " 0.0 | \n",
- " 0 | \n",
- " sargeant | \n",
- " 2 | \n",
- " SAR | \n",
- " http://en.wikipedia.org/wiki/Logan_Sargeant | \n",
- " Logan | \n",
- " Sargeant | \n",
- " 2000-12-31 | \n",
- " American | \n",
- " [williams] | \n",
- " [http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering] | \n",
- " [Williams] | \n",
- " [British] | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 20 | \n",
- " 20 | \n",
- " 0.0 | \n",
- " 0 | \n",
- " de_vries | \n",
- " 21 | \n",
- " DEV | \n",
- " http://en.wikipedia.org/wiki/Nyck_de_Vries | \n",
- " Nyck | \n",
- " de Vries | \n",
- " 1995-02-06 | \n",
- " Dutch | \n",
- " [alphatauri] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] | \n",
- " [AlphaTauri] | \n",
- " [Italian] | \n",
- "
\n",
- " \n",
- "\n",
- ""
- ],
- "text/plain": [
- " position positionText points wins driverId driverNumber \\\n",
- "0 1 1 119.0 3 max_verstappen 33 \n",
- "1 2 2 105.0 2 perez 11 \n",
- "2 3 3 75.0 0 alonso 14 \n",
- "3 4 4 56.0 0 hamilton 44 \n",
- "4 5 5 44.0 0 sainz 55 \n",
- "5 6 6 40.0 0 russell 63 \n",
- "6 7 7 34.0 0 leclerc 16 \n",
- "7 8 8 27.0 0 stroll 18 \n",
- "8 9 9 10.0 0 norris 4 \n",
- "9 10 10 8.0 0 gasly 10 \n",
- "10 11 11 6.0 0 hulkenberg 27 \n",
- "11 12 12 6.0 0 ocon 31 \n",
- "12 13 13 4.0 0 bottas 77 \n",
- "13 14 14 4.0 0 piastri 81 \n",
- "14 15 15 2.0 0 zhou 24 \n",
- "15 16 16 2.0 0 tsunoda 22 \n",
- "16 17 17 2.0 0 kevin_magnussen 20 \n",
- "17 18 18 1.0 0 albon 23 \n",
- "18 19 19 0.0 0 sargeant 2 \n",
- "19 20 20 0.0 0 de_vries 21 \n",
- "\n",
- " driverCode driverUrl \\\n",
- "0 VER http://en.wikipedia.org/wiki/Max_Verstappen \n",
- "1 PER http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez \n",
- "2 ALO http://en.wikipedia.org/wiki/Fernando_Alonso \n",
- "3 HAM http://en.wikipedia.org/wiki/Lewis_Hamilton \n",
- "4 SAI http://en.wikipedia.org/wiki/Carlos_Sainz_Jr. \n",
- "5 RUS http://en.wikipedia.org/wiki/George_Russell_(racing_driver) \n",
- "6 LEC http://en.wikipedia.org/wiki/Charles_Leclerc \n",
- "7 STR http://en.wikipedia.org/wiki/Lance_Stroll \n",
- "8 NOR http://en.wikipedia.org/wiki/Lando_Norris \n",
- "9 GAS http://en.wikipedia.org/wiki/Pierre_Gasly \n",
- "10 HUL http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg \n",
- "11 OCO http://en.wikipedia.org/wiki/Esteban_Ocon \n",
- "12 BOT http://en.wikipedia.org/wiki/Valtteri_Bottas \n",
- "13 PIA http://en.wikipedia.org/wiki/Oscar_Piastri \n",
- "14 ZHO http://en.wikipedia.org/wiki/Zhou_Guanyu \n",
- "15 TSU http://en.wikipedia.org/wiki/Yuki_Tsunoda \n",
- "16 MAG http://en.wikipedia.org/wiki/Kevin_Magnussen \n",
- "17 ALB http://en.wikipedia.org/wiki/Alexander_Albon \n",
- "18 SAR http://en.wikipedia.org/wiki/Logan_Sargeant \n",
- "19 DEV http://en.wikipedia.org/wiki/Nyck_de_Vries \n",
- "\n",
- " givenName familyName dateOfBirth driverNationality constructorIds \\\n",
- "0 Max Verstappen 1997-09-30 Dutch [red_bull] \n",
- "1 Sergio Pérez 1990-01-26 Mexican [red_bull] \n",
- "2 Fernando Alonso 1981-07-29 Spanish [aston_martin] \n",
- "3 Lewis Hamilton 1985-01-07 British [mercedes] \n",
- "4 Carlos Sainz 1994-09-01 Spanish [ferrari] \n",
- "5 George Russell 1998-02-15 British [mercedes] \n",
- "6 Charles Leclerc 1997-10-16 Monegasque [ferrari] \n",
- "7 Lance Stroll 1998-10-29 Canadian [aston_martin] \n",
- "8 Lando Norris 1999-11-13 British [mclaren] \n",
- "9 Pierre Gasly 1996-02-07 French [alpine] \n",
- "10 Nico Hülkenberg 1987-08-19 German [haas] \n",
- "11 Esteban Ocon 1996-09-17 French [alpine] \n",
- "12 Valtteri Bottas 1989-08-28 Finnish [alfa] \n",
- "13 Oscar Piastri 2001-04-06 Australian [mclaren] \n",
- "14 Guanyu Zhou 1999-05-30 Chinese [alfa] \n",
- "15 Yuki Tsunoda 2000-05-11 Japanese [alphatauri] \n",
- "16 Kevin Magnussen 1992-10-05 Danish [haas] \n",
- "17 Alexander Albon 1996-03-23 Thai [williams] \n",
- "18 Logan Sargeant 2000-12-31 American [williams] \n",
- "19 Nyck de Vries 1995-02-06 Dutch [alphatauri] \n",
- "\n",
- " constructorUrls \\\n",
- "0 [http://en.wikipedia.org/wiki/Red_Bull_Racing] \n",
- "1 [http://en.wikipedia.org/wiki/Red_Bull_Racing] \n",
- "2 [http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One] \n",
- "3 [http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One] \n",
- "4 [http://en.wikipedia.org/wiki/Scuderia_Ferrari] \n",
- "5 [http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One] \n",
- "6 [http://en.wikipedia.org/wiki/Scuderia_Ferrari] \n",
- "7 [http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One] \n",
- "8 [http://en.wikipedia.org/wiki/McLaren] \n",
- "9 [http://en.wikipedia.org/wiki/Alpine_F1_Team] \n",
- "10 [http://en.wikipedia.org/wiki/Haas_F1_Team] \n",
- "11 [http://en.wikipedia.org/wiki/Alpine_F1_Team] \n",
- "12 [http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One] \n",
- "13 [http://en.wikipedia.org/wiki/McLaren] \n",
- "14 [http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One] \n",
- "15 [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] \n",
- "16 [http://en.wikipedia.org/wiki/Haas_F1_Team] \n",
- "17 [http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering] \n",
- "18 [http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering] \n",
- "19 [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] \n",
- "\n",
- " constructorNames constructorNationalities \n",
- "0 [Red Bull] [Austrian] \n",
- "1 [Red Bull] [Austrian] \n",
- "2 [Aston Martin] [British] \n",
- "3 [Mercedes] [German] \n",
- "4 [Ferrari] [Italian] \n",
- "5 [Mercedes] [German] \n",
- "6 [Ferrari] [Italian] \n",
- "7 [Aston Martin] [British] \n",
- "8 [McLaren] [British] \n",
- "9 [Alpine F1 Team] [French] \n",
- "10 [Haas F1 Team] [American] \n",
- "11 [Alpine F1 Team] [French] \n",
- "12 [Alfa Romeo] [Swiss] \n",
- "13 [McLaren] [British] \n",
- "14 [Alfa Romeo] [Swiss] \n",
- "15 [AlphaTauri] [Italian] \n",
- "16 [Haas F1 Team] [American] \n",
- "17 [Williams] [British] \n",
- "18 [Williams] [British] \n",
- "19 [AlphaTauri] [Italian] "
- ]
- },
- "execution_count": 6,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "driver_standings_2023_miami = ergast.get_driver_standings(season=2023, round=5)\n",
- "driver_standings_2023_miami.content[0]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 7,
- "id": "096a3800-c715-4a2a-ac40-983dad569237",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " position | \n",
- " positionText | \n",
- " points | \n",
- " wins | \n",
- " driverId | \n",
- " driverNumber | \n",
- " driverCode | \n",
- " driverUrl | \n",
- " givenName | \n",
- " familyName | \n",
- " dateOfBirth | \n",
- " driverNationality | \n",
- " constructorIds | \n",
- " constructorUrls | \n",
- " constructorNames | \n",
- " constructorNationalities | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 575.0 | \n",
- " 19 | \n",
- " max_verstappen | \n",
- " 33 | \n",
- " VER | \n",
- " http://en.wikipedia.org/wiki/Max_Verstappen | \n",
- " Max | \n",
- " Verstappen | \n",
- " 1997-09-30 | \n",
- " Dutch | \n",
- " [red_bull] | \n",
- " [http://en.wikipedia.org/wiki/Red_Bull_Racing] | \n",
- " [Red Bull] | \n",
- " [Austrian] | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- " 285.0 | \n",
- " 2 | \n",
- " perez | \n",
- " 11 | \n",
- " PER | \n",
- " http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez | \n",
- " Sergio | \n",
- " Pérez | \n",
- " 1990-01-26 | \n",
- " Mexican | \n",
- " [red_bull] | \n",
- " [http://en.wikipedia.org/wiki/Red_Bull_Racing] | \n",
- " [Red Bull] | \n",
- " [Austrian] | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 3 | \n",
- " 234.0 | \n",
- " 0 | \n",
- " hamilton | \n",
- " 44 | \n",
- " HAM | \n",
- " http://en.wikipedia.org/wiki/Lewis_Hamilton | \n",
- " Lewis | \n",
- " Hamilton | \n",
- " 1985-01-07 | \n",
- " British | \n",
- " [mercedes] | \n",
- " [http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One] | \n",
- " [Mercedes] | \n",
- " [German] | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 4 | \n",
- " 206.0 | \n",
- " 0 | \n",
- " alonso | \n",
- " 14 | \n",
- " ALO | \n",
- " http://en.wikipedia.org/wiki/Fernando_Alonso | \n",
- " Fernando | \n",
- " Alonso | \n",
- " 1981-07-29 | \n",
- " Spanish | \n",
- " [aston_martin] | \n",
- " [http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One] | \n",
- " [Aston Martin] | \n",
- " [British] | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 5 | \n",
- " 206.0 | \n",
- " 0 | \n",
- " leclerc | \n",
- " 16 | \n",
- " LEC | \n",
- " http://en.wikipedia.org/wiki/Charles_Leclerc | \n",
- " Charles | \n",
- " Leclerc | \n",
- " 1997-10-16 | \n",
- " Monegasque | \n",
- " [ferrari] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_Ferrari] | \n",
- " [Ferrari] | \n",
- " [Italian] | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 6 | \n",
- " 205.0 | \n",
- " 0 | \n",
- " norris | \n",
- " 4 | \n",
- " NOR | \n",
- " http://en.wikipedia.org/wiki/Lando_Norris | \n",
- " Lando | \n",
- " Norris | \n",
- " 1999-11-13 | \n",
- " British | \n",
- " [mclaren] | \n",
- " [http://en.wikipedia.org/wiki/McLaren] | \n",
- " [McLaren] | \n",
- " [British] | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 7 | \n",
- " 200.0 | \n",
- " 1 | \n",
- " sainz | \n",
- " 55 | \n",
- " SAI | \n",
- " http://en.wikipedia.org/wiki/Carlos_Sainz_Jr. | \n",
- " Carlos | \n",
- " Sainz | \n",
- " 1994-09-01 | \n",
- " Spanish | \n",
- " [ferrari] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_Ferrari] | \n",
- " [Ferrari] | \n",
- " [Italian] | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 8 | \n",
- " 175.0 | \n",
- " 0 | \n",
- " russell | \n",
- " 63 | \n",
- " RUS | \n",
- " http://en.wikipedia.org/wiki/George_Russell_(racing_driver) | \n",
- " George | \n",
- " Russell | \n",
- " 1998-02-15 | \n",
- " British | \n",
- " [mercedes] | \n",
- " [http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One] | \n",
- " [Mercedes] | \n",
- " [German] | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 9 | \n",
- " 9 | \n",
- " 97.0 | \n",
- " 0 | \n",
- " piastri | \n",
- " 81 | \n",
- " PIA | \n",
- " http://en.wikipedia.org/wiki/Oscar_Piastri | \n",
- " Oscar | \n",
- " Piastri | \n",
- " 2001-04-06 | \n",
- " Australian | \n",
- " [mclaren] | \n",
- " [http://en.wikipedia.org/wiki/McLaren] | \n",
- " [McLaren] | \n",
- " [British] | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 10 | \n",
- " 10 | \n",
- " 74.0 | \n",
- " 0 | \n",
- " stroll | \n",
- " 18 | \n",
- " STR | \n",
- " http://en.wikipedia.org/wiki/Lance_Stroll | \n",
- " Lance | \n",
- " Stroll | \n",
- " 1998-10-29 | \n",
- " Canadian | \n",
- " [aston_martin] | \n",
- " [http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One] | \n",
- " [Aston Martin] | \n",
- " [British] | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 11 | \n",
- " 11 | \n",
- " 62.0 | \n",
- " 0 | \n",
- " gasly | \n",
- " 10 | \n",
- " GAS | \n",
- " http://en.wikipedia.org/wiki/Pierre_Gasly | \n",
- " Pierre | \n",
- " Gasly | \n",
- " 1996-02-07 | \n",
- " French | \n",
- " [alpine] | \n",
- " [http://en.wikipedia.org/wiki/Alpine_F1_Team] | \n",
- " [Alpine F1 Team] | \n",
- " [French] | \n",
- "
\n",
- " \n",
- " 11 | \n",
- " 12 | \n",
- " 12 | \n",
- " 58.0 | \n",
- " 0 | \n",
- " ocon | \n",
- " 31 | \n",
- " OCO | \n",
- " http://en.wikipedia.org/wiki/Esteban_Ocon | \n",
- " Esteban | \n",
- " Ocon | \n",
- " 1996-09-17 | \n",
- " French | \n",
- " [alpine] | \n",
- " [http://en.wikipedia.org/wiki/Alpine_F1_Team] | \n",
- " [Alpine F1 Team] | \n",
- " [French] | \n",
- "
\n",
- " \n",
- " 12 | \n",
- " 13 | \n",
- " 13 | \n",
- " 27.0 | \n",
- " 0 | \n",
- " albon | \n",
- " 23 | \n",
- " ALB | \n",
- " http://en.wikipedia.org/wiki/Alexander_Albon | \n",
- " Alexander | \n",
- " Albon | \n",
- " 1996-03-23 | \n",
- " Thai | \n",
- " [williams] | \n",
- " [http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering] | \n",
- " [Williams] | \n",
- " [British] | \n",
- "
\n",
- " \n",
- " 13 | \n",
- " 14 | \n",
- " 14 | \n",
- " 17.0 | \n",
- " 0 | \n",
- " tsunoda | \n",
- " 22 | \n",
- " TSU | \n",
- " http://en.wikipedia.org/wiki/Yuki_Tsunoda | \n",
- " Yuki | \n",
- " Tsunoda | \n",
- " 2000-05-11 | \n",
- " Japanese | \n",
- " [alphatauri] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] | \n",
- " [AlphaTauri] | \n",
- " [Italian] | \n",
- "
\n",
- " \n",
- " 14 | \n",
- " 15 | \n",
- " 15 | \n",
- " 10.0 | \n",
- " 0 | \n",
- " bottas | \n",
- " 77 | \n",
- " BOT | \n",
- " http://en.wikipedia.org/wiki/Valtteri_Bottas | \n",
- " Valtteri | \n",
- " Bottas | \n",
- " 1989-08-28 | \n",
- " Finnish | \n",
- " [alfa] | \n",
- " [http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One] | \n",
- " [Alfa Romeo] | \n",
- " [Swiss] | \n",
- "
\n",
- " \n",
- " 15 | \n",
- " 16 | \n",
- " 16 | \n",
- " 9.0 | \n",
- " 0 | \n",
- " hulkenberg | \n",
- " 27 | \n",
- " HUL | \n",
- " http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg | \n",
- " Nico | \n",
- " Hülkenberg | \n",
- " 1987-08-19 | \n",
- " German | \n",
- " [haas] | \n",
- " [http://en.wikipedia.org/wiki/Haas_F1_Team] | \n",
- " [Haas F1 Team] | \n",
- " [American] | \n",
- "
\n",
- " \n",
- " 16 | \n",
- " 17 | \n",
- " 17 | \n",
- " 6.0 | \n",
- " 0 | \n",
- " ricciardo | \n",
- " 3 | \n",
- " RIC | \n",
- " http://en.wikipedia.org/wiki/Daniel_Ricciardo | \n",
- " Daniel | \n",
- " Ricciardo | \n",
- " 1989-07-01 | \n",
- " Australian | \n",
- " [alphatauri] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] | \n",
- " [AlphaTauri] | \n",
- " [Italian] | \n",
- "
\n",
- " \n",
- " 17 | \n",
- " 18 | \n",
- " 18 | \n",
- " 6.0 | \n",
- " 0 | \n",
- " zhou | \n",
- " 24 | \n",
- " ZHO | \n",
- " http://en.wikipedia.org/wiki/Zhou_Guanyu | \n",
- " Guanyu | \n",
- " Zhou | \n",
- " 1999-05-30 | \n",
- " Chinese | \n",
- " [alfa] | \n",
- " [http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One] | \n",
- " [Alfa Romeo] | \n",
- " [Swiss] | \n",
- "
\n",
- " \n",
- " 18 | \n",
- " 19 | \n",
- " 19 | \n",
- " 3.0 | \n",
- " 0 | \n",
- " kevin_magnussen | \n",
- " 20 | \n",
- " MAG | \n",
- " http://en.wikipedia.org/wiki/Kevin_Magnussen | \n",
- " Kevin | \n",
- " Magnussen | \n",
- " 1992-10-05 | \n",
- " Danish | \n",
- " [haas] | \n",
- " [http://en.wikipedia.org/wiki/Haas_F1_Team] | \n",
- " [Haas F1 Team] | \n",
- " [American] | \n",
- "
\n",
- " \n",
- " 19 | \n",
- " 20 | \n",
- " 20 | \n",
- " 2.0 | \n",
- " 0 | \n",
- " lawson | \n",
- " 40 | \n",
- " LAW | \n",
- " http://en.wikipedia.org/wiki/Liam_Lawson | \n",
- " Liam | \n",
- " Lawson | \n",
- " 2002-02-11 | \n",
- " New Zealander | \n",
- " [alphatauri] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] | \n",
- " [AlphaTauri] | \n",
- " [Italian] | \n",
- "
\n",
- " \n",
- " 20 | \n",
- " 21 | \n",
- " 21 | \n",
- " 1.0 | \n",
- " 0 | \n",
- " sargeant | \n",
- " 2 | \n",
- " SAR | \n",
- " http://en.wikipedia.org/wiki/Logan_Sargeant | \n",
- " Logan | \n",
- " Sargeant | \n",
- " 2000-12-31 | \n",
- " American | \n",
- " [williams] | \n",
- " [http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering] | \n",
- " [Williams] | \n",
- " [British] | \n",
- "
\n",
- " \n",
- " 21 | \n",
- " 22 | \n",
- " 22 | \n",
- " 0.0 | \n",
- " 0 | \n",
- " de_vries | \n",
- " 21 | \n",
- " DEV | \n",
- " http://en.wikipedia.org/wiki/Nyck_de_Vries | \n",
- " Nyck | \n",
- " de Vries | \n",
- " 1995-02-06 | \n",
- " Dutch | \n",
- " [alphatauri] | \n",
- " [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] | \n",
- " [AlphaTauri] | \n",
- " [Italian] | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " position positionText points wins driverId driverNumber \\\n",
- "0 1 1 575.0 19 max_verstappen 33 \n",
- "1 2 2 285.0 2 perez 11 \n",
- "2 3 3 234.0 0 hamilton 44 \n",
- "3 4 4 206.0 0 alonso 14 \n",
- "4 5 5 206.0 0 leclerc 16 \n",
- "5 6 6 205.0 0 norris 4 \n",
- "6 7 7 200.0 1 sainz 55 \n",
- "7 8 8 175.0 0 russell 63 \n",
- "8 9 9 97.0 0 piastri 81 \n",
- "9 10 10 74.0 0 stroll 18 \n",
- "10 11 11 62.0 0 gasly 10 \n",
- "11 12 12 58.0 0 ocon 31 \n",
- "12 13 13 27.0 0 albon 23 \n",
- "13 14 14 17.0 0 tsunoda 22 \n",
- "14 15 15 10.0 0 bottas 77 \n",
- "15 16 16 9.0 0 hulkenberg 27 \n",
- "16 17 17 6.0 0 ricciardo 3 \n",
- "17 18 18 6.0 0 zhou 24 \n",
- "18 19 19 3.0 0 kevin_magnussen 20 \n",
- "19 20 20 2.0 0 lawson 40 \n",
- "20 21 21 1.0 0 sargeant 2 \n",
- "21 22 22 0.0 0 de_vries 21 \n",
- "\n",
- " driverCode driverUrl \\\n",
- "0 VER http://en.wikipedia.org/wiki/Max_Verstappen \n",
- "1 PER http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez \n",
- "2 HAM http://en.wikipedia.org/wiki/Lewis_Hamilton \n",
- "3 ALO http://en.wikipedia.org/wiki/Fernando_Alonso \n",
- "4 LEC http://en.wikipedia.org/wiki/Charles_Leclerc \n",
- "5 NOR http://en.wikipedia.org/wiki/Lando_Norris \n",
- "6 SAI http://en.wikipedia.org/wiki/Carlos_Sainz_Jr. \n",
- "7 RUS http://en.wikipedia.org/wiki/George_Russell_(racing_driver) \n",
- "8 PIA http://en.wikipedia.org/wiki/Oscar_Piastri \n",
- "9 STR http://en.wikipedia.org/wiki/Lance_Stroll \n",
- "10 GAS http://en.wikipedia.org/wiki/Pierre_Gasly \n",
- "11 OCO http://en.wikipedia.org/wiki/Esteban_Ocon \n",
- "12 ALB http://en.wikipedia.org/wiki/Alexander_Albon \n",
- "13 TSU http://en.wikipedia.org/wiki/Yuki_Tsunoda \n",
- "14 BOT http://en.wikipedia.org/wiki/Valtteri_Bottas \n",
- "15 HUL http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg \n",
- "16 RIC http://en.wikipedia.org/wiki/Daniel_Ricciardo \n",
- "17 ZHO http://en.wikipedia.org/wiki/Zhou_Guanyu \n",
- "18 MAG http://en.wikipedia.org/wiki/Kevin_Magnussen \n",
- "19 LAW http://en.wikipedia.org/wiki/Liam_Lawson \n",
- "20 SAR http://en.wikipedia.org/wiki/Logan_Sargeant \n",
- "21 DEV http://en.wikipedia.org/wiki/Nyck_de_Vries \n",
- "\n",
- " givenName familyName dateOfBirth driverNationality constructorIds \\\n",
- "0 Max Verstappen 1997-09-30 Dutch [red_bull] \n",
- "1 Sergio Pérez 1990-01-26 Mexican [red_bull] \n",
- "2 Lewis Hamilton 1985-01-07 British [mercedes] \n",
- "3 Fernando Alonso 1981-07-29 Spanish [aston_martin] \n",
- "4 Charles Leclerc 1997-10-16 Monegasque [ferrari] \n",
- "5 Lando Norris 1999-11-13 British [mclaren] \n",
- "6 Carlos Sainz 1994-09-01 Spanish [ferrari] \n",
- "7 George Russell 1998-02-15 British [mercedes] \n",
- "8 Oscar Piastri 2001-04-06 Australian [mclaren] \n",
- "9 Lance Stroll 1998-10-29 Canadian [aston_martin] \n",
- "10 Pierre Gasly 1996-02-07 French [alpine] \n",
- "11 Esteban Ocon 1996-09-17 French [alpine] \n",
- "12 Alexander Albon 1996-03-23 Thai [williams] \n",
- "13 Yuki Tsunoda 2000-05-11 Japanese [alphatauri] \n",
- "14 Valtteri Bottas 1989-08-28 Finnish [alfa] \n",
- "15 Nico Hülkenberg 1987-08-19 German [haas] \n",
- "16 Daniel Ricciardo 1989-07-01 Australian [alphatauri] \n",
- "17 Guanyu Zhou 1999-05-30 Chinese [alfa] \n",
- "18 Kevin Magnussen 1992-10-05 Danish [haas] \n",
- "19 Liam Lawson 2002-02-11 New Zealander [alphatauri] \n",
- "20 Logan Sargeant 2000-12-31 American [williams] \n",
- "21 Nyck de Vries 1995-02-06 Dutch [alphatauri] \n",
- "\n",
- " constructorUrls \\\n",
- "0 [http://en.wikipedia.org/wiki/Red_Bull_Racing] \n",
- "1 [http://en.wikipedia.org/wiki/Red_Bull_Racing] \n",
- "2 [http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One] \n",
- "3 [http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One] \n",
- "4 [http://en.wikipedia.org/wiki/Scuderia_Ferrari] \n",
- "5 [http://en.wikipedia.org/wiki/McLaren] \n",
- "6 [http://en.wikipedia.org/wiki/Scuderia_Ferrari] \n",
- "7 [http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One] \n",
- "8 [http://en.wikipedia.org/wiki/McLaren] \n",
- "9 [http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One] \n",
- "10 [http://en.wikipedia.org/wiki/Alpine_F1_Team] \n",
- "11 [http://en.wikipedia.org/wiki/Alpine_F1_Team] \n",
- "12 [http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering] \n",
- "13 [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] \n",
- "14 [http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One] \n",
- "15 [http://en.wikipedia.org/wiki/Haas_F1_Team] \n",
- "16 [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] \n",
- "17 [http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One] \n",
- "18 [http://en.wikipedia.org/wiki/Haas_F1_Team] \n",
- "19 [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] \n",
- "20 [http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering] \n",
- "21 [http://en.wikipedia.org/wiki/Scuderia_AlphaTauri] \n",
- "\n",
- " constructorNames constructorNationalities \n",
- "0 [Red Bull] [Austrian] \n",
- "1 [Red Bull] [Austrian] \n",
- "2 [Mercedes] [German] \n",
- "3 [Aston Martin] [British] \n",
- "4 [Ferrari] [Italian] \n",
- "5 [McLaren] [British] \n",
- "6 [Ferrari] [Italian] \n",
- "7 [Mercedes] [German] \n",
- "8 [McLaren] [British] \n",
- "9 [Aston Martin] [British] \n",
- "10 [Alpine F1 Team] [French] \n",
- "11 [Alpine F1 Team] [French] \n",
- "12 [Williams] [British] \n",
- "13 [AlphaTauri] [Italian] \n",
- "14 [Alfa Romeo] [Swiss] \n",
- "15 [Haas F1 Team] [American] \n",
- "16 [AlphaTauri] [Italian] \n",
- "17 [Alfa Romeo] [Swiss] \n",
- "18 [Haas F1 Team] [American] \n",
- "19 [AlphaTauri] [Italian] \n",
- "20 [Williams] [British] \n",
- "21 [AlphaTauri] [Italian] "
- ]
- },
- "execution_count": 7,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "driver_standings_2023 = ergast.get_driver_standings(season=2023)\n",
- "driver_standings_2023.content[0]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "id": "dda2adbc-1a1f-43c9-a015-9dd9efa81149",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " position | \n",
- " positionText | \n",
- " points | \n",
- " wins | \n",
- " constructorId | \n",
- " constructorUrl | \n",
- " constructorName | \n",
- " constructorNationality | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 1 | \n",
- " 1 | \n",
- " 860.0 | \n",
- " 21 | \n",
- " red_bull | \n",
- " http://en.wikipedia.org/wiki/Red_Bull_Racing | \n",
- " Red Bull | \n",
- " Austrian | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 2 | \n",
- " 2 | \n",
- " 409.0 | \n",
- " 0 | \n",
- " mercedes | \n",
- " http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One | \n",
- " Mercedes | \n",
- " German | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 3 | \n",
- " 3 | \n",
- " 406.0 | \n",
- " 1 | \n",
- " ferrari | \n",
- " http://en.wikipedia.org/wiki/Scuderia_Ferrari | \n",
- " Ferrari | \n",
- " Italian | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 4 | \n",
- " 4 | \n",
- " 302.0 | \n",
- " 0 | \n",
- " mclaren | \n",
- " http://en.wikipedia.org/wiki/McLaren | \n",
- " McLaren | \n",
- " British | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 5 | \n",
- " 5 | \n",
- " 280.0 | \n",
- " 0 | \n",
- " aston_martin | \n",
- " http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One | \n",
- " Aston Martin | \n",
- " British | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 6 | \n",
- " 6 | \n",
- " 120.0 | \n",
- " 0 | \n",
- " alpine | \n",
- " http://en.wikipedia.org/wiki/Alpine_F1_Team | \n",
- " Alpine F1 Team | \n",
- " French | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 7 | \n",
- " 7 | \n",
- " 28.0 | \n",
- " 0 | \n",
- " williams | \n",
- " http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering | \n",
- " Williams | \n",
- " British | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 8 | \n",
- " 8 | \n",
- " 25.0 | \n",
- " 0 | \n",
- " alphatauri | \n",
- " http://en.wikipedia.org/wiki/Scuderia_AlphaTauri | \n",
- " AlphaTauri | \n",
- " Italian | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 9 | \n",
- " 9 | \n",
- " 16.0 | \n",
- " 0 | \n",
- " alfa | \n",
- " http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One | \n",
- " Alfa Romeo | \n",
- " Swiss | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 10 | \n",
- " 10 | \n",
- " 12.0 | \n",
- " 0 | \n",
- " haas | \n",
- " http://en.wikipedia.org/wiki/Haas_F1_Team | \n",
- " Haas F1 Team | \n",
- " American | \n",
- "
\n",
- " \n",
- "
\n",
- "
"
- ],
- "text/plain": [
- " position positionText points wins constructorId \\\n",
- "0 1 1 860.0 21 red_bull \n",
- "1 2 2 409.0 0 mercedes \n",
- "2 3 3 406.0 1 ferrari \n",
- "3 4 4 302.0 0 mclaren \n",
- "4 5 5 280.0 0 aston_martin \n",
- "5 6 6 120.0 0 alpine \n",
- "6 7 7 28.0 0 williams \n",
- "7 8 8 25.0 0 alphatauri \n",
- "8 9 9 16.0 0 alfa \n",
- "9 10 10 12.0 0 haas \n",
- "\n",
- " constructorUrl \\\n",
- "0 http://en.wikipedia.org/wiki/Red_Bull_Racing \n",
- "1 http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One \n",
- "2 http://en.wikipedia.org/wiki/Scuderia_Ferrari \n",
- "3 http://en.wikipedia.org/wiki/McLaren \n",
- "4 http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One \n",
- "5 http://en.wikipedia.org/wiki/Alpine_F1_Team \n",
- "6 http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering \n",
- "7 http://en.wikipedia.org/wiki/Scuderia_AlphaTauri \n",
- "8 http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One \n",
- "9 http://en.wikipedia.org/wiki/Haas_F1_Team \n",
- "\n",
- " constructorName constructorNationality \n",
- "0 Red Bull Austrian \n",
- "1 Mercedes German \n",
- "2 Ferrari Italian \n",
- "3 McLaren British \n",
- "4 Aston Martin British \n",
- "5 Alpine F1 Team French \n",
- "6 Williams British \n",
- "7 AlphaTauri Italian \n",
- "8 Alfa Romeo Swiss \n",
- "9 Haas F1 Team American "
- ]
- },
- "execution_count": 8,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "constructor_standings_2023 = ergast.get_constructor_standings(season=2023)\n",
- "constructor_standings_2023.content[0]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 9,
- "id": "398816a5-113c-4126-b1de-405e2e9db390",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "{'Meeting': {'Key': 1141,\n",
- " 'Name': 'Bahrain Grand Prix',\n",
- " 'OfficialName': 'FORMULA 1 GULF AIR BAHRAIN GRAND PRIX 2023',\n",
- " 'Location': 'Sakhir',\n",
- " 'Country': {'Key': 36, 'Code': 'BRN', 'Name': 'Bahrain'},\n",
- " 'Circuit': {'Key': 63, 'ShortName': 'Sakhir'}},\n",
- " 'ArchiveStatus': {'Status': 'Generating'},\n",
- " 'Key': 7953,\n",
- " 'Type': 'Race',\n",
- " 'Name': 'Race',\n",
- " 'StartDate': datetime.datetime(2023, 3, 5, 18, 0),\n",
- " 'EndDate': datetime.datetime(2023, 3, 5, 20, 0),\n",
- " 'GmtOffset': datetime.timedelta(seconds=10800),\n",
- " 'Path': '2023/2023-03-05_Bahrain_Grand_Prix/2023-03-05_Race/'}"
- ]
- },
- "execution_count": 9,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "race_event.session_info"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 10,
- "id": "cdc295cb-37a3-493c-acec-557aee7dc8e5",
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/html": [
- "\n",
- "\n",
- "
\n",
- " \n",
- " \n",
- " | \n",
- " Time | \n",
- " Status | \n",
- " Message | \n",
- "
\n",
- " \n",
- " \n",
- " \n",
- " 0 | \n",
- " 0 days 00:05:28.637000 | \n",
- " 1 | \n",
- " AllClear | \n",
- "
\n",
- " \n",
- " 1 | \n",
- " 0 days 00:21:59.040000 | \n",
- " 2 | \n",
- " Yellow | \n",
- "
\n",
- " \n",
- " 2 | \n",
- " 0 days 00:22:03.165000 | \n",
- " 1 | \n",
- " AllClear | \n",
- "
\n",
- " \n",
- " 3 | \n",
- " 0 days 01:03:07.651000 | \n",
- " 2 | \n",
- " Yellow | \n",
- "
\n",
- " \n",
- " 4 | \n",
- " 0 days 01:03:08.151000 | \n",
- " 1 | \n",
- " AllClear | \n",
- "
\n",
- " \n",
- " 5 | \n",
- " 0 days 01:04:15.978000 | \n",
- " 2 | \n",
- " Yellow | \n",
- "
\n",
- " \n",
- " 6 | \n",
- " 0 days 01:04:51.243000 | \n",
- " 1 | \n",
- " AllClear | \n",
- "
\n",
- " \n",
- " 7 | \n",
- " 0 days 02:08:59.830000 | \n",
- " 2 | \n",
- " Yellow | \n",
- "
\n",
- " \n",
- " 8 | \n",
- " 0 days 02:09:18.298000 | \n",
- " 6 | \n",
- " VSCDeployed | \n",
- "
\n",
- " \n",
- " 9 | \n",
- " 0 days 02:10:53.875000 | \n",
- " 7 | \n",
- " VSCEnding | \n",
- "
\n",
- " \n",
- " 10 | \n",
- " 0 days 02:11:06.437000 | \n",
- " 1 | \n",
- " AllClear | \n",
+ " 0 days 02:11:06.437000 | \n",
+ " 1 | \n",
+ " AllClear | \n",
"
\n",
" \n",
"
\n",
@@ -4362,7 +2999,7 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": null,
"id": "a63f3ab0-d8d0-4328-bd51-d6feee44ba26",
"metadata": {},
"outputs": [
@@ -4578,7 +3215,7 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": null,
"id": "402643c3-e960-471d-adc7-a4a491900065",
"metadata": {},
"outputs": [
@@ -4781,7 +3418,7 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": null,
"id": "b0c6ab4f-3b89-4810-bae4-a42adb63b65c",
"metadata": {},
"outputs": [
@@ -4802,7 +3439,7 @@
},
{
"cell_type": "code",
- "execution_count": 14,
+ "execution_count": null,
"id": "5c77f746-5b9b-4302-9ae8-db1869c9bf74",
"metadata": {},
"outputs": [
@@ -4820,6 +3457,482 @@
"source": [
"race_event.session_start_time"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "f23653a0",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[{'position': '1',\n",
+ " 'positionText': '1',\n",
+ " 'points': '860',\n",
+ " 'wins': '21',\n",
+ " 'Constructor': {'constructorId': 'red_bull',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Red_Bull_Racing',\n",
+ " 'name': 'Red Bull',\n",
+ " 'nationality': 'Austrian'}},\n",
+ " {'position': '2',\n",
+ " 'positionText': '2',\n",
+ " 'points': '409',\n",
+ " 'wins': '0',\n",
+ " 'Constructor': {'constructorId': 'mercedes',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One',\n",
+ " 'name': 'Mercedes',\n",
+ " 'nationality': 'German'}},\n",
+ " {'position': '3',\n",
+ " 'positionText': '3',\n",
+ " 'points': '406',\n",
+ " 'wins': '1',\n",
+ " 'Constructor': {'constructorId': 'ferrari',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Scuderia_Ferrari',\n",
+ " 'name': 'Ferrari',\n",
+ " 'nationality': 'Italian'}},\n",
+ " {'position': '4',\n",
+ " 'positionText': '4',\n",
+ " 'points': '302',\n",
+ " 'wins': '0',\n",
+ " 'Constructor': {'constructorId': 'mclaren',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/McLaren',\n",
+ " 'name': 'McLaren',\n",
+ " 'nationality': 'British'}},\n",
+ " {'position': '5',\n",
+ " 'positionText': '5',\n",
+ " 'points': '280',\n",
+ " 'wins': '0',\n",
+ " 'Constructor': {'constructorId': 'aston_martin',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One',\n",
+ " 'name': 'Aston Martin',\n",
+ " 'nationality': 'British'}},\n",
+ " {'position': '6',\n",
+ " 'positionText': '6',\n",
+ " 'points': '120',\n",
+ " 'wins': '0',\n",
+ " 'Constructor': {'constructorId': 'alpine',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Alpine_F1_Team',\n",
+ " 'name': 'Alpine F1 Team',\n",
+ " 'nationality': 'French'}},\n",
+ " {'position': '7',\n",
+ " 'positionText': '7',\n",
+ " 'points': '28',\n",
+ " 'wins': '0',\n",
+ " 'Constructor': {'constructorId': 'williams',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering',\n",
+ " 'name': 'Williams',\n",
+ " 'nationality': 'British'}},\n",
+ " {'position': '8',\n",
+ " 'positionText': '8',\n",
+ " 'points': '25',\n",
+ " 'wins': '0',\n",
+ " 'Constructor': {'constructorId': 'alphatauri',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Scuderia_AlphaTauri',\n",
+ " 'name': 'AlphaTauri',\n",
+ " 'nationality': 'Italian'}},\n",
+ " {'position': '9',\n",
+ " 'positionText': '9',\n",
+ " 'points': '16',\n",
+ " 'wins': '0',\n",
+ " 'Constructor': {'constructorId': 'alfa',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One',\n",
+ " 'name': 'Alfa Romeo',\n",
+ " 'nationality': 'Swiss'}},\n",
+ " {'position': '10',\n",
+ " 'positionText': '10',\n",
+ " 'points': '12',\n",
+ " 'wins': '0',\n",
+ " 'Constructor': {'constructorId': 'haas',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Haas_F1_Team',\n",
+ " 'name': 'Haas F1 Team',\n",
+ " 'nationality': 'American'}}]"
+ ]
+ },
+ "execution_count": 29,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "constructor_standings_2023 = ergast.get_constructor_standings(season=2023)\n",
+ "constructor_standings_2023[0][\"ConstructorStandings\"]"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "2717d227",
+ "metadata": {},
+ "outputs": [
+ {
+ "data": {
+ "text/plain": [
+ "[{'season': 2023,\n",
+ " 'round': 22,\n",
+ " 'DriverStandings': [{'position': '1',\n",
+ " 'positionText': '1',\n",
+ " 'points': '575',\n",
+ " 'wins': '19',\n",
+ " 'Driver': {'driverId': 'max_verstappen',\n",
+ " 'permanentNumber': '33',\n",
+ " 'code': 'VER',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Max_Verstappen',\n",
+ " 'givenName': 'Max',\n",
+ " 'familyName': 'Verstappen',\n",
+ " 'dateOfBirth': '1997-09-30',\n",
+ " 'nationality': 'Dutch'},\n",
+ " 'Constructors': [{'constructorId': 'red_bull',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Red_Bull_Racing',\n",
+ " 'name': 'Red Bull',\n",
+ " 'nationality': 'Austrian'}]},\n",
+ " {'position': '2',\n",
+ " 'positionText': '2',\n",
+ " 'points': '285',\n",
+ " 'wins': '2',\n",
+ " 'Driver': {'driverId': 'perez',\n",
+ " 'permanentNumber': '11',\n",
+ " 'code': 'PER',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Sergio_P%C3%A9rez',\n",
+ " 'givenName': 'Sergio',\n",
+ " 'familyName': 'Pérez',\n",
+ " 'dateOfBirth': '1990-01-26',\n",
+ " 'nationality': 'Mexican'},\n",
+ " 'Constructors': [{'constructorId': 'red_bull',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Red_Bull_Racing',\n",
+ " 'name': 'Red Bull',\n",
+ " 'nationality': 'Austrian'}]},\n",
+ " {'position': '3',\n",
+ " 'positionText': '3',\n",
+ " 'points': '234',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'hamilton',\n",
+ " 'permanentNumber': '44',\n",
+ " 'code': 'HAM',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Lewis_Hamilton',\n",
+ " 'givenName': 'Lewis',\n",
+ " 'familyName': 'Hamilton',\n",
+ " 'dateOfBirth': '1985-01-07',\n",
+ " 'nationality': 'British'},\n",
+ " 'Constructors': [{'constructorId': 'mercedes',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One',\n",
+ " 'name': 'Mercedes',\n",
+ " 'nationality': 'German'}]},\n",
+ " {'position': '4',\n",
+ " 'positionText': '4',\n",
+ " 'points': '206',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'alonso',\n",
+ " 'permanentNumber': '14',\n",
+ " 'code': 'ALO',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Fernando_Alonso',\n",
+ " 'givenName': 'Fernando',\n",
+ " 'familyName': 'Alonso',\n",
+ " 'dateOfBirth': '1981-07-29',\n",
+ " 'nationality': 'Spanish'},\n",
+ " 'Constructors': [{'constructorId': 'aston_martin',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One',\n",
+ " 'name': 'Aston Martin',\n",
+ " 'nationality': 'British'}]},\n",
+ " {'position': '5',\n",
+ " 'positionText': '5',\n",
+ " 'points': '206',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'leclerc',\n",
+ " 'permanentNumber': '16',\n",
+ " 'code': 'LEC',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Charles_Leclerc',\n",
+ " 'givenName': 'Charles',\n",
+ " 'familyName': 'Leclerc',\n",
+ " 'dateOfBirth': '1997-10-16',\n",
+ " 'nationality': 'Monegasque'},\n",
+ " 'Constructors': [{'constructorId': 'ferrari',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Scuderia_Ferrari',\n",
+ " 'name': 'Ferrari',\n",
+ " 'nationality': 'Italian'}]},\n",
+ " {'position': '6',\n",
+ " 'positionText': '6',\n",
+ " 'points': '205',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'norris',\n",
+ " 'permanentNumber': '4',\n",
+ " 'code': 'NOR',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Lando_Norris',\n",
+ " 'givenName': 'Lando',\n",
+ " 'familyName': 'Norris',\n",
+ " 'dateOfBirth': '1999-11-13',\n",
+ " 'nationality': 'British'},\n",
+ " 'Constructors': [{'constructorId': 'mclaren',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/McLaren',\n",
+ " 'name': 'McLaren',\n",
+ " 'nationality': 'British'}]},\n",
+ " {'position': '7',\n",
+ " 'positionText': '7',\n",
+ " 'points': '200',\n",
+ " 'wins': '1',\n",
+ " 'Driver': {'driverId': 'sainz',\n",
+ " 'permanentNumber': '55',\n",
+ " 'code': 'SAI',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Carlos_Sainz_Jr.',\n",
+ " 'givenName': 'Carlos',\n",
+ " 'familyName': 'Sainz',\n",
+ " 'dateOfBirth': '1994-09-01',\n",
+ " 'nationality': 'Spanish'},\n",
+ " 'Constructors': [{'constructorId': 'ferrari',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Scuderia_Ferrari',\n",
+ " 'name': 'Ferrari',\n",
+ " 'nationality': 'Italian'}]},\n",
+ " {'position': '8',\n",
+ " 'positionText': '8',\n",
+ " 'points': '175',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'russell',\n",
+ " 'permanentNumber': '63',\n",
+ " 'code': 'RUS',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/George_Russell_(racing_driver)',\n",
+ " 'givenName': 'George',\n",
+ " 'familyName': 'Russell',\n",
+ " 'dateOfBirth': '1998-02-15',\n",
+ " 'nationality': 'British'},\n",
+ " 'Constructors': [{'constructorId': 'mercedes',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Mercedes-Benz_in_Formula_One',\n",
+ " 'name': 'Mercedes',\n",
+ " 'nationality': 'German'}]},\n",
+ " {'position': '9',\n",
+ " 'positionText': '9',\n",
+ " 'points': '97',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'piastri',\n",
+ " 'permanentNumber': '81',\n",
+ " 'code': 'PIA',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Oscar_Piastri',\n",
+ " 'givenName': 'Oscar',\n",
+ " 'familyName': 'Piastri',\n",
+ " 'dateOfBirth': '2001-04-06',\n",
+ " 'nationality': 'Australian'},\n",
+ " 'Constructors': [{'constructorId': 'mclaren',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/McLaren',\n",
+ " 'name': 'McLaren',\n",
+ " 'nationality': 'British'}]},\n",
+ " {'position': '10',\n",
+ " 'positionText': '10',\n",
+ " 'points': '74',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'stroll',\n",
+ " 'permanentNumber': '18',\n",
+ " 'code': 'STR',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Lance_Stroll',\n",
+ " 'givenName': 'Lance',\n",
+ " 'familyName': 'Stroll',\n",
+ " 'dateOfBirth': '1998-10-29',\n",
+ " 'nationality': 'Canadian'},\n",
+ " 'Constructors': [{'constructorId': 'aston_martin',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Aston_Martin_in_Formula_One',\n",
+ " 'name': 'Aston Martin',\n",
+ " 'nationality': 'British'}]},\n",
+ " {'position': '11',\n",
+ " 'positionText': '11',\n",
+ " 'points': '62',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'gasly',\n",
+ " 'permanentNumber': '10',\n",
+ " 'code': 'GAS',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Pierre_Gasly',\n",
+ " 'givenName': 'Pierre',\n",
+ " 'familyName': 'Gasly',\n",
+ " 'dateOfBirth': '1996-02-07',\n",
+ " 'nationality': 'French'},\n",
+ " 'Constructors': [{'constructorId': 'alpine',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Alpine_F1_Team',\n",
+ " 'name': 'Alpine F1 Team',\n",
+ " 'nationality': 'French'}]},\n",
+ " {'position': '12',\n",
+ " 'positionText': '12',\n",
+ " 'points': '58',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'ocon',\n",
+ " 'permanentNumber': '31',\n",
+ " 'code': 'OCO',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Esteban_Ocon',\n",
+ " 'givenName': 'Esteban',\n",
+ " 'familyName': 'Ocon',\n",
+ " 'dateOfBirth': '1996-09-17',\n",
+ " 'nationality': 'French'},\n",
+ " 'Constructors': [{'constructorId': 'alpine',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Alpine_F1_Team',\n",
+ " 'name': 'Alpine F1 Team',\n",
+ " 'nationality': 'French'}]},\n",
+ " {'position': '13',\n",
+ " 'positionText': '13',\n",
+ " 'points': '27',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'albon',\n",
+ " 'permanentNumber': '23',\n",
+ " 'code': 'ALB',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Alexander_Albon',\n",
+ " 'givenName': 'Alexander',\n",
+ " 'familyName': 'Albon',\n",
+ " 'dateOfBirth': '1996-03-23',\n",
+ " 'nationality': 'Thai'},\n",
+ " 'Constructors': [{'constructorId': 'williams',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering',\n",
+ " 'name': 'Williams',\n",
+ " 'nationality': 'British'}]},\n",
+ " {'position': '14',\n",
+ " 'positionText': '14',\n",
+ " 'points': '17',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'tsunoda',\n",
+ " 'permanentNumber': '22',\n",
+ " 'code': 'TSU',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Yuki_Tsunoda',\n",
+ " 'givenName': 'Yuki',\n",
+ " 'familyName': 'Tsunoda',\n",
+ " 'dateOfBirth': '2000-05-11',\n",
+ " 'nationality': 'Japanese'},\n",
+ " 'Constructors': [{'constructorId': 'alphatauri',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Scuderia_AlphaTauri',\n",
+ " 'name': 'AlphaTauri',\n",
+ " 'nationality': 'Italian'}]},\n",
+ " {'position': '15',\n",
+ " 'positionText': '15',\n",
+ " 'points': '10',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'bottas',\n",
+ " 'permanentNumber': '77',\n",
+ " 'code': 'BOT',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Valtteri_Bottas',\n",
+ " 'givenName': 'Valtteri',\n",
+ " 'familyName': 'Bottas',\n",
+ " 'dateOfBirth': '1989-08-28',\n",
+ " 'nationality': 'Finnish'},\n",
+ " 'Constructors': [{'constructorId': 'alfa',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One',\n",
+ " 'name': 'Alfa Romeo',\n",
+ " 'nationality': 'Swiss'}]},\n",
+ " {'position': '16',\n",
+ " 'positionText': '16',\n",
+ " 'points': '9',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'hulkenberg',\n",
+ " 'permanentNumber': '27',\n",
+ " 'code': 'HUL',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Nico_H%C3%BClkenberg',\n",
+ " 'givenName': 'Nico',\n",
+ " 'familyName': 'Hülkenberg',\n",
+ " 'dateOfBirth': '1987-08-19',\n",
+ " 'nationality': 'German'},\n",
+ " 'Constructors': [{'constructorId': 'haas',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Haas_F1_Team',\n",
+ " 'name': 'Haas F1 Team',\n",
+ " 'nationality': 'American'}]},\n",
+ " {'position': '17',\n",
+ " 'positionText': '17',\n",
+ " 'points': '6',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'ricciardo',\n",
+ " 'permanentNumber': '3',\n",
+ " 'code': 'RIC',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Daniel_Ricciardo',\n",
+ " 'givenName': 'Daniel',\n",
+ " 'familyName': 'Ricciardo',\n",
+ " 'dateOfBirth': '1989-07-01',\n",
+ " 'nationality': 'Australian'},\n",
+ " 'Constructors': [{'constructorId': 'alphatauri',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Scuderia_AlphaTauri',\n",
+ " 'name': 'AlphaTauri',\n",
+ " 'nationality': 'Italian'}]},\n",
+ " {'position': '18',\n",
+ " 'positionText': '18',\n",
+ " 'points': '6',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'zhou',\n",
+ " 'permanentNumber': '24',\n",
+ " 'code': 'ZHO',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Zhou_Guanyu',\n",
+ " 'givenName': 'Guanyu',\n",
+ " 'familyName': 'Zhou',\n",
+ " 'dateOfBirth': '1999-05-30',\n",
+ " 'nationality': 'Chinese'},\n",
+ " 'Constructors': [{'constructorId': 'alfa',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Alfa_Romeo_in_Formula_One',\n",
+ " 'name': 'Alfa Romeo',\n",
+ " 'nationality': 'Swiss'}]},\n",
+ " {'position': '19',\n",
+ " 'positionText': '19',\n",
+ " 'points': '3',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'kevin_magnussen',\n",
+ " 'permanentNumber': '20',\n",
+ " 'code': 'MAG',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Kevin_Magnussen',\n",
+ " 'givenName': 'Kevin',\n",
+ " 'familyName': 'Magnussen',\n",
+ " 'dateOfBirth': '1992-10-05',\n",
+ " 'nationality': 'Danish'},\n",
+ " 'Constructors': [{'constructorId': 'haas',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Haas_F1_Team',\n",
+ " 'name': 'Haas F1 Team',\n",
+ " 'nationality': 'American'}]},\n",
+ " {'position': '20',\n",
+ " 'positionText': '20',\n",
+ " 'points': '2',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'lawson',\n",
+ " 'permanentNumber': '40',\n",
+ " 'code': 'LAW',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Liam_Lawson',\n",
+ " 'givenName': 'Liam',\n",
+ " 'familyName': 'Lawson',\n",
+ " 'dateOfBirth': '2002-02-11',\n",
+ " 'nationality': 'New Zealander'},\n",
+ " 'Constructors': [{'constructorId': 'alphatauri',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Scuderia_AlphaTauri',\n",
+ " 'name': 'AlphaTauri',\n",
+ " 'nationality': 'Italian'}]},\n",
+ " {'position': '21',\n",
+ " 'positionText': '21',\n",
+ " 'points': '1',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'sargeant',\n",
+ " 'permanentNumber': '2',\n",
+ " 'code': 'SAR',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Logan_Sargeant',\n",
+ " 'givenName': 'Logan',\n",
+ " 'familyName': 'Sargeant',\n",
+ " 'dateOfBirth': '2000-12-31',\n",
+ " 'nationality': 'American'},\n",
+ " 'Constructors': [{'constructorId': 'williams',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Williams_Grand_Prix_Engineering',\n",
+ " 'name': 'Williams',\n",
+ " 'nationality': 'British'}]},\n",
+ " {'position': '22',\n",
+ " 'positionText': '22',\n",
+ " 'points': '0',\n",
+ " 'wins': '0',\n",
+ " 'Driver': {'driverId': 'de_vries',\n",
+ " 'permanentNumber': '21',\n",
+ " 'code': 'DEV',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Nyck_de_Vries',\n",
+ " 'givenName': 'Nyck',\n",
+ " 'familyName': 'de Vries',\n",
+ " 'dateOfBirth': '1995-02-06',\n",
+ " 'nationality': 'Dutch'},\n",
+ " 'Constructors': [{'constructorId': 'alphatauri',\n",
+ " 'url': 'http://en.wikipedia.org/wiki/Scuderia_AlphaTauri',\n",
+ " 'name': 'AlphaTauri',\n",
+ " 'nationality': 'Italian'}]}]}]"
+ ]
+ },
+ "execution_count": 17,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "driver_standings_2023 = ergast.get_driver_standings(season=2023)\n",
+ "driver_standings_2023"
+ ]
}
],
"metadata": {
diff --git a/poetry.lock b/poetry.lock
index 8bd9273..30587c3 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -182,19 +182,22 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"]
[[package]]
name = "beautifulsoup4"
-version = "4.12.2"
+version = "4.12.3"
description = "Screen-scraping library"
optional = false
python-versions = ">=3.6.0"
files = [
- {file = "beautifulsoup4-4.12.2-py3-none-any.whl", hash = "sha256:bd2520ca0d9d7d12694a53d44ac482d181b4ec1888909b035a3dbf40d0f57d4a"},
- {file = "beautifulsoup4-4.12.2.tar.gz", hash = "sha256:492bbc69dca35d12daac71c4db1bfff0c876c00ef4a2ffacce226d4638eb72da"},
+ {file = "beautifulsoup4-4.12.3-py3-none-any.whl", hash = "sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed"},
+ {file = "beautifulsoup4-4.12.3.tar.gz", hash = "sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051"},
]
[package.dependencies]
soupsieve = ">1.2"
[package.extras]
+cchardet = ["cchardet"]
+chardet = ["chardet"]
+charset-normalizer = ["charset-normalizer"]
html5lib = ["html5lib"]
lxml = ["lxml"]
@@ -900,13 +903,13 @@ files = [
[[package]]
name = "ipykernel"
-version = "6.28.0"
+version = "6.29.0"
description = "IPython Kernel for Jupyter"
optional = false
python-versions = ">=3.8"
files = [
- {file = "ipykernel-6.28.0-py3-none-any.whl", hash = "sha256:c6e9a9c63a7f4095c0a22a79f765f079f9ec7be4f2430a898ddea889e8665661"},
- {file = "ipykernel-6.28.0.tar.gz", hash = "sha256:69c11403d26de69df02225916f916b37ea4b9af417da0a8c827f84328d88e5f3"},
+ {file = "ipykernel-6.29.0-py3-none-any.whl", hash = "sha256:076663ca68492576f051e4af7720d33f34383e655f2be0d544c8b1c9de915b2f"},
+ {file = "ipykernel-6.29.0.tar.gz", hash = "sha256:b5dd3013cab7b330df712891c96cd1ab868c27a7159e606f762015e9bf8ceb3f"},
]
[package.dependencies]
@@ -929,7 +932,7 @@ cov = ["coverage[toml]", "curio", "matplotlib", "pytest-cov", "trio"]
docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "trio"]
pyqt5 = ["pyqt5"]
pyside6 = ["pyside6"]
-test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov", "pytest-timeout"]
+test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (==0.23.2)", "pytest-cov", "pytest-timeout"]
[[package]]
name = "ipython"
@@ -1057,13 +1060,13 @@ files = [
[[package]]
name = "jsonschema"
-version = "4.20.0"
+version = "4.21.1"
description = "An implementation of JSON Schema validation for Python"
optional = false
python-versions = ">=3.8"
files = [
- {file = "jsonschema-4.20.0-py3-none-any.whl", hash = "sha256:ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3"},
- {file = "jsonschema-4.20.0.tar.gz", hash = "sha256:4f614fd46d8d61258610998997743ec5492a648b33cf478c1ddc23ed4598a5fa"},
+ {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"},
+ {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"},
]
[package.dependencies]
@@ -1167,13 +1170,13 @@ test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "p
[[package]]
name = "jupyter-lsp"
-version = "2.2.1"
+version = "2.2.2"
description = "Multi-Language Server WebSocket proxy for Jupyter Notebook/Lab server"
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupyter-lsp-2.2.1.tar.gz", hash = "sha256:b17fab6d70fe83c8896b0cff59237640038247c196056b43684a0902b6a9e0fb"},
- {file = "jupyter_lsp-2.2.1-py3-none-any.whl", hash = "sha256:17a689910c5e4ae5e7d334b02f31d08ffbe98108f6f658fb05e4304b4345368b"},
+ {file = "jupyter-lsp-2.2.2.tar.gz", hash = "sha256:256d24620542ae4bba04a50fc1f6ffe208093a07d8e697fea0a8d1b8ca1b7e5b"},
+ {file = "jupyter_lsp-2.2.2-py3-none-any.whl", hash = "sha256:3b95229e4168355a8c91928057c1621ac3510ba98b2a925e82ebd77f078b1aa5"},
]
[package.dependencies]
@@ -1181,13 +1184,13 @@ jupyter-server = ">=1.1.2"
[[package]]
name = "jupyter-server"
-version = "2.12.4"
+version = "2.12.5"
description = "The backend—i.e. core services, APIs, and REST endpoints—to Jupyter web applications."
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupyter_server-2.12.4-py3-none-any.whl", hash = "sha256:a125ae18a60de568f78f55c84dd58759901a18ef279abf0418ac220653ca1320"},
- {file = "jupyter_server-2.12.4.tar.gz", hash = "sha256:41f4a1e6b912cc24a7c6c694851b37d3d8412b180f43d72315fe422cb2b85cc2"},
+ {file = "jupyter_server-2.12.5-py3-none-any.whl", hash = "sha256:184a0f82809a8522777cfb6b760ab6f4b1bb398664c5860a27cec696cb884923"},
+ {file = "jupyter_server-2.12.5.tar.gz", hash = "sha256:0edb626c94baa22809be1323f9770cf1c00a952b17097592e40d03e6a3951689"},
]
[package.dependencies]
@@ -1236,13 +1239,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>
[[package]]
name = "jupyterlab"
-version = "4.0.10"
+version = "4.0.11"
description = "JupyterLab computational environment"
optional = false
python-versions = ">=3.8"
files = [
- {file = "jupyterlab-4.0.10-py3-none-any.whl", hash = "sha256:fe010ad9e37017488b468632ef2ead255fc7c671c5b64d9ca13e1f7b7e665c37"},
- {file = "jupyterlab-4.0.10.tar.gz", hash = "sha256:46177eb8ede70dc73be922ac99f8ef943bdc2dfbc6a31b353c4bde848a35dee1"},
+ {file = "jupyterlab-4.0.11-py3-none-any.whl", hash = "sha256:536bf0e78723153a5016ca7efb88ed0ecd7070d3f1555d5b0e2770658f900a3c"},
+ {file = "jupyterlab-4.0.11.tar.gz", hash = "sha256:d1aec24712566bc25a36229788242778e498ca4088028e2f9aa156b8b7fdc8fc"},
]
[package.dependencies]
@@ -1434,71 +1437,71 @@ files = [
[[package]]
name = "markupsafe"
-version = "2.1.3"
+version = "2.1.4"
description = "Safely add untrusted strings to HTML/XML markup."
optional = false
python-versions = ">=3.7"
files = [
- {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd0f502fe016460680cd20aaa5a76d241d6f35a1c3350c474bac1273803893fa"},
- {file = "MarkupSafe-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e09031c87a1e51556fdcb46e5bd4f59dfb743061cf93c4d6831bf894f125eb57"},
- {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68e78619a61ecf91e76aa3e6e8e33fc4894a2bebe93410754bd28fce0a8a4f9f"},
- {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65c1a9bcdadc6c28eecee2c119465aebff8f7a584dd719facdd9e825ec61ab52"},
- {file = "MarkupSafe-2.1.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:525808b8019e36eb524b8c68acdd63a37e75714eac50e988180b169d64480a00"},
- {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:962f82a3086483f5e5f64dbad880d31038b698494799b097bc59c2edf392fce6"},
- {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:aa7bd130efab1c280bed0f45501b7c8795f9fdbeb02e965371bbef3523627779"},
- {file = "MarkupSafe-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c9c804664ebe8f83a211cace637506669e7890fec1b4195b505c214e50dd4eb7"},
- {file = "MarkupSafe-2.1.3-cp310-cp310-win32.whl", hash = "sha256:10bbfe99883db80bdbaff2dcf681dfc6533a614f700da1287707e8a5d78a8431"},
- {file = "MarkupSafe-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:1577735524cdad32f9f694208aa75e422adba74f1baee7551620e43a3141f559"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ad9e82fb8f09ade1c3e1b996a6337afac2b8b9e365f926f5a61aacc71adc5b3c"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3c0fae6c3be832a0a0473ac912810b2877c8cb9d76ca48de1ed31e1c68386575"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b076b6226fb84157e3f7c971a47ff3a679d837cf338547532ab866c57930dbee"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:338ae27d6b8745585f87218a3f23f1512dbf52c26c28e322dbe54bcede54ccb9"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e4dd52d80b8c83fdce44e12478ad2e85c64ea965e75d66dbeafb0a3e77308fcc"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:df0be2b576a7abbf737b1575f048c23fb1d769f267ec4358296f31c2479db8f9"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:5bbe06f8eeafd38e5d0a4894ffec89378b6c6a625ff57e3028921f8ff59318ac"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-win32.whl", hash = "sha256:dd15ff04ffd7e05ffcb7fe79f1b98041b8ea30ae9234aed2a9168b5797c3effb"},
- {file = "MarkupSafe-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:134da1eca9ec0ae528110ccc9e48041e0828d79f24121a1a146161103c76e686"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:f698de3fd0c4e6972b92290a45bd9b1536bffe8c6759c62471efaa8acb4c37bc"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aa57bd9cf8ae831a362185ee444e15a93ecb2e344c8e52e4d721ea3ab6ef1823"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffcc3f7c66b5f5b7931a5aa68fc9cecc51e685ef90282f4a82f0f5e9b704ad11"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47d4f1c5f80fc62fdd7777d0d40a2e9dda0a05883ab11374334f6c4de38adffd"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1f67c7038d560d92149c060157d623c542173016c4babc0c1913cca0564b9939"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9aad3c1755095ce347e26488214ef77e0485a3c34a50c5a5e2471dff60b9dd9c"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:14ff806850827afd6b07a5f32bd917fb7f45b046ba40c57abdb636674a8b559c"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f9293864fe09b8149f0cc42ce56e3f0e54de883a9de90cd427f191c346eb2e1"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-win32.whl", hash = "sha256:715d3562f79d540f251b99ebd6d8baa547118974341db04f5ad06d5ea3eb8007"},
- {file = "MarkupSafe-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:1b8dd8c3fd14349433c79fa8abeb573a55fc0fdd769133baac1f5e07abf54aeb"},
- {file = "MarkupSafe-2.1.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8e254ae696c88d98da6555f5ace2279cf7cd5b3f52be2b5cf97feafe883b58d2"},
- {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb0932dc158471523c9637e807d9bfb93e06a95cbf010f1a38b98623b929ef2b"},
- {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9402b03f1a1b4dc4c19845e5c749e3ab82d5078d16a2a4c2cd2df62d57bb0707"},
- {file = "MarkupSafe-2.1.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca379055a47383d02a5400cb0d110cef0a776fc644cda797db0c5696cfd7e18e"},
- {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b7ff0f54cb4ff66dd38bebd335a38e2c22c41a8ee45aa608efc890ac3e3931bc"},
- {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c011a4149cfbcf9f03994ec2edffcb8b1dc2d2aede7ca243746df97a5d41ce48"},
- {file = "MarkupSafe-2.1.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:56d9f2ecac662ca1611d183feb03a3fa4406469dafe241673d521dd5ae92a155"},
- {file = "MarkupSafe-2.1.3-cp37-cp37m-win32.whl", hash = "sha256:8758846a7e80910096950b67071243da3e5a20ed2546e6392603c096778d48e0"},
- {file = "MarkupSafe-2.1.3-cp37-cp37m-win_amd64.whl", hash = "sha256:787003c0ddb00500e49a10f2844fac87aa6ce977b90b0feaaf9de23c22508b24"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:2ef12179d3a291be237280175b542c07a36e7f60718296278d8593d21ca937d4"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2c1b19b3aaacc6e57b7e25710ff571c24d6c3613a45e905b1fde04d691b98ee0"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8afafd99945ead6e075b973fefa56379c5b5c53fd8937dad92c662da5d8fd5ee"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8c41976a29d078bb235fea9b2ecd3da465df42a562910f9022f1a03107bd02be"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d080e0a5eb2529460b30190fcfcc4199bd7f827663f858a226a81bc27beaa97e"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69c0f17e9f5a7afdf2cc9fb2d1ce6aabdb3bafb7f38017c0b77862bcec2bbad8"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:504b320cd4b7eff6f968eddf81127112db685e81f7e36e75f9f84f0df46041c3"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:42de32b22b6b804f42c5d98be4f7e5e977ecdd9ee9b660fda1a3edf03b11792d"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-win32.whl", hash = "sha256:ceb01949af7121f9fc39f7d27f91be8546f3fb112c608bc4029aef0bab86a2a5"},
- {file = "MarkupSafe-2.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:1b40069d487e7edb2676d3fbdb2b0829ffa2cd63a2ec26c4938b2d34391b4ecc"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:8023faf4e01efadfa183e863fefde0046de576c6f14659e8782065bcece22198"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6b2b56950d93e41f33b4223ead100ea0fe11f8e6ee5f641eb753ce4b77a7042b"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dcdfd0eaf283af041973bff14a2e143b8bd64e069f4c383416ecd79a81aab58"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05fb21170423db021895e1ea1e1f3ab3adb85d1c2333cbc2310f2a26bc77272e"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:282c2cb35b5b673bbcadb33a585408104df04f14b2d9b01d4c345a3b92861c2c"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:ab4a0df41e7c16a1392727727e7998a467472d0ad65f3ad5e6e765015df08636"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7ef3cb2ebbf91e330e3bb937efada0edd9003683db6b57bb108c4001f37a02ea"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0a4e4a1aff6c7ac4cd55792abf96c915634c2b97e3cc1c7129578aa68ebd754e"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-win32.whl", hash = "sha256:fec21693218efe39aa7f8599346e90c705afa52c5b31ae019b2e57e8f6542bb2"},
- {file = "MarkupSafe-2.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:3fd4abcb888d15a94f32b75d8fd18ee162ca0c064f35b11134be77050296d6ba"},
- {file = "MarkupSafe-2.1.3.tar.gz", hash = "sha256:af598ed32d6ae86f1b747b82783958b1a4ab8f617b06fe68795c7f026abbdcad"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de8153a7aae3835484ac168a9a9bdaa0c5eee4e0bc595503c95d53b942879c84"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e888ff76ceb39601c59e219f281466c6d7e66bd375b4ec1ce83bcdc68306796b"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0b838c37ba596fcbfca71651a104a611543077156cb0a26fe0c475e1f152ee8"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac1ebf6983148b45b5fa48593950f90ed6d1d26300604f321c74a9ca1609f8e"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0fbad3d346df8f9d72622ac71b69565e621ada2ce6572f37c2eae8dacd60385d"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d5291d98cd3ad9a562883468c690a2a238c4a6388ab3bd155b0c75dd55ece858"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:a7cc49ef48a3c7a0005a949f3c04f8baa5409d3f663a1b36f0eba9bfe2a0396e"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83041cda633871572f0d3c41dddd5582ad7d22f65a72eacd8d3d6d00291df26"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-win32.whl", hash = "sha256:0c26f67b3fe27302d3a412b85ef696792c4a2386293c53ba683a89562f9399b0"},
+ {file = "MarkupSafe-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:a76055d5cb1c23485d7ddae533229039b850db711c554a12ea64a0fd8a0129e2"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9e9e3c4020aa2dc62d5dd6743a69e399ce3de58320522948af6140ac959ab863"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0042d6a9880b38e1dd9ff83146cc3c9c18a059b9360ceae207805567aacccc69"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d03fea4c4e9fd0ad75dc2e7e2b6757b80c152c032ea1d1de487461d8140efc"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ab3a886a237f6e9c9f4f7d272067e712cdb4efa774bef494dccad08f39d8ae6"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abf5ebbec056817057bfafc0445916bb688a255a5146f900445d081db08cbabb"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e1a0d1924a5013d4f294087e00024ad25668234569289650929ab871231668e7"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:e7902211afd0af05fbadcc9a312e4cf10f27b779cf1323e78d52377ae4b72bea"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:c669391319973e49a7c6230c218a1e3044710bc1ce4c8e6eb71f7e6d43a2c131"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-win32.whl", hash = "sha256:31f57d64c336b8ccb1966d156932f3daa4fee74176b0fdc48ef580be774aae74"},
+ {file = "MarkupSafe-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:54a7e1380dfece8847c71bf7e33da5d084e9b889c75eca19100ef98027bd9f56"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a76cd37d229fc385738bd1ce4cba2a121cf26b53864c1772694ad0ad348e509e"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:987d13fe1d23e12a66ca2073b8d2e2a75cec2ecb8eab43ff5624ba0ad42764bc"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5244324676254697fe5c181fc762284e2c5fceeb1c4e3e7f6aca2b6f107e60dc"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78bc995e004681246e85e28e068111a4c3f35f34e6c62da1471e844ee1446250"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4d176cfdfde84f732c4a53109b293d05883e952bbba68b857ae446fa3119b4f"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f9917691f410a2e0897d1ef99619fd3f7dd503647c8ff2475bf90c3cf222ad74"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:f06e5a9e99b7df44640767842f414ed5d7bedaaa78cd817ce04bbd6fd86e2dd6"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396549cea79e8ca4ba65525470d534e8a41070e6b3500ce2414921099cb73e8d"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-win32.whl", hash = "sha256:f6be2d708a9d0e9b0054856f07ac7070fbe1754be40ca8525d5adccdbda8f475"},
+ {file = "MarkupSafe-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:5045e892cfdaecc5b4c01822f353cf2c8feb88a6ec1c0adef2a2e705eef0f656"},
+ {file = "MarkupSafe-2.1.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7a07f40ef8f0fbc5ef1000d0c78771f4d5ca03b4953fc162749772916b298fc4"},
+ {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d18b66fe626ac412d96c2ab536306c736c66cf2a31c243a45025156cc190dc8a"},
+ {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:698e84142f3f884114ea8cf83e7a67ca8f4ace8454e78fe960646c6c91c63bfa"},
+ {file = "MarkupSafe-2.1.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a3b78a5af63ec10d8604180380c13dcd870aba7928c1fe04e881d5c792dc4e"},
+ {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:15866d7f2dc60cfdde12ebb4e75e41be862348b4728300c36cdf405e258415ec"},
+ {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6aa5e2e7fc9bc042ae82d8b79d795b9a62bd8f15ba1e7594e3db243f158b5565"},
+ {file = "MarkupSafe-2.1.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:54635102ba3cf5da26eb6f96c4b8c53af8a9c0d97b64bdcb592596a6255d8518"},
+ {file = "MarkupSafe-2.1.4-cp37-cp37m-win32.whl", hash = "sha256:3583a3a3ab7958e354dc1d25be74aee6228938312ee875a22330c4dc2e41beb0"},
+ {file = "MarkupSafe-2.1.4-cp37-cp37m-win_amd64.whl", hash = "sha256:d6e427c7378c7f1b2bef6a344c925b8b63623d3321c09a237b7cc0e77dd98ceb"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:bf1196dcc239e608605b716e7b166eb5faf4bc192f8a44b81e85251e62584bd2"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4df98d4a9cd6a88d6a585852f56f2155c9cdb6aec78361a19f938810aa020954"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b835aba863195269ea358cecc21b400276747cc977492319fd7682b8cd2c253d"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23984d1bdae01bee794267424af55eef4dfc038dc5d1272860669b2aa025c9e3"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c98c33ffe20e9a489145d97070a435ea0679fddaabcafe19982fe9c971987d5"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9896fca4a8eb246defc8b2a7ac77ef7553b638e04fbf170bff78a40fa8a91474"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b0fe73bac2fed83839dbdbe6da84ae2a31c11cfc1c777a40dbd8ac8a6ed1560f"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c7556bafeaa0a50e2fe7dc86e0382dea349ebcad8f010d5a7dc6ba568eaaa789"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-win32.whl", hash = "sha256:fc1a75aa8f11b87910ffd98de62b29d6520b6d6e8a3de69a70ca34dea85d2a8a"},
+ {file = "MarkupSafe-2.1.4-cp38-cp38-win_amd64.whl", hash = "sha256:3a66c36a3864df95e4f62f9167c734b3b1192cb0851b43d7cc08040c074c6279"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:765f036a3d00395a326df2835d8f86b637dbaf9832f90f5d196c3b8a7a5080cb"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:21e7af8091007bf4bebf4521184f4880a6acab8df0df52ef9e513d8e5db23411"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5c31fe855c77cad679b302aabc42d724ed87c043b1432d457f4976add1c2c3e"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7653fa39578957bc42e5ebc15cf4361d9e0ee4b702d7d5ec96cdac860953c5b4"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:47bb5f0142b8b64ed1399b6b60f700a580335c8e1c57f2f15587bd072012decc"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:fe8512ed897d5daf089e5bd010c3dc03bb1bdae00b35588c49b98268d4a01e00"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:36d7626a8cca4d34216875aee5a1d3d654bb3dac201c1c003d182283e3205949"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b6f14a9cd50c3cb100eb94b3273131c80d102e19bb20253ac7bd7336118a673a"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-win32.whl", hash = "sha256:c8f253a84dbd2c63c19590fa86a032ef3d8cc18923b8049d91bcdeeb2581fbf6"},
+ {file = "MarkupSafe-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:8b570a1537367b52396e53325769608f2a687ec9a4363647af1cded8928af959"},
+ {file = "MarkupSafe-2.1.4.tar.gz", hash = "sha256:3aae9af4cac263007fd6309c64c6ab4506dd2b79382d9d19a1994f9240b8db4f"},
]
[[package]]
@@ -1609,13 +1612,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=
[[package]]
name = "nbconvert"
-version = "7.14.1"
+version = "7.14.2"
description = "Converting Jupyter Notebooks"
optional = false
python-versions = ">=3.8"
files = [
- {file = "nbconvert-7.14.1-py3-none-any.whl", hash = "sha256:aa83e3dd27ea38d0c1d908e3ce9518d15fa908dd30521b6d5040bd23f33fffb0"},
- {file = "nbconvert-7.14.1.tar.gz", hash = "sha256:20cba10e0448dc76b3bebfe1adf923663e3b98338daf77b97b42511ef5a88618"},
+ {file = "nbconvert-7.14.2-py3-none-any.whl", hash = "sha256:db28590cef90f7faf2ebbc71acd402cbecf13d29176df728c0a9025a49345ea1"},
+ {file = "nbconvert-7.14.2.tar.gz", hash = "sha256:a7f8808fd4e082431673ac538400218dd45efd076fbeb07cc6e5aa5a3a4e949e"},
]
[package.dependencies]
@@ -1667,13 +1670,13 @@ test = ["pep440", "pre-commit", "pytest", "testpath"]
[[package]]
name = "nest-asyncio"
-version = "1.5.8"
+version = "1.5.9"
description = "Patch asyncio to allow nested event loops"
optional = false
python-versions = ">=3.5"
files = [
- {file = "nest_asyncio-1.5.8-py3-none-any.whl", hash = "sha256:accda7a339a70599cb08f9dd09a67e0c2ef8d8d6f4c07f96ab203f2ae254e48d"},
- {file = "nest_asyncio-1.5.8.tar.gz", hash = "sha256:25aa2ca0d2a5b5531956b9e273b45cf664cae2b145101d73b86b199978d48fdb"},
+ {file = "nest_asyncio-1.5.9-py3-none-any.whl", hash = "sha256:61ec07ef052e72e3de22045b81b2cc7d71fceb04c568ba0b2e4b2f9f5231bec2"},
+ {file = "nest_asyncio-1.5.9.tar.gz", hash = "sha256:d1e1144e9c6e3e6392e0fcf5211cb1c8374b5648a98f1ebe48e5336006b41907"},
]
[[package]]
@@ -1762,77 +1765,81 @@ files = [
[[package]]
name = "pandas"
-version = "2.1.4"
+version = "2.2.0"
description = "Powerful data structures for data analysis, time series, and statistics"
optional = false
python-versions = ">=3.9"
files = [
- {file = "pandas-2.1.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bdec823dc6ec53f7a6339a0e34c68b144a7a1fd28d80c260534c39c62c5bf8c9"},
- {file = "pandas-2.1.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:294d96cfaf28d688f30c918a765ea2ae2e0e71d3536754f4b6de0ea4a496d034"},
- {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b728fb8deba8905b319f96447a27033969f3ea1fea09d07d296c9030ab2ed1d"},
- {file = "pandas-2.1.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00028e6737c594feac3c2df15636d73ace46b8314d236100b57ed7e4b9ebe8d9"},
- {file = "pandas-2.1.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:426dc0f1b187523c4db06f96fb5c8d1a845e259c99bda74f7de97bd8a3bb3139"},
- {file = "pandas-2.1.4-cp310-cp310-win_amd64.whl", hash = "sha256:f237e6ca6421265643608813ce9793610ad09b40154a3344a088159590469e46"},
- {file = "pandas-2.1.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b7d852d16c270e4331f6f59b3e9aa23f935f5c4b0ed2d0bc77637a8890a5d092"},
- {file = "pandas-2.1.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bd7d5f2f54f78164b3d7a40f33bf79a74cdee72c31affec86bfcabe7e0789821"},
- {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0aa6e92e639da0d6e2017d9ccff563222f4eb31e4b2c3cf32a2a392fc3103c0d"},
- {file = "pandas-2.1.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d797591b6846b9db79e65dc2d0d48e61f7db8d10b2a9480b4e3faaddc421a171"},
- {file = "pandas-2.1.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d2d3e7b00f703aea3945995ee63375c61b2e6aa5aa7871c5d622870e5e137623"},
- {file = "pandas-2.1.4-cp311-cp311-win_amd64.whl", hash = "sha256:dc9bf7ade01143cddc0074aa6995edd05323974e6e40d9dbde081021ded8510e"},
- {file = "pandas-2.1.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:482d5076e1791777e1571f2e2d789e940dedd927325cc3cb6d0800c6304082f6"},
- {file = "pandas-2.1.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8a706cfe7955c4ca59af8c7a0517370eafbd98593155b48f10f9811da440248b"},
- {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b0513a132a15977b4a5b89aabd304647919bc2169eac4c8536afb29c07c23540"},
- {file = "pandas-2.1.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9f17f2b6fc076b2a0078862547595d66244db0f41bf79fc5f64a5c4d635bead"},
- {file = "pandas-2.1.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:45d63d2a9b1b37fa6c84a68ba2422dc9ed018bdaa668c7f47566a01188ceeec1"},
- {file = "pandas-2.1.4-cp312-cp312-win_amd64.whl", hash = "sha256:f69b0c9bb174a2342818d3e2778584e18c740d56857fc5cdb944ec8bbe4082cf"},
- {file = "pandas-2.1.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3f06bda01a143020bad20f7a85dd5f4a1600112145f126bc9e3e42077c24ef34"},
- {file = "pandas-2.1.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ab5796839eb1fd62a39eec2916d3e979ec3130509930fea17fe6f81e18108f6a"},
- {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edbaf9e8d3a63a9276d707b4d25930a262341bca9874fcb22eff5e3da5394732"},
- {file = "pandas-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ebfd771110b50055712b3b711b51bee5d50135429364d0498e1213a7adc2be8"},
- {file = "pandas-2.1.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8ea107e0be2aba1da619cc6ba3f999b2bfc9669a83554b1904ce3dd9507f0860"},
- {file = "pandas-2.1.4-cp39-cp39-win_amd64.whl", hash = "sha256:d65148b14788b3758daf57bf42725caa536575da2b64df9964c563b015230984"},
- {file = "pandas-2.1.4.tar.gz", hash = "sha256:fcb68203c833cc735321512e13861358079a96c174a61f5116a1de89c58c0ef7"},
+ {file = "pandas-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8108ee1712bb4fa2c16981fba7e68b3f6ea330277f5ca34fa8d557e986a11670"},
+ {file = "pandas-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:736da9ad4033aeab51d067fc3bd69a0ba36f5a60f66a527b3d72e2030e63280a"},
+ {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38e0b4fc3ddceb56ec8a287313bc22abe17ab0eb184069f08fc6a9352a769b18"},
+ {file = "pandas-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20404d2adefe92aed3b38da41d0847a143a09be982a31b85bc7dd565bdba0f4e"},
+ {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7ea3ee3f125032bfcade3a4cf85131ed064b4f8dd23e5ce6fa16473e48ebcaf5"},
+ {file = "pandas-2.2.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f9670b3ac00a387620489dfc1bca66db47a787f4e55911f1293063a78b108df1"},
+ {file = "pandas-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:5a946f210383c7e6d16312d30b238fd508d80d927014f3b33fb5b15c2f895430"},
+ {file = "pandas-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a1b438fa26b208005c997e78672f1aa8138f67002e833312e6230f3e57fa87d5"},
+ {file = "pandas-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ce2fbc8d9bf303ce54a476116165220a1fedf15985b09656b4b4275300e920b"},
+ {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2707514a7bec41a4ab81f2ccce8b382961a29fbe9492eab1305bb075b2b1ff4f"},
+ {file = "pandas-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85793cbdc2d5bc32620dc8ffa715423f0c680dacacf55056ba13454a5be5de88"},
+ {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cfd6c2491dc821b10c716ad6776e7ab311f7df5d16038d0b7458bc0b67dc10f3"},
+ {file = "pandas-2.2.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a146b9dcacc3123aa2b399df1a284de5f46287a4ab4fbfc237eac98a92ebcb71"},
+ {file = "pandas-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:fbc1b53c0e1fdf16388c33c3cca160f798d38aea2978004dd3f4d3dec56454c9"},
+ {file = "pandas-2.2.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a41d06f308a024981dcaa6c41f2f2be46a6b186b902c94c2674e8cb5c42985bc"},
+ {file = "pandas-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:159205c99d7a5ce89ecfc37cb08ed179de7783737cea403b295b5eda8e9c56d1"},
+ {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1e1f3861ea9132b32f2133788f3b14911b68102d562715d71bd0013bc45440"},
+ {file = "pandas-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:761cb99b42a69005dec2b08854fb1d4888fdf7b05db23a8c5a099e4b886a2106"},
+ {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a20628faaf444da122b2a64b1e5360cde100ee6283ae8effa0d8745153809a2e"},
+ {file = "pandas-2.2.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f5be5d03ea2073627e7111f61b9f1f0d9625dc3c4d8dda72cc827b0c58a1d042"},
+ {file = "pandas-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:a626795722d893ed6aacb64d2401d017ddc8a2341b49e0384ab9bf7112bdec30"},
+ {file = "pandas-2.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9f66419d4a41132eb7e9a73dcec9486cf5019f52d90dd35547af11bc58f8637d"},
+ {file = "pandas-2.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:57abcaeda83fb80d447f28ab0cc7b32b13978f6f733875ebd1ed14f8fbc0f4ab"},
+ {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e60f1f7dba3c2d5ca159e18c46a34e7ca7247a73b5dd1a22b6d59707ed6b899a"},
+ {file = "pandas-2.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb61dc8567b798b969bcc1fc964788f5a68214d333cade8319c7ab33e2b5d88a"},
+ {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:52826b5f4ed658fa2b729264d63f6732b8b29949c7fd234510d57c61dbeadfcd"},
+ {file = "pandas-2.2.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bde2bc699dbd80d7bc7f9cab1e23a95c4375de615860ca089f34e7c64f4a8de7"},
+ {file = "pandas-2.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:3de918a754bbf2da2381e8a3dcc45eede8cd7775b047b923f9006d5f876802ae"},
+ {file = "pandas-2.2.0.tar.gz", hash = "sha256:30b83f7c3eb217fb4d1b494a57a2fda5444f17834f5df2de6b2ffff68dc3c8e2"},
]
[package.dependencies]
numpy = {version = ">=1.26.0,<2", markers = "python_version >= \"3.12\""}
python-dateutil = ">=2.8.2"
pytz = ">=2020.1"
-tzdata = ">=2022.1"
+tzdata = ">=2022.7"
[package.extras]
-all = ["PyQt5 (>=5.15.6)", "SQLAlchemy (>=1.4.36)", "beautifulsoup4 (>=4.11.1)", "bottleneck (>=1.3.4)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=0.8.1)", "fsspec (>=2022.05.0)", "gcsfs (>=2022.05.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.8.0)", "matplotlib (>=3.6.1)", "numba (>=0.55.2)", "numexpr (>=2.8.0)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pandas-gbq (>=0.17.5)", "psycopg2 (>=2.9.3)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.5)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "pyxlsb (>=1.0.9)", "qtpy (>=2.2.0)", "s3fs (>=2022.05.0)", "scipy (>=1.8.1)", "tables (>=3.7.0)", "tabulate (>=0.8.10)", "xarray (>=2022.03.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)", "zstandard (>=0.17.0)"]
-aws = ["s3fs (>=2022.05.0)"]
-clipboard = ["PyQt5 (>=5.15.6)", "qtpy (>=2.2.0)"]
-compression = ["zstandard (>=0.17.0)"]
-computation = ["scipy (>=1.8.1)", "xarray (>=2022.03.0)"]
+all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"]
+aws = ["s3fs (>=2022.11.0)"]
+clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"]
+compression = ["zstandard (>=0.19.0)"]
+computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"]
consortium-standard = ["dataframe-api-compat (>=0.1.7)"]
-excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.10)", "pyxlsb (>=1.0.9)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.3)"]
-feather = ["pyarrow (>=7.0.0)"]
-fss = ["fsspec (>=2022.05.0)"]
-gcp = ["gcsfs (>=2022.05.0)", "pandas-gbq (>=0.17.5)"]
-hdf5 = ["tables (>=3.7.0)"]
-html = ["beautifulsoup4 (>=4.11.1)", "html5lib (>=1.1)", "lxml (>=4.8.0)"]
-mysql = ["SQLAlchemy (>=1.4.36)", "pymysql (>=1.0.2)"]
-output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.8.10)"]
-parquet = ["pyarrow (>=7.0.0)"]
-performance = ["bottleneck (>=1.3.4)", "numba (>=0.55.2)", "numexpr (>=2.8.0)"]
-plot = ["matplotlib (>=3.6.1)"]
-postgresql = ["SQLAlchemy (>=1.4.36)", "psycopg2 (>=2.9.3)"]
-spss = ["pyreadstat (>=1.1.5)"]
-sql-other = ["SQLAlchemy (>=1.4.36)"]
+excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"]
+feather = ["pyarrow (>=10.0.1)"]
+fss = ["fsspec (>=2022.11.0)"]
+gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"]
+hdf5 = ["tables (>=3.8.0)"]
+html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"]
+mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"]
+output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"]
+parquet = ["pyarrow (>=10.0.1)"]
+performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"]
+plot = ["matplotlib (>=3.6.3)"]
+postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"]
+spss = ["pyreadstat (>=1.2.0)"]
+sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"]
test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"]
-xml = ["lxml (>=4.8.0)"]
+xml = ["lxml (>=4.9.2)"]
[[package]]
name = "pandocfilters"
-version = "1.5.0"
+version = "1.5.1"
description = "Utilities for writing pandoc filters in python"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [
- {file = "pandocfilters-1.5.0-py2.py3-none-any.whl", hash = "sha256:33aae3f25fd1a026079f5d27bdd52496f0e0803b3469282162bafdcbdf6ef14f"},
- {file = "pandocfilters-1.5.0.tar.gz", hash = "sha256:0b679503337d233b4339a817bfc8c50064e2eff681314376a47cb582305a7a38"},
+ {file = "pandocfilters-1.5.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"},
+ {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"},
]
[[package]]
@@ -2020,27 +2027,27 @@ wcwidth = "*"
[[package]]
name = "psutil"
-version = "5.9.7"
+version = "5.9.8"
description = "Cross-platform lib for process and system monitoring in Python."
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
- {file = "psutil-5.9.7-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0bd41bf2d1463dfa535942b2a8f0e958acf6607ac0be52265ab31f7923bcd5e6"},
- {file = "psutil-5.9.7-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:5794944462509e49d4d458f4dbfb92c47539e7d8d15c796f141f474010084056"},
- {file = "psutil-5.9.7-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:fe361f743cb3389b8efda21980d93eb55c1f1e3898269bc9a2a1d0bb7b1f6508"},
- {file = "psutil-5.9.7-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:e469990e28f1ad738f65a42dcfc17adaed9d0f325d55047593cb9033a0ab63df"},
- {file = "psutil-5.9.7-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:3c4747a3e2ead1589e647e64aad601981f01b68f9398ddf94d01e3dc0d1e57c7"},
- {file = "psutil-5.9.7-cp27-none-win32.whl", hash = "sha256:1d4bc4a0148fdd7fd8f38e0498639ae128e64538faa507df25a20f8f7fb2341c"},
- {file = "psutil-5.9.7-cp27-none-win_amd64.whl", hash = "sha256:4c03362e280d06bbbfcd52f29acd79c733e0af33d707c54255d21029b8b32ba6"},
- {file = "psutil-5.9.7-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ea36cc62e69a13ec52b2f625c27527f6e4479bca2b340b7a452af55b34fcbe2e"},
- {file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1132704b876e58d277168cd729d64750633d5ff0183acf5b3c986b8466cd0284"},
- {file = "psutil-5.9.7-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe8b7f07948f1304497ce4f4684881250cd859b16d06a1dc4d7941eeb6233bfe"},
- {file = "psutil-5.9.7-cp36-cp36m-win32.whl", hash = "sha256:b27f8fdb190c8c03914f908a4555159327d7481dac2f01008d483137ef3311a9"},
- {file = "psutil-5.9.7-cp36-cp36m-win_amd64.whl", hash = "sha256:44969859757f4d8f2a9bd5b76eba8c3099a2c8cf3992ff62144061e39ba8568e"},
- {file = "psutil-5.9.7-cp37-abi3-win32.whl", hash = "sha256:c727ca5a9b2dd5193b8644b9f0c883d54f1248310023b5ad3e92036c5e2ada68"},
- {file = "psutil-5.9.7-cp37-abi3-win_amd64.whl", hash = "sha256:f37f87e4d73b79e6c5e749440c3113b81d1ee7d26f21c19c47371ddea834f414"},
- {file = "psutil-5.9.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:032f4f2c909818c86cea4fe2cc407f1c0f0cde8e6c6d702b28b8ce0c0d143340"},
- {file = "psutil-5.9.7.tar.gz", hash = "sha256:3f02134e82cfb5d089fddf20bb2e03fd5cd52395321d1c8458a9e58500ff417c"},
+ {file = "psutil-5.9.8-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:26bd09967ae00920df88e0352a91cff1a78f8d69b3ecabbfe733610c0af486c8"},
+ {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:05806de88103b25903dff19bb6692bd2e714ccf9e668d050d144012055cbca73"},
+ {file = "psutil-5.9.8-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:611052c4bc70432ec770d5d54f64206aa7203a101ec273a0cd82418c86503bb7"},
+ {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:50187900d73c1381ba1454cf40308c2bf6f34268518b3f36a9b663ca87e65e36"},
+ {file = "psutil-5.9.8-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:02615ed8c5ea222323408ceba16c60e99c3f91639b07da6373fb7e6539abc56d"},
+ {file = "psutil-5.9.8-cp27-none-win32.whl", hash = "sha256:36f435891adb138ed3c9e58c6af3e2e6ca9ac2f365efe1f9cfef2794e6c93b4e"},
+ {file = "psutil-5.9.8-cp27-none-win_amd64.whl", hash = "sha256:bd1184ceb3f87651a67b2708d4c3338e9b10c5df903f2e3776b62303b26cb631"},
+ {file = "psutil-5.9.8-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:aee678c8720623dc456fa20659af736241f575d79429a0e5e9cf88ae0605cc81"},
+ {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8cb6403ce6d8e047495a701dc7c5bd788add903f8986d523e3e20b98b733e421"},
+ {file = "psutil-5.9.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d06016f7f8625a1825ba3732081d77c94589dca78b7a3fc072194851e88461a4"},
+ {file = "psutil-5.9.8-cp36-cp36m-win32.whl", hash = "sha256:7d79560ad97af658a0f6adfef8b834b53f64746d45b403f225b85c5c2c140eee"},
+ {file = "psutil-5.9.8-cp36-cp36m-win_amd64.whl", hash = "sha256:27cc40c3493bb10de1be4b3f07cae4c010ce715290a5be22b98493509c6299e2"},
+ {file = "psutil-5.9.8-cp37-abi3-win32.whl", hash = "sha256:bc56c2a1b0d15aa3eaa5a60c9f3f8e3e565303b465dbf57a1b730e7a2b9844e0"},
+ {file = "psutil-5.9.8-cp37-abi3-win_amd64.whl", hash = "sha256:8db4c1b57507eef143a15a6884ca10f7c73876cdf5d51e713151c1236a0e68cf"},
+ {file = "psutil-5.9.8-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:d16bbddf0693323b8c6123dd804100241da461e41d6e332fb0ba6058f630f8c8"},
+ {file = "psutil-5.9.8.tar.gz", hash = "sha256:6be126e3225486dff286a8fb9a06246a5253f4c7c53b475ea5f5ac934e64194c"},
]
[package.extras]
@@ -2714,110 +2721,110 @@ files = [
[[package]]
name = "rpds-py"
-version = "0.16.2"
+version = "0.17.1"
description = "Python bindings to Rust's persistent data structures (rpds)"
optional = false
python-versions = ">=3.8"
files = [
- {file = "rpds_py-0.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:509b617ac787cd1149600e731db9274ebbef094503ca25158e6f23edaba1ca8f"},
- {file = "rpds_py-0.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:413b9c17388bbd0d87a329d8e30c1a4c6e44e2bb25457f43725a8e6fe4161e9e"},
- {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2946b120718eba9af2b4dd103affc1164a87b9e9ebff8c3e4c05d7b7a7e274e2"},
- {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:35ae5ece284cf36464eb160880018cf6088a9ac5ddc72292a6092b6ef3f4da53"},
- {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3dc6a7620ba7639a3db6213da61312cb4aa9ac0ca6e00dc1cbbdc21c2aa6eb57"},
- {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8cb6fe8ecdfffa0e711a75c931fb39f4ba382b4b3ccedeca43f18693864fe850"},
- {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6dace7b26a13353e24613417ce2239491b40a6ad44e5776a18eaff7733488b44"},
- {file = "rpds_py-0.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1bdbc5fcb04a7309074de6b67fa9bc4b418ab3fc435fec1f2779a0eced688d04"},
- {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f42e25c016927e2a6b1ce748112c3ab134261fc2ddc867e92d02006103e1b1b7"},
- {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:eab36eae3f3e8e24b05748ec9acc66286662f5d25c52ad70cadab544e034536b"},
- {file = "rpds_py-0.16.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0474df4ade9a3b4af96c3d36eb81856cb9462e4c6657d4caecfd840d2a13f3c9"},
- {file = "rpds_py-0.16.2-cp310-none-win32.whl", hash = "sha256:84c5a4d1f9dd7e2d2c44097fb09fffe728629bad31eb56caf97719e55575aa82"},
- {file = "rpds_py-0.16.2-cp310-none-win_amd64.whl", hash = "sha256:2bd82db36cd70b3628c0c57d81d2438e8dd4b7b32a6a9f25f24ab0e657cb6c4e"},
- {file = "rpds_py-0.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:adc0c3d6fc6ae35fee3e4917628983f6ce630d513cbaad575b4517d47e81b4bb"},
- {file = "rpds_py-0.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ec23fcad480e77ede06cf4127a25fc440f7489922e17fc058f426b5256ee0edb"},
- {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07aab64e2808c3ebac2a44f67e9dc0543812b715126dfd6fe4264df527556cb6"},
- {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a4ebb8b20bd09c5ce7884c8f0388801100f5e75e7f733b1b6613c713371feefc"},
- {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3d7e2ea25d3517c6d7e5a1cc3702cffa6bd18d9ef8d08d9af6717fc1c700eed"},
- {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f28ac0e8e7242d140f99402a903a2c596ab71550272ae9247ad78f9a932b5698"},
- {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19f00f57fdd38db4bb5ad09f9ead1b535332dbf624200e9029a45f1f35527ebb"},
- {file = "rpds_py-0.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3da5a4c56953bdbf6d04447c3410309616c54433146ccdb4a277b9cb499bc10e"},
- {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ec2e1cf025b2c0f48ec17ff3e642661da7ee332d326f2e6619366ce8e221f018"},
- {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e0441fb4fdd39a230477b2ca9be90868af64425bfe7b122b57e61e45737a653b"},
- {file = "rpds_py-0.16.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9f0350ef2fba5f34eb0c9000ea328e51b9572b403d2f7f3b19f24085f6f598e8"},
- {file = "rpds_py-0.16.2-cp311-none-win32.whl", hash = "sha256:5a80e2f83391ad0808b4646732af2a7b67550b98f0cae056cb3b40622a83dbb3"},
- {file = "rpds_py-0.16.2-cp311-none-win_amd64.whl", hash = "sha256:e04e56b4ca7a770593633556e8e9e46579d66ec2ada846b401252a2bdcf70a6d"},
- {file = "rpds_py-0.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:5e6caa3809e50690bd92fa490f5c38caa86082c8c3315aa438bce43786d5e90d"},
- {file = "rpds_py-0.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e53b9b25cac9065328901713a7e9e3b12e4f57ef4280b370fbbf6fef2052eef"},
- {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:af27423662f32d7501a00c5e7342f7dbd1e4a718aea7a239781357d15d437133"},
- {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:43d4dd5fb16eb3825742bad8339d454054261ab59fed2fbac84e1d84d5aae7ba"},
- {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e061de3b745fe611e23cd7318aec2c8b0e4153939c25c9202a5811ca911fd733"},
- {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b811d182ad17ea294f2ec63c0621e7be92a1141e1012383461872cead87468f"},
- {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5552f328eaef1a75ff129d4d0c437bf44e43f9436d3996e8eab623ea0f5fcf73"},
- {file = "rpds_py-0.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dcbe1f8dd179e4d69b70b1f1d9bb6fd1e7e1bdc9c9aad345cdeb332e29d40748"},
- {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8aad80645a011abae487d356e0ceb359f4938dfb6f7bcc410027ed7ae4f7bb8b"},
- {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b6f5549d6ed1da9bfe3631ca9483ae906f21410be2445b73443fa9f017601c6f"},
- {file = "rpds_py-0.16.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d452817e0d9c749c431a1121d56a777bd7099b720b3d1c820f1725cb40928f58"},
- {file = "rpds_py-0.16.2-cp312-none-win32.whl", hash = "sha256:888a97002e986eca10d8546e3c8b97da1d47ad8b69726dcfeb3e56348ebb28a3"},
- {file = "rpds_py-0.16.2-cp312-none-win_amd64.whl", hash = "sha256:d8dda2a806dfa4a9b795950c4f5cc56d6d6159f7d68080aedaff3bdc9b5032f5"},
- {file = "rpds_py-0.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:071980663c273bf3d388fe5c794c547e6f35ba3335477072c713a3176bf14a60"},
- {file = "rpds_py-0.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:726ac36e8a3bb8daef2fd482534cabc5e17334052447008405daca7ca04a3108"},
- {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9e557db6a177470316c82f023e5d571811c9a4422b5ea084c85da9aa3c035fc"},
- {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:90123853fc8b1747f80b0d354be3d122b4365a93e50fc3aacc9fb4c2488845d6"},
- {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a61f659665a39a4d17d699ab3593d7116d66e1e2e3f03ef3fb8f484e91908808"},
- {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc97f0640e91d7776530f06e6836c546c1c752a52de158720c4224c9e8053cad"},
- {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a54e99a2b9693a37ebf245937fd6e9228b4cbd64b9cc961e1f3391ec6c7391"},
- {file = "rpds_py-0.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd4b677d929cf1f6bac07ad76e0f2d5de367e6373351c01a9c0a39f6b21b4a8b"},
- {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:5ef00873303d678aaf8b0627e111fd434925ca01c657dbb2641410f1cdaef261"},
- {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:349cb40897fd529ca15317c22c0eab67f5ac5178b5bd2c6adc86172045210acc"},
- {file = "rpds_py-0.16.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:2ddef620e70eaffebed5932ce754d539c0930f676aae6212f8e16cd9743dd365"},
- {file = "rpds_py-0.16.2-cp38-none-win32.whl", hash = "sha256:882ce6e25e585949c3d9f9abd29202367175e0aab3aba0c58c9abbb37d4982ff"},
- {file = "rpds_py-0.16.2-cp38-none-win_amd64.whl", hash = "sha256:f4bd4578e44f26997e9e56c96dedc5f1af43cc9d16c4daa29c771a00b2a26851"},
- {file = "rpds_py-0.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:69ac7ea9897ec201ce68b48582f3eb34a3f9924488a5432a93f177bf76a82a7e"},
- {file = "rpds_py-0.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a9880b4656efe36ccad41edc66789e191e5ee19a1ea8811e0aed6f69851a82f4"},
- {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee94cb58c0ba2c62ee108c2b7c9131b2c66a29e82746e8fa3aa1a1effbd3dcf1"},
- {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:24f7a2eb3866a9e91f4599851e0c8d39878a470044875c49bd528d2b9b88361c"},
- {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ca57468da2d9a660bcf8961637c85f2fbb2aa64d9bc3f9484e30c3f9f67b1dd7"},
- {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ccd4e400309e1f34a5095bf9249d371f0fd60f8a3a5c4a791cad7b99ce1fd38d"},
- {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80443fe2f7b3ea3934c5d75fb0e04a5dbb4a8e943e5ff2de0dec059202b70a8b"},
- {file = "rpds_py-0.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4d6a9f052e72d493efd92a77f861e45bab2f6be63e37fa8ecf0c6fd1a58fedb0"},
- {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:35953f4f2b3216421af86fd236b7c0c65935936a94ea83ddbd4904ba60757773"},
- {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:981d135c7cdaf6cd8eadae1c950de43b976de8f09d8e800feed307140d3d6d00"},
- {file = "rpds_py-0.16.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d0dd7ed2f16df2e129496e7fbe59a34bc2d7fc8db443a606644d069eb69cbd45"},
- {file = "rpds_py-0.16.2-cp39-none-win32.whl", hash = "sha256:703d95c75a72e902544fda08e965885525e297578317989fd15a6ce58414b41d"},
- {file = "rpds_py-0.16.2-cp39-none-win_amd64.whl", hash = "sha256:e93ec1b300acf89730cf27975ef574396bc04edecc358e9bd116fb387a123239"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:44627b6ca7308680a70766454db5249105fa6344853af6762eaad4158a2feebe"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:3f91df8e6dbb7360e176d1affd5fb0246d2b88d16aa5ebc7db94fd66b68b61da"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d904c5693e08bad240f16d79305edba78276be87061c872a4a15e2c301fa2c0"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:290a81cfbe4673285cdf140ec5cd1658ffbf63ab359f2b352ebe172e7cfa5bf0"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b634c5ec0103c5cbebc24ebac4872b045cccb9456fc59efdcf6fe39775365bd2"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a297a4d08cc67c7466c873c78039d87840fb50d05473db0ec1b7b03d179bf322"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2e75e17bd0bb66ee34a707da677e47c14ee51ccef78ed6a263a4cc965a072a1"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f1b9d9260e06ea017feb7172976ab261e011c1dc2f8883c7c274f6b2aabfe01a"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:162d7cd9cd311c1b0ff1c55a024b8f38bd8aad1876b648821da08adc40e95734"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:9b32f742ce5b57201305f19c2ef7a184b52f6f9ba6871cc042c2a61f0d6b49b8"},
- {file = "rpds_py-0.16.2-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac08472f41ea77cd6a5dae36ae7d4ed3951d6602833af87532b556c1b4601d63"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:495a14b72bbe217f2695dcd9b5ab14d4f8066a00f5d209ed94f0aca307f85f6e"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:8d6b6937ae9eac6d6c0ca3c42774d89fa311f55adff3970fb364b34abde6ed3d"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a61226465bda9283686db8f17d02569a98e4b13c637be5a26d44aa1f1e361c2"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5cf6af100ffb5c195beec11ffaa8cf8523057f123afa2944e6571d54da84cdc9"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6df15846ee3fb2e6397fe25d7ca6624af9f89587f3f259d177b556fed6bebe2c"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1be2f033df1b8be8c3167ba3c29d5dca425592ee31e35eac52050623afba5772"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:96f957d6ab25a78b9e7fc9749d754b98eac825a112b4e666525ce89afcbd9ed5"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:088396c7c70e59872f67462fcac3ecbded5233385797021976a09ebd55961dfe"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4c46ad6356e1561f2a54f08367d1d2e70a0a1bb2db2282d2c1972c1d38eafc3b"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:47713dc4fce213f5c74ca8a1f6a59b622fc1b90868deb8e8e4d993e421b4b39d"},
- {file = "rpds_py-0.16.2-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:f811771019f063bbd0aa7bb72c8a934bc13ebacb4672d712fc1639cfd314cccc"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f19afcfc0dd0dca35694df441e9b0f95bc231b512f51bded3c3d8ca32153ec19"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a4b682c5775d6a3d21e314c10124599976809455ee67020e8e72df1769b87bc3"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c647ca87fc0ebe808a41de912e9a1bfef9acb85257e5d63691364ac16b81c1f0"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:302bd4983bbd47063e452c38be66153760112f6d3635c7eeefc094299fa400a9"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf721ede3eb7b829e4a9b8142bd55db0bdc82902720548a703f7e601ee13bdc3"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:358dafc89ce3894c7f486c615ba914609f38277ef67f566abc4c854d23b997fa"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cad0f59ee3dc35526039f4bc23642d52d5f6616b5f687d846bfc6d0d6d486db0"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cffa76b385dfe1e38527662a302b19ffb0e7f5cf7dd5e89186d2c94a22dd9d0c"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:83640a5d7cd3bff694747d50436b8b541b5b9b9782b0c8c1688931d6ee1a1f2d"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:ed99b4f7179d2111702020fd7d156e88acd533f5a7d3971353e568b6051d5c97"},
- {file = "rpds_py-0.16.2-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:4022b9dc620e14f30201a8a73898a873c8e910cb642bcd2f3411123bc527f6ac"},
- {file = "rpds_py-0.16.2.tar.gz", hash = "sha256:781ef8bfc091b19960fc0142a23aedadafa826bc32b433fdfe6fd7f964d7ef44"},
+ {file = "rpds_py-0.17.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:4128980a14ed805e1b91a7ed551250282a8ddf8201a4e9f8f5b7e6225f54170d"},
+ {file = "rpds_py-0.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ff1dcb8e8bc2261a088821b2595ef031c91d499a0c1b031c152d43fe0a6ecec8"},
+ {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d65e6b4f1443048eb7e833c2accb4fa7ee67cc7d54f31b4f0555b474758bee55"},
+ {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a71169d505af63bb4d20d23a8fbd4c6ce272e7bce6cc31f617152aa784436f29"},
+ {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:436474f17733c7dca0fbf096d36ae65277e8645039df12a0fa52445ca494729d"},
+ {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:10162fe3f5f47c37ebf6d8ff5a2368508fe22007e3077bf25b9c7d803454d921"},
+ {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:720215373a280f78a1814becb1312d4e4d1077b1202a56d2b0815e95ccb99ce9"},
+ {file = "rpds_py-0.17.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:70fcc6c2906cfa5c6a552ba7ae2ce64b6c32f437d8f3f8eea49925b278a61453"},
+ {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91e5a8200e65aaac342a791272c564dffcf1281abd635d304d6c4e6b495f29dc"},
+ {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:99f567dae93e10be2daaa896e07513dd4bf9c2ecf0576e0533ac36ba3b1d5394"},
+ {file = "rpds_py-0.17.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:24e4900a6643f87058a27320f81336d527ccfe503984528edde4bb660c8c8d59"},
+ {file = "rpds_py-0.17.1-cp310-none-win32.whl", hash = "sha256:0bfb09bf41fe7c51413f563373e5f537eaa653d7adc4830399d4e9bdc199959d"},
+ {file = "rpds_py-0.17.1-cp310-none-win_amd64.whl", hash = "sha256:20de7b7179e2031a04042e85dc463a93a82bc177eeba5ddd13ff746325558aa6"},
+ {file = "rpds_py-0.17.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:65dcf105c1943cba45d19207ef51b8bc46d232a381e94dd38719d52d3980015b"},
+ {file = "rpds_py-0.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:01f58a7306b64e0a4fe042047dd2b7d411ee82e54240284bab63e325762c1147"},
+ {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:071bc28c589b86bc6351a339114fb7a029f5cddbaca34103aa573eba7b482382"},
+ {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ae35e8e6801c5ab071b992cb2da958eee76340e6926ec693b5ff7d6381441745"},
+ {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149c5cd24f729e3567b56e1795f74577aa3126c14c11e457bec1b1c90d212e38"},
+ {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e796051f2070f47230c745d0a77a91088fbee2cc0502e9b796b9c6471983718c"},
+ {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e820ee1004327609b28db8307acc27f5f2e9a0b185b2064c5f23e815f248f8"},
+ {file = "rpds_py-0.17.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1957a2ab607f9added64478a6982742eb29f109d89d065fa44e01691a20fc20a"},
+ {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8587fd64c2a91c33cdc39d0cebdaf30e79491cc029a37fcd458ba863f8815383"},
+ {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4dc889a9d8a34758d0fcc9ac86adb97bab3fb7f0c4d29794357eb147536483fd"},
+ {file = "rpds_py-0.17.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:2953937f83820376b5979318840f3ee47477d94c17b940fe31d9458d79ae7eea"},
+ {file = "rpds_py-0.17.1-cp311-none-win32.whl", hash = "sha256:1bfcad3109c1e5ba3cbe2f421614e70439f72897515a96c462ea657261b96518"},
+ {file = "rpds_py-0.17.1-cp311-none-win_amd64.whl", hash = "sha256:99da0a4686ada4ed0f778120a0ea8d066de1a0a92ab0d13ae68492a437db78bf"},
+ {file = "rpds_py-0.17.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:1dc29db3900cb1bb40353772417800f29c3d078dbc8024fd64655a04ee3c4bdf"},
+ {file = "rpds_py-0.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:82ada4a8ed9e82e443fcef87e22a3eed3654dd3adf6e3b3a0deb70f03e86142a"},
+ {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d36b2b59e8cc6e576f8f7b671e32f2ff43153f0ad6d0201250a7c07f25d570e"},
+ {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3677fcca7fb728c86a78660c7fb1b07b69b281964673f486ae72860e13f512ad"},
+ {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:516fb8c77805159e97a689e2f1c80655c7658f5af601c34ffdb916605598cda2"},
+ {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df3b6f45ba4515632c5064e35ca7f31d51d13d1479673185ba8f9fefbbed58b9"},
+ {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a967dd6afda7715d911c25a6ba1517975acd8d1092b2f326718725461a3d33f9"},
+ {file = "rpds_py-0.17.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbbb95e6fc91ea3102505d111b327004d1c4ce98d56a4a02e82cd451f9f57140"},
+ {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02866e060219514940342a1f84303a1ef7a1dad0ac311792fbbe19b521b489d2"},
+ {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:2528ff96d09f12e638695f3a2e0c609c7b84c6df7c5ae9bfeb9252b6fa686253"},
+ {file = "rpds_py-0.17.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:bd345a13ce06e94c753dab52f8e71e5252aec1e4f8022d24d56decd31e1b9b23"},
+ {file = "rpds_py-0.17.1-cp312-none-win32.whl", hash = "sha256:2a792b2e1d3038daa83fa474d559acfd6dc1e3650ee93b2662ddc17dbff20ad1"},
+ {file = "rpds_py-0.17.1-cp312-none-win_amd64.whl", hash = "sha256:292f7344a3301802e7c25c53792fae7d1593cb0e50964e7bcdcc5cf533d634e3"},
+ {file = "rpds_py-0.17.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:8ffe53e1d8ef2520ebcf0c9fec15bb721da59e8ef283b6ff3079613b1e30513d"},
+ {file = "rpds_py-0.17.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4341bd7579611cf50e7b20bb8c2e23512a3dc79de987a1f411cb458ab670eb90"},
+ {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f4eb548daf4836e3b2c662033bfbfc551db58d30fd8fe660314f86bf8510b93"},
+ {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b686f25377f9c006acbac63f61614416a6317133ab7fafe5de5f7dc8a06d42eb"},
+ {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e21b76075c01d65d0f0f34302b5a7457d95721d5e0667aea65e5bb3ab415c25"},
+ {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b86b21b348f7e5485fae740d845c65a880f5d1eda1e063bc59bef92d1f7d0c55"},
+ {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f175e95a197f6a4059b50757a3dca33b32b61691bdbd22c29e8a8d21d3914cae"},
+ {file = "rpds_py-0.17.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1701fc54460ae2e5efc1dd6350eafd7a760f516df8dbe51d4a1c79d69472fbd4"},
+ {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:9051e3d2af8f55b42061603e29e744724cb5f65b128a491446cc029b3e2ea896"},
+ {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7450dbd659fed6dd41d1a7d47ed767e893ba402af8ae664c157c255ec6067fde"},
+ {file = "rpds_py-0.17.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5a024fa96d541fd7edaa0e9d904601c6445e95a729a2900c5aec6555fe921ed6"},
+ {file = "rpds_py-0.17.1-cp38-none-win32.whl", hash = "sha256:da1ead63368c04a9bded7904757dfcae01eba0e0f9bc41d3d7f57ebf1c04015a"},
+ {file = "rpds_py-0.17.1-cp38-none-win_amd64.whl", hash = "sha256:841320e1841bb53fada91c9725e766bb25009cfd4144e92298db296fb6c894fb"},
+ {file = "rpds_py-0.17.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f6c43b6f97209e370124baf2bf40bb1e8edc25311a158867eb1c3a5d449ebc7a"},
+ {file = "rpds_py-0.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7d63ec01fe7c76c2dbb7e972fece45acbb8836e72682bde138e7e039906e2c"},
+ {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:81038ff87a4e04c22e1d81f947c6ac46f122e0c80460b9006e6517c4d842a6ec"},
+ {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:810685321f4a304b2b55577c915bece4c4a06dfe38f6e62d9cc1d6ca8ee86b99"},
+ {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:25f071737dae674ca8937a73d0f43f5a52e92c2d178330b4c0bb6ab05586ffa6"},
+ {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa5bfb13f1e89151ade0eb812f7b0d7a4d643406caaad65ce1cbabe0a66d695f"},
+ {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dfe07308b311a8293a0d5ef4e61411c5c20f682db6b5e73de6c7c8824272c256"},
+ {file = "rpds_py-0.17.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a000133a90eea274a6f28adc3084643263b1e7c1a5a66eb0a0a7a36aa757ed74"},
+ {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5d0e8a6434a3fbf77d11448c9c25b2f25244226cfbec1a5159947cac5b8c5fa4"},
+ {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:efa767c220d94aa4ac3a6dd3aeb986e9f229eaf5bce92d8b1b3018d06bed3772"},
+ {file = "rpds_py-0.17.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:dbc56680ecf585a384fbd93cd42bc82668b77cb525343170a2d86dafaed2a84b"},
+ {file = "rpds_py-0.17.1-cp39-none-win32.whl", hash = "sha256:270987bc22e7e5a962b1094953ae901395e8c1e1e83ad016c5cfcfff75a15a3f"},
+ {file = "rpds_py-0.17.1-cp39-none-win_amd64.whl", hash = "sha256:2a7b2f2f56a16a6d62e55354dd329d929560442bd92e87397b7a9586a32e3e76"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a3264e3e858de4fc601741498215835ff324ff2482fd4e4af61b46512dd7fc83"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:f2f3b28b40fddcb6c1f1f6c88c6f3769cd933fa493ceb79da45968a21dccc920"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9584f8f52010295a4a417221861df9bea4c72d9632562b6e59b3c7b87a1522b7"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c64602e8be701c6cfe42064b71c84ce62ce66ddc6422c15463fd8127db3d8066"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:060f412230d5f19fc8c8b75f315931b408d8ebf56aec33ef4168d1b9e54200b1"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b9412abdf0ba70faa6e2ee6c0cc62a8defb772e78860cef419865917d86c7342"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9737bdaa0ad33d34c0efc718741abaafce62fadae72c8b251df9b0c823c63b22"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9f0e4dc0f17dcea4ab9d13ac5c666b6b5337042b4d8f27e01b70fae41dd65c57"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:1db228102ab9d1ff4c64148c96320d0be7044fa28bd865a9ce628ce98da5973d"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d8bbd8e56f3ba25a7d0cf980fc42b34028848a53a0e36c9918550e0280b9d0b6"},
+ {file = "rpds_py-0.17.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:be22ae34d68544df293152b7e50895ba70d2a833ad9566932d750d3625918b82"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf046179d011e6114daf12a534d874958b039342b347348a78b7cdf0dd9d6041"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:1a746a6d49665058a5896000e8d9d2f1a6acba8a03b389c1e4c06e11e0b7f40d"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0b8bf5b8db49d8fd40f54772a1dcf262e8be0ad2ab0206b5a2ec109c176c0a4"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f7f4cb1f173385e8a39c29510dd11a78bf44e360fb75610594973f5ea141028b"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7fbd70cb8b54fe745301921b0816c08b6d917593429dfc437fd024b5ba713c58"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bdf1303df671179eaf2cb41e8515a07fc78d9d00f111eadbe3e14262f59c3d0"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fad059a4bd14c45776600d223ec194e77db6c20255578bb5bcdd7c18fd169361"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3664d126d3388a887db44c2e293f87d500c4184ec43d5d14d2d2babdb4c64cad"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:698ea95a60c8b16b58be9d854c9f993c639f5c214cf9ba782eca53a8789d6b19"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_i686.whl", hash = "sha256:c3d2010656999b63e628a3c694f23020322b4178c450dc478558a2b6ef3cb9bb"},
+ {file = "rpds_py-0.17.1-pp38-pypy38_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:938eab7323a736533f015e6069a7d53ef2dcc841e4e533b782c2bfb9fb12d84b"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:1e626b365293a2142a62b9a614e1f8e331b28f3ca57b9f05ebbf4cf2a0f0bdc5"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:380e0df2e9d5d5d339803cfc6d183a5442ad7ab3c63c2a0982e8c824566c5ccc"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b760a56e080a826c2e5af09002c1a037382ed21d03134eb6294812dda268c811"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5576ee2f3a309d2bb403ec292d5958ce03953b0e57a11d224c1f134feaf8c40f"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3c3461ebb4c4f1bbc70b15d20b565759f97a5aaf13af811fcefc892e9197ba"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:637b802f3f069a64436d432117a7e58fab414b4e27a7e81049817ae94de45d8d"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffee088ea9b593cc6160518ba9bd319b5475e5f3e578e4552d63818773c6f56a"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3ac732390d529d8469b831949c78085b034bff67f584559340008d0f6041a049"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:93432e747fb07fa567ad9cc7aaadd6e29710e515aabf939dfbed8046041346c6"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7b7d9ca34542099b4e185b3c2a2b2eda2e318a7dbde0b0d83357a6d4421b5296"},
+ {file = "rpds_py-0.17.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:0387ce69ba06e43df54e43968090f3626e231e4bc9150e4c3246947567695f68"},
+ {file = "rpds_py-0.17.1.tar.gz", hash = "sha256:0210b2668f24c078307260bf88bdac9d6f1093635df5123789bfee4d8d7fc8e7"},
]
[[package]]
@@ -2970,13 +2977,13 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"]
[[package]]
name = "thefuzz"
-version = "0.20.0"
+version = "0.22.1"
description = "Fuzzy string matching in python"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.8"
files = [
- {file = "thefuzz-0.20.0-py3-none-any.whl", hash = "sha256:bd2b657a12bd8518917d2d71c53125368706233b822fac688fca956730154388"},
- {file = "thefuzz-0.20.0.tar.gz", hash = "sha256:a25e49786b1c4603c7fc6e2d69e6bc660982a2919698b536ff8354e0631cc40d"},
+ {file = "thefuzz-0.22.1-py3-none-any.whl", hash = "sha256:59729b33556850b90e1093c4cf9e618af6f2e4c985df193fdf3c5b5cf02ca481"},
+ {file = "thefuzz-0.22.1.tar.gz", hash = "sha256:7138039a7ecf540da323792d8592ef9902b1d79eb78c147d4f20664de79f3680"},
]
[package.dependencies]
@@ -3129,13 +3136,13 @@ zstd = ["zstandard (>=0.18.0)"]
[[package]]
name = "uvicorn"
-version = "0.25.0"
+version = "0.26.0"
description = "The lightning-fast ASGI server."
optional = false
python-versions = ">=3.8"
files = [
- {file = "uvicorn-0.25.0-py3-none-any.whl", hash = "sha256:ce107f5d9bd02b4636001a77a4e74aab5e1e2b146868ebbad565237145af444c"},
- {file = "uvicorn-0.25.0.tar.gz", hash = "sha256:6dddbad1d7ee0f5140aba5ec138ddc9612c5109399903828b4874c9937f009c2"},
+ {file = "uvicorn-0.26.0-py3-none-any.whl", hash = "sha256:cdb58ef6b8188c6c174994b2b1ba2150a9a8ae7ea5fb2f1b856b94a815d6071d"},
+ {file = "uvicorn-0.26.0.tar.gz", hash = "sha256:48bfd350fce3c5c57af5fb4995fded8fb50da3b4feb543eb18ad7e0d54589602"},
]
[package.dependencies]
@@ -3420,4 +3427,4 @@ files = [
[metadata]
lock-version = "2.0"
python-versions = "^3.12"
-content-hash = "c6890a407056cf668f1e89fcc549ba44aa640ca5e5b56fba25838913c7da85e5"
+content-hash = "833f4a250a7fb0d0284d1028601d0fdfacd751f7181c64b6829a03d86cd9b8a6"
diff --git a/pyproject.toml b/pyproject.toml
index 69aa455..ffd7da5 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -9,12 +9,12 @@ readme = "README.md"
python = "^3.12"
fastapi = "^0.109.0"
fastf1 = "^3.2.0"
-uvicorn = { extras = ["standard"], version = "^0.25.0" }
+uvicorn = { extras = ["standard"], version = "^0.26.0" }
[tool.poetry.group.dev.dependencies]
black = "^23.12.1"
isort = "^5.13.2"
-jupyterlab = "^4.0.10"
+jupyterlab = "^4.0.11"
jupyterlab-code-formatter = "^2.2.1"
pytest = "^7.4.4"
httpx = "^0.26.0"
diff --git a/useful_commands.md b/useful_commands.md
index f4b5cb6..0f8587d 100644
--- a/useful_commands.md
+++ b/useful_commands.md
@@ -2,7 +2,8 @@
- [Poetry](#poetry)
- [Export python dependencies from poetry to requirements.txt](#export-python-dependencies-from-poetry-to-requirementstxt)
- - [Show outated packages](#show-outated-packages)
+ - [Show outdated packages](#show-outdated-packages)
+ - [Run tests using pytest](#run-tests-using-pytest)
- [Jupyter Lab](#jupyter-lab)
- [Opening jupyter lab](#opening-jupyter-lab)
- [Docker](#docker)
@@ -20,12 +21,18 @@
poetry export --without-hashes --format=requirements.txt > requirements.txt
```
-### Show outated packages
+### Show outdated packages
```sh
poetry show --outdated
```
+### Run tests using pytest
+
+```sh
+poetry run pytest -rpP
+```
+
## Jupyter Lab
### Opening jupyter lab
@@ -53,7 +60,7 @@ docker build --file Dockerfile.prod --tag backend-prod .
### Starting the containers
```sh
-docker run --detach --name backend-dev-container --publish 80:80 backend-dev
+docker run --detach --name backend-dev-container --publish 8081:8081 backend-dev
docker run --detach --name backend-staging-container --publish 80:80 backend-staging
docker run --detach --name backend-prod-container --publish 80:80 backend-prod
```