From 5a9d88a6e6266506ec3cd9909fd962b848b93470 Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Mon, 29 Jan 2024 22:48:12 +0530 Subject: [PATCH 01/17] docs: BACK-15 jira smart commits --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 759f11f..7eae460 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ poetry run pytest -rpP ### Contribution Guidelines -- _**NEVER MERGE YOUR OWN CODE; ALWAYS RAISE A PR AGAINST `dev`!**_ +- ***NEVER MERGE YOUR OWN CODE; ALWAYS RAISE A PR AGAINST `dev`!*** - Follow [conventional commit format](https://www.conventionalcommits.org/en/v1.0.0/) when authoring commit messages. - **Always pull latest changes** - There are several developers working on this project. Always pull/pull-rebase the latest, as necessary, from the branch you intend to commit your changes to. @@ -119,20 +119,24 @@ poetry run pytest -rpP - **Branches**: - `main` is the production mainline. - `staging` is the staging line. - - `dev` is the development line (_**default branch**_). + - `dev` is the development line (***default branch***). - **PR merge strategy on Github** - Code should flow in the following direction through branches: ``` feature/bug fix -> dev -> staging -> main ``` - We'll be keeping a linear commit history and so using a combination of `Rebase and merge` and `Squash and merge` merge strategies. - - Use `Rebase and merge` as _**default**_ to ensure all commits from the branch to be merged are brought in individually to the target branch. - - `Squash and merge` may be used _**ONLY**_ when bringing in changes from a feature/bug fix branch into `dev`. + - Use `Rebase and merge` as ***default*** to ensure all commits from the branch to be merged are brought in individually to the target branch. + - `Squash and merge` may be used ***ONLY** when bringing in changes from a feature/bug fix branch into `dev`. - To maintain linear commit history, ensure to use `push force` when: - Bringing `dev` on the same commit as `staging` (ie rebasing `dev` onto `staging`). - Bringing `staging` on the same commit as `main` (ie rebasing `staging` onto `main`). - [More information on git rebase](https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase). - [More information on PR merge strategies](https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/configuring-pull-request-merges/about-merge-methods-on-github). +- **Jira issue linking** + - Commits and PRs ***must*** be linked to a Jira issue. + - To do so, include the Jira issue key in the PR title and/or the commit message after the conventional commit type. + - [More information on Jira smart commits](https://support.atlassian.com/jira-software-cloud/docs/process-issues-with-smart-commits/). ## Deployment From 7a68c1f3aed2ebf8e8a16fcdd157706c1d4b262b Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Mon, 29 Jan 2024 23:33:25 +0530 Subject: [PATCH 02/17] feat: BACK-13 /schedule now provides the year --- app/main.py | 16 +- app/models.py | 19 +- app/test_main.py | 2315 +++++++++++++++++++++++----------------------- 3 files changed, 1183 insertions(+), 1167 deletions(-) diff --git a/app/main.py b/app/main.py index ba99d1e..49e59a2 100644 --- a/app/main.py +++ b/app/main.py @@ -1,5 +1,5 @@ import json -from typing import Annotated, Literal +from typing import Annotated import fastf1 from fastapi import FastAPI, HTTPException, Path, Query, status @@ -16,7 +16,7 @@ MIN_SUPPORTED_SESSION, MIN_SUPPORTED_YEAR, ) -from .models import HealthCheck, Results, Schedule, Standings +from .models import EventSchedule, HealthCheck, Results, Schedule, Standings from .utils import get_default_year # fastf1.set_log_level("WARNING") # TODO use for production and staging @@ -93,7 +93,7 @@ def get_health() -> HealthCheck: summary="Get events schedule for a Formula 1 calendar year", response_description="Return list of events schedule for a Formula 1 calendar year", status_code=status.HTTP_200_OK, - response_model=list[Schedule], + response_model=Schedule, ) def get_schedule( year: Annotated[ @@ -104,7 +104,7 @@ def get_schedule( le=MAX_SUPPORTED_YEAR, ), ] = None -) -> list[Schedule]: +) -> Schedule: """ ## Get events schedule for a Formula 1 calendar year Endpoint to get events schedule for Formula 1 calendar year. @@ -129,9 +129,13 @@ def get_schedule( event_schedule_as_json = event_schedule.to_json(orient="records") # Parse the JSON string to a JSON object - event_schedule_as_json_obj = json.loads(event_schedule_as_json) + event_schedule_as_json_obj: list[EventSchedule] = json.loads(event_schedule_as_json) + schedule_as_json_obj: Schedule = { + "year": year, + "EventSchedule": event_schedule_as_json_obj, + } - return event_schedule_as_json_obj + return schedule_as_json_obj @app.get( diff --git a/app/models.py b/app/models.py index fefb918..cf89834 100644 --- a/app/models.py +++ b/app/models.py @@ -7,8 +7,8 @@ class ReadRoot(BaseModel): we_are: str = "SlickTelemetry" -class Schedule(BaseModel): - """Response model for schedule data for a Formula 1 calendar year.""" +class EventSchedule(BaseModel): + """Response model for event schedule data for a Formula 1 calendar year.""" RoundNumber: int Country: str @@ -35,6 +35,13 @@ class Schedule(BaseModel): F1ApiSupport: bool +class Schedule(BaseModel): + """Response model for event schedule data with year""" + + year: int + EventSchedule: list[EventSchedule] + + class HealthCheck(BaseModel): """Response model to validate and return when performing a health check.""" @@ -42,7 +49,7 @@ class HealthCheck(BaseModel): class Driver(BaseModel): - """Model for storing driver data""" + """Model for driver data""" driverId: str permanentNumber: str @@ -55,7 +62,7 @@ class Driver(BaseModel): class Constructor(BaseModel): - """Model for storing constructor data""" + """Model for constructor data""" constructorId: str url: str @@ -64,7 +71,7 @@ class Constructor(BaseModel): class DriverStandings(BaseModel): - """Model for storing driver standings data""" + """Model for driver standings data""" position: str positionText: str @@ -75,7 +82,7 @@ class DriverStandings(BaseModel): class ConstructorStandings(BaseModel): - """Model for storing constructor standings data""" + """Model for constructor standings data""" position: str positionText: str diff --git a/app/test_main.py b/app/test_main.py index 68b2905..b0b48a4 100644 --- a/app/test_main.py +++ b/app/test_main.py @@ -45,1165 +45,1171 @@ def test_healthcheck(): def test_get_schedule(): response = client.get("/schedule") 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, - }, - ] + assert response.json() == { + "year": 2023, + "EventSchedule": [ + { + "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, - }, - ] + assert response.json() == { + "year": 2023, + "EventSchedule": [ + { + "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 @@ -3643,7 +3649,6 @@ def test_get_results(): # endregion results - good inputs - # region results - bad inputs From e14b2998867bae026c427a703584dce2f853e564 Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Thu, 1 Feb 2024 13:29:03 +0530 Subject: [PATCH 03/17] feat(results): BACK-14 session is optional with default as race --- app/constants.py | 2 + app/main.py | 15 +- app/test_main.py | 873 ++++++++++++++++++++++++++++++++++++----------- 3 files changed, 684 insertions(+), 206 deletions(-) diff --git a/app/constants.py b/app/constants.py index 455ace1..a969c89 100644 --- a/app/constants.py +++ b/app/constants.py @@ -30,3 +30,5 @@ MIN_SUPPORTED_SESSION = 1 MAX_SUPPORTED_SESSION = 5 + +DEFAULT_SESSION_FOR_RESULTS = 5 # race diff --git a/app/main.py b/app/main.py index 49e59a2..844a7ab 100644 --- a/app/main.py +++ b/app/main.py @@ -7,6 +7,7 @@ from fastf1.ergast import Ergast from .constants import ( + DEFAULT_SESSION_FOR_RESULTS, EVENT_SCHEDULE_DATETIME_DTYPE_LIST, MAX_SUPPORTED_ROUND, MAX_SUPPORTED_SESSION, @@ -100,6 +101,7 @@ def get_schedule( int | None, Query( title="The year for which to get the schedule", + description="The year for which to get the schedule", ge=MIN_SUPPORTED_YEAR, le=MAX_SUPPORTED_YEAR, ), @@ -151,6 +153,7 @@ def get_standings( int | None, Query( title="The year for which to get the driver and constructors standing. If the season hasn't ended you will get the current standings.", + description="The year for which to get the driver and constructors standing. If the season hasn't ended you will get the current standings.", ge=MIN_SUPPORTED_YEAR, le=MAX_SUPPORTED_YEAR, ), @@ -159,6 +162,7 @@ def get_standings( int | None, Query( title="The round in a year for which to get the driver and constructor standings", + description="The round in a year for which to get the driver and constructor standings", ge=MIN_SUPPORTED_ROUND, le=MAX_SUPPORTED_ROUND, ), @@ -228,7 +232,7 @@ def get_standings( @app.get( - "/results/{year}/{round}/{session}", + "/results/{year}/{round}", tags=["results"], summary="Get session results for a given year, round and session", response_description="Return session results for a given year, round and session.", @@ -240,6 +244,7 @@ def get_results( int, Path( title="The year for which to get the results", + description="The year for which to get the results", ge=MIN_SUPPORTED_YEAR, le=MAX_SUPPORTED_YEAR, ), @@ -248,23 +253,27 @@ def get_results( int, Path( title="The round in a year for which to get the results", + description="The round in a year for which to get the results", ge=MIN_SUPPORTED_ROUND, le=MAX_SUPPORTED_ROUND, ), ], session: Annotated[ int, - Path( + Query( title="The session in a round for which to get the results", + description="The session in a round for which to get the results. (5 = race)", ge=MIN_SUPPORTED_SESSION, le=MAX_SUPPORTED_SESSION, ), - ], + ] = DEFAULT_SESSION_FOR_RESULTS, ) -> list[Results]: """ ## Get session results for a given year, round and session Endpoint to get session results for a given year, round and session. + **NOTE**: If `session` is not provided; we use the default session. Default session is the race session (5). + **Returns**: list[Results]: Returns a JSON response with the list of session results """ diff --git a/app/test_main.py b/app/test_main.py index b0b48a4..6957397 100644 --- a/app/test_main.py +++ b/app/test_main.py @@ -3181,7 +3181,7 @@ def test_get_standings_good_round_bad_year_no_input(): def test_get_results(): - response = client.get("/results/2023/5/2") + response = client.get("/results/2023/5") assert response.status_code == 200 assert response.json() == [ { @@ -3197,38 +3197,15 @@ def test_get_results(): "FullName": "Max Verstappen", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/M/MAXVER01_Max_Verstappen/maxver01.png.transform/1col/image.png", "CountryCode": "NED", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, - "Q1": None, - "Q2": None, - "Q3": None, - "Time": None, - "Status": "", - "Points": None, - }, - { - "DriverNumber": "10", - "BroadcastName": "P GASLY", - "Abbreviation": "GAS", - "DriverId": "gasly", - "TeamName": "Alpine", - "TeamColor": "2293D1", - "TeamId": "alpine", - "FirstName": "Pierre", - "LastName": "Gasly", - "FullName": "Pierre Gasly", - "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/P/PIEGAS01_Pierre_Gasly/piegas01.png.transform/1col/image.png", - "CountryCode": "FRA", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "Position": 1, + "ClassifiedPosition": "1", + "GridPosition": 9, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 5258241, + "Status": "Finished", + "Points": 26, }, { "DriverNumber": "11", @@ -3243,15 +3220,15 @@ def test_get_results(): "FullName": "Sergio Perez", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/S/SERPER01_Sergio_Perez/serper01.png.transform/1col/image.png", "CountryCode": "MEX", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "Position": 2, + "ClassifiedPosition": "2", + "GridPosition": 1, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 5384, + "Status": "Finished", + "Points": 18, }, { "DriverNumber": "14", @@ -3266,15 +3243,84 @@ def test_get_results(): "FullName": "Fernando Alonso", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/F/FERALO01_Fernando_Alonso/feralo01.png.transform/1col/image.png", "CountryCode": "ESP", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "Position": 3, + "ClassifiedPosition": "3", + "GridPosition": 2, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 26305, + "Status": "Finished", + "Points": 15, + }, + { + "DriverNumber": "63", + "BroadcastName": "G RUSSELL", + "Abbreviation": "RUS", + "DriverId": "russell", + "TeamName": "Mercedes", + "TeamColor": "6CD3BF", + "TeamId": "mercedes", + "FirstName": "George", + "LastName": "Russell", + "FullName": "George Russell", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/G/GEORUS01_George_Russell/georus01.png.transform/1col/image.png", + "CountryCode": "GBR", + "Position": 4, + "ClassifiedPosition": "4", + "GridPosition": 6, + "Q1": None, + "Q2": None, + "Q3": None, + "Time": 33229, + "Status": "Finished", + "Points": 12, + }, + { + "DriverNumber": "55", + "BroadcastName": "C SAINZ", + "Abbreviation": "SAI", + "DriverId": "sainz", + "TeamName": "Ferrari", + "TeamColor": "F91536", + "TeamId": "ferrari", + "FirstName": "Carlos", + "LastName": "Sainz", + "FullName": "Carlos Sainz", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/C/CARSAI01_Carlos_Sainz/carsai01.png.transform/1col/image.png", + "CountryCode": "ESP", + "Position": 5, + "ClassifiedPosition": "5", + "GridPosition": 3, + "Q1": None, + "Q2": None, + "Q3": None, + "Time": 42511, + "Status": "Finished", + "Points": 10, + }, + { + "DriverNumber": "44", + "BroadcastName": "L HAMILTON", + "Abbreviation": "HAM", + "DriverId": "hamilton", + "TeamName": "Mercedes", + "TeamColor": "6CD3BF", + "TeamId": "mercedes", + "FirstName": "Lewis", + "LastName": "Hamilton", + "FullName": "Lewis Hamilton", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LEWHAM01_Lewis_Hamilton/lewham01.png.transform/1col/image.png", + "CountryCode": "GBR", + "Position": 6, + "ClassifiedPosition": "6", + "GridPosition": 13, + "Q1": None, + "Q2": None, + "Q3": None, + "Time": 51249, + "Status": "Finished", + "Points": 8, }, { "DriverNumber": "16", @@ -3289,61 +3335,61 @@ def test_get_results(): "FullName": "Charles Leclerc", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/C/CHALEC01_Charles_Leclerc/chalec01.png.transform/1col/image.png", "CountryCode": "MON", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "Position": 7, + "ClassifiedPosition": "7", + "GridPosition": 7, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 52988, + "Status": "Finished", + "Points": 6, }, { - "DriverNumber": "18", - "BroadcastName": "L STROLL", - "Abbreviation": "STR", - "DriverId": "stroll", - "TeamName": "Aston Martin", - "TeamColor": "358C75", - "TeamId": "aston_martin", - "FirstName": "Lance", - "LastName": "Stroll", - "FullName": "Lance Stroll", - "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LANSTR01_Lance_Stroll/lanstr01.png.transform/1col/image.png", - "CountryCode": "CAN", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "DriverNumber": "10", + "BroadcastName": "P GASLY", + "Abbreviation": "GAS", + "DriverId": "gasly", + "TeamName": "Alpine", + "TeamColor": "2293D1", + "TeamId": "alpine", + "FirstName": "Pierre", + "LastName": "Gasly", + "FullName": "Pierre Gasly", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/P/PIEGAS01_Pierre_Gasly/piegas01.png.transform/1col/image.png", + "CountryCode": "FRA", + "Position": 8, + "ClassifiedPosition": "8", + "GridPosition": 5, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 55670, + "Status": "Finished", + "Points": 4, }, { - "DriverNumber": "2", - "BroadcastName": "L SARGEANT", - "Abbreviation": "SAR", - "DriverId": "sargeant", - "TeamName": "Williams", - "TeamColor": "37BEDD", - "TeamId": "williams", - "FirstName": "Logan", - "LastName": "Sargeant", - "FullName": "Logan Sargeant", - "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LOGSAR01_Logan_Sargeant/logsar01.png.transform/1col/image.png", - "CountryCode": "USA", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "DriverNumber": "31", + "BroadcastName": "E OCON", + "Abbreviation": "OCO", + "DriverId": "ocon", + "TeamName": "Alpine", + "TeamColor": "2293D1", + "TeamId": "alpine", + "FirstName": "Esteban", + "LastName": "Ocon", + "FullName": "Esteban Ocon", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/E/ESTOCO01_Esteban_Ocon/estoco01.png.transform/1col/image.png", + "CountryCode": "FRA", + "Position": 9, + "ClassifiedPosition": "9", + "GridPosition": 8, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 58123, + "Status": "Finished", + "Points": 2, }, { "DriverNumber": "20", @@ -3358,38 +3404,15 @@ def test_get_results(): "FullName": "Kevin Magnussen", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/K/KEVMAG01_Kevin_Magnussen/kevmag01.png.transform/1col/image.png", "CountryCode": "DEN", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, - "Q1": None, - "Q2": None, - "Q3": None, - "Time": None, - "Status": "", - "Points": None, - }, - { - "DriverNumber": "21", - "BroadcastName": "N DE VRIES", - "Abbreviation": "DEV", - "DriverId": "de_vries", - "TeamName": "AlphaTauri", - "TeamColor": "5E8FAA", - "TeamId": "alphatauri", - "FirstName": "Nyck", - "LastName": "De Vries", - "FullName": "Nyck De Vries", - "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/N/NYCDEV01_Nyck_De%20Vries/nycdev01.png.transform/1col/image.png", - "CountryCode": "NED", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "Position": 10, + "ClassifiedPosition": "10", + "GridPosition": 4, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 62945, + "Status": "Finished", + "Points": 1, }, { "DriverNumber": "22", @@ -3404,15 +3427,61 @@ def test_get_results(): "FullName": "Yuki Tsunoda", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/Y/YUKTSU01_Yuki_Tsunoda/yuktsu01.png.transform/1col/image.png", "CountryCode": "JPN", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "Position": 11, + "ClassifiedPosition": "11", + "GridPosition": 17, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 64309, + "Status": "Finished", + "Points": 0, + }, + { + "DriverNumber": "18", + "BroadcastName": "L STROLL", + "Abbreviation": "STR", + "DriverId": "stroll", + "TeamName": "Aston Martin", + "TeamColor": "358C75", + "TeamId": "aston_martin", + "FirstName": "Lance", + "LastName": "Stroll", + "FullName": "Lance Stroll", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LANSTR01_Lance_Stroll/lanstr01.png.transform/1col/image.png", + "CountryCode": "CAN", + "Position": 12, + "ClassifiedPosition": "12", + "GridPosition": 18, + "Q1": None, + "Q2": None, + "Q3": None, + "Time": 64754, + "Status": "Finished", + "Points": 0, + }, + { + "DriverNumber": "77", + "BroadcastName": "V BOTTAS", + "Abbreviation": "BOT", + "DriverId": "bottas", + "TeamName": "Alfa Romeo", + "TeamColor": "C92D4B", + "TeamId": "alfa", + "FirstName": "Valtteri", + "LastName": "Bottas", + "FullName": "Valtteri Bottas", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/V/VALBOT01_Valtteri_Bottas/valbot01.png.transform/1col/image.png", + "CountryCode": "FIN", + "Position": 13, + "ClassifiedPosition": "13", + "GridPosition": 10, + "Q1": None, + "Q2": None, + "Q3": None, + "Time": 71637, + "Status": "Finished", + "Points": 0, }, { "DriverNumber": "23", @@ -3427,38 +3496,15 @@ def test_get_results(): "FullName": "Alexander Albon", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/A/ALEALB01_Alexander_Albon/alealb01.png.transform/1col/image.png", "CountryCode": "THA", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, - "Q1": None, - "Q2": None, - "Q3": None, - "Time": None, - "Status": "", - "Points": None, - }, - { - "DriverNumber": "24", - "BroadcastName": "G ZHOU", - "Abbreviation": "ZHO", - "DriverId": "zhou", - "TeamName": "Alfa Romeo", - "TeamColor": "C92D4B", - "TeamId": "alfa", - "FirstName": "Guanyu", - "LastName": "Zhou", - "FullName": "Guanyu Zhou", - "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/G/GUAZHO01_Guanyu_Zhou/guazho01.png.transform/1col/image.png", - "CountryCode": "CHN", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "Position": 14, + "ClassifiedPosition": "14", + "GridPosition": 11, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 72861, + "Status": "Finished", + "Points": 0, }, { "DriverNumber": "27", @@ -3473,38 +3519,38 @@ def test_get_results(): "FullName": "Nico Hulkenberg", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/N/NICHUL01_Nico_Hulkenberg/nichul01.png.transform/1col/image.png", "CountryCode": "GER", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "Position": 15, + "ClassifiedPosition": "15", + "GridPosition": 12, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 74950, + "Status": "Finished", + "Points": 0, }, { - "DriverNumber": "31", - "BroadcastName": "E OCON", - "Abbreviation": "OCO", - "DriverId": "ocon", - "TeamName": "Alpine", - "TeamColor": "2293D1", - "TeamId": "alpine", - "FirstName": "Esteban", - "LastName": "Ocon", - "FullName": "Esteban Ocon", - "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/E/ESTOCO01_Esteban_Ocon/estoco01.png.transform/1col/image.png", - "CountryCode": "FRA", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "DriverNumber": "24", + "BroadcastName": "G ZHOU", + "Abbreviation": "ZHO", + "DriverId": "zhou", + "TeamName": "Alfa Romeo", + "TeamColor": "C92D4B", + "TeamId": "alfa", + "FirstName": "Guanyu", + "LastName": "Zhou", + "FullName": "Guanyu Zhou", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/G/GUAZHO01_Guanyu_Zhou/guazho01.png.transform/1col/image.png", + "CountryCode": "CHN", + "Position": 16, + "ClassifiedPosition": "16", + "GridPosition": 14, "Q1": None, "Q2": None, "Q3": None, - "Time": None, - "Status": "", - "Points": None, + "Time": 78440, + "Status": "Finished", + "Points": 0, }, { "DriverNumber": "4", @@ -3519,35 +3565,134 @@ def test_get_results(): "FullName": "Lando Norris", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LANNOR01_Lando_Norris/lannor01.png.transform/1col/image.png", "CountryCode": "GBR", - "Position": None, - "ClassifiedPosition": "", - "GridPosition": None, + "Position": 17, + "ClassifiedPosition": "17", + "GridPosition": 16, + "Q1": None, + "Q2": None, + "Q3": None, + "Time": 87717, + "Status": "Finished", + "Points": 0, + }, + { + "DriverNumber": "21", + "BroadcastName": "N DE VRIES", + "Abbreviation": "DEV", + "DriverId": "de_vries", + "TeamName": "AlphaTauri", + "TeamColor": "5E8FAA", + "TeamId": "alphatauri", + "FirstName": "Nyck", + "LastName": "De Vries", + "FullName": "Nyck De Vries", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/N/NYCDEV01_Nyck_De%20Vries/nycdev01.png.transform/1col/image.png", + "CountryCode": "NED", + "Position": 18, + "ClassifiedPosition": "18", + "GridPosition": 15, + "Q1": None, + "Q2": None, + "Q3": None, + "Time": 88949, + "Status": "Finished", + "Points": 0, + }, + { + "DriverNumber": "81", + "BroadcastName": "O PIASTRI", + "Abbreviation": "PIA", + "DriverId": "piastri", + "TeamName": "McLaren", + "TeamColor": "F58020", + "TeamId": "mclaren", + "FirstName": "Oscar", + "LastName": "Piastri", + "FullName": "Oscar Piastri", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/O/OSCPIA01_Oscar_Piastri/oscpia01.png.transform/1col/image.png", + "CountryCode": "AUS", + "Position": 19, + "ClassifiedPosition": "19", + "GridPosition": 19, + "Q1": None, + "Q2": None, + "Q3": None, + "Time": None, + "Status": "+1 Lap", + "Points": 0, + }, + { + "DriverNumber": "2", + "BroadcastName": "L SARGEANT", + "Abbreviation": "SAR", + "DriverId": "sargeant", + "TeamName": "Williams", + "TeamColor": "37BEDD", + "TeamId": "williams", + "FirstName": "Logan", + "LastName": "Sargeant", + "FullName": "Logan Sargeant", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LOGSAR01_Logan_Sargeant/logsar01.png.transform/1col/image.png", + "CountryCode": "USA", + "Position": 20, + "ClassifiedPosition": "20", + "GridPosition": 20, "Q1": None, "Q2": None, "Q3": None, "Time": None, + "Status": "+1 Lap", + "Points": 0, + }, + ] + + +def test_get_results_with_session(): + response = client.get("/results/2023/5?session=4") + assert response.status_code == 200 + assert response.json() == [ + { + "DriverNumber": "11", + "BroadcastName": "S PEREZ", + "Abbreviation": "PER", + "DriverId": "perez", + "TeamName": "Red Bull Racing", + "TeamColor": "3671C6", + "TeamId": "red_bull", + "FirstName": "Sergio", + "LastName": "Perez", + "FullName": "Sergio Perez", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/S/SERPER01_Sergio_Perez/serper01.png.transform/1col/image.png", + "CountryCode": "MEX", + "Position": 1, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 87713, + "Q2": 87328, + "Q3": 86841, + "Time": None, "Status": "", "Points": None, }, { - "DriverNumber": "44", - "BroadcastName": "L HAMILTON", - "Abbreviation": "HAM", - "DriverId": "hamilton", - "TeamName": "Mercedes", - "TeamColor": "6CD3BF", - "TeamId": "mercedes", - "FirstName": "Lewis", - "LastName": "Hamilton", - "FullName": "Lewis Hamilton", - "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LEWHAM01_Lewis_Hamilton/lewham01.png.transform/1col/image.png", - "CountryCode": "GBR", - "Position": None, + "DriverNumber": "14", + "BroadcastName": "F ALONSO", + "Abbreviation": "ALO", + "DriverId": "alonso", + "TeamName": "Aston Martin", + "TeamColor": "358C75", + "TeamId": "aston_martin", + "FirstName": "Fernando", + "LastName": "Alonso", + "FullName": "Fernando Alonso", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/F/FERALO01_Fernando_Alonso/feralo01.png.transform/1col/image.png", + "CountryCode": "ESP", + "Position": 2, "ClassifiedPosition": "", "GridPosition": None, - "Q1": None, - "Q2": None, - "Q3": None, + "Q1": 88179, + "Q2": 87097, + "Q3": 87202, "Time": None, "Status": "", "Points": None, @@ -3565,12 +3710,58 @@ def test_get_results(): "FullName": "Carlos Sainz", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/C/CARSAI01_Carlos_Sainz/carsai01.png.transform/1col/image.png", "CountryCode": "ESP", - "Position": None, + "Position": 3, "ClassifiedPosition": "", "GridPosition": None, - "Q1": None, - "Q2": None, - "Q3": None, + "Q1": 87686, + "Q2": 87148, + "Q3": 87349, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "20", + "BroadcastName": "K MAGNUSSEN", + "Abbreviation": "MAG", + "DriverId": "kevin_magnussen", + "TeamName": "Haas F1 Team", + "TeamColor": "B6BABD", + "TeamId": "haas", + "FirstName": "Kevin", + "LastName": "Magnussen", + "FullName": "Kevin Magnussen", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/K/KEVMAG01_Kevin_Magnussen/kevmag01.png.transform/1col/image.png", + "CountryCode": "DEN", + "Position": 4, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 87809, + "Q2": 87673, + "Q3": 87767, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "10", + "BroadcastName": "P GASLY", + "Abbreviation": "GAS", + "DriverId": "gasly", + "TeamName": "Alpine", + "TeamColor": "2293D1", + "TeamId": "alpine", + "FirstName": "Pierre", + "LastName": "Gasly", + "FullName": "Pierre Gasly", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/P/PIEGAS01_Pierre_Gasly/piegas01.png.transform/1col/image.png", + "CountryCode": "FRA", + "Position": 5, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 88061, + "Q2": 87612, + "Q3": 87786, "Time": None, "Status": "", "Points": None, @@ -3588,11 +3779,80 @@ def test_get_results(): "FullName": "George Russell", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/G/GEORUS01_George_Russell/georus01.png.transform/1col/image.png", "CountryCode": "GBR", - "Position": None, + "Position": 6, "ClassifiedPosition": "", "GridPosition": None, - "Q1": None, - "Q2": None, + "Q1": 88086, + "Q2": 87743, + "Q3": 87804, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "16", + "BroadcastName": "C LECLERC", + "Abbreviation": "LEC", + "DriverId": "leclerc", + "TeamName": "Ferrari", + "TeamColor": "F91536", + "TeamId": "ferrari", + "FirstName": "Charles", + "LastName": "Leclerc", + "FullName": "Charles Leclerc", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/C/CHALEC01_Charles_Leclerc/chalec01.png.transform/1col/image.png", + "CountryCode": "MON", + "Position": 7, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 87713, + "Q2": 86964, + "Q3": 87861, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "31", + "BroadcastName": "E OCON", + "Abbreviation": "OCO", + "DriverId": "ocon", + "TeamName": "Alpine", + "TeamColor": "2293D1", + "TeamId": "alpine", + "FirstName": "Esteban", + "LastName": "Ocon", + "FullName": "Esteban Ocon", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/E/ESTOCO01_Esteban_Ocon/estoco01.png.transform/1col/image.png", + "CountryCode": "FRA", + "Position": 8, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 87872, + "Q2": 87444, + "Q3": 87935, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "1", + "BroadcastName": "M VERSTAPPEN", + "Abbreviation": "VER", + "DriverId": "max_verstappen", + "TeamName": "Red Bull Racing", + "TeamColor": "3671C6", + "TeamId": "red_bull", + "FirstName": "Max", + "LastName": "Verstappen", + "FullName": "Max Verstappen", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/M/MAXVER01_Max_Verstappen/maxver01.png.transform/1col/image.png", + "CountryCode": "NED", + "Position": 9, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 87363, + "Q2": 86814, "Q3": None, "Time": None, "Status": "", @@ -3611,10 +3871,194 @@ def test_get_results(): "FullName": "Valtteri Bottas", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/V/VALBOT01_Valtteri_Bottas/valbot01.png.transform/1col/image.png", "CountryCode": "FIN", - "Position": None, + "Position": 10, "ClassifiedPosition": "", "GridPosition": None, - "Q1": None, + "Q1": 87864, + "Q2": 87564, + "Q3": None, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "23", + "BroadcastName": "A ALBON", + "Abbreviation": "ALB", + "DriverId": "albon", + "TeamName": "Williams", + "TeamColor": "37BEDD", + "TeamId": "williams", + "FirstName": "Alexander", + "LastName": "Albon", + "FullName": "Alexander Albon", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/A/ALEALB01_Alexander_Albon/alealb01.png.transform/1col/image.png", + "CountryCode": "THA", + "Position": 11, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 88234, + "Q2": 87795, + "Q3": None, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "27", + "BroadcastName": "N HULKENBERG", + "Abbreviation": "HUL", + "DriverId": "hulkenberg", + "TeamName": "Haas F1 Team", + "TeamColor": "B6BABD", + "TeamId": "haas", + "FirstName": "Nico", + "LastName": "Hulkenberg", + "FullName": "Nico Hulkenberg", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/N/NICHUL01_Nico_Hulkenberg/nichul01.png.transform/1col/image.png", + "CountryCode": "GER", + "Position": 12, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 87945, + "Q2": 87903, + "Q3": None, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "44", + "BroadcastName": "L HAMILTON", + "Abbreviation": "HAM", + "DriverId": "hamilton", + "TeamName": "Mercedes", + "TeamColor": "6CD3BF", + "TeamId": "mercedes", + "FirstName": "Lewis", + "LastName": "Hamilton", + "FullName": "Lewis Hamilton", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LEWHAM01_Lewis_Hamilton/lewham01.png.transform/1col/image.png", + "CountryCode": "GBR", + "Position": 13, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 87846, + "Q2": 87975, + "Q3": None, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "24", + "BroadcastName": "G ZHOU", + "Abbreviation": "ZHO", + "DriverId": "zhou", + "TeamName": "Alfa Romeo", + "TeamColor": "C92D4B", + "TeamId": "alfa", + "FirstName": "Guanyu", + "LastName": "Zhou", + "FullName": "Guanyu Zhou", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/G/GUAZHO01_Guanyu_Zhou/guazho01.png.transform/1col/image.png", + "CountryCode": "CHN", + "Position": 14, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 88180, + "Q2": 88091, + "Q3": None, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "21", + "BroadcastName": "N DE VRIES", + "Abbreviation": "DEV", + "DriverId": "de_vries", + "TeamName": "AlphaTauri", + "TeamColor": "5E8FAA", + "TeamId": "alphatauri", + "FirstName": "Nyck", + "LastName": "De Vries", + "FullName": "Nyck De Vries", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/N/NYCDEV01_Nyck_De%20Vries/nycdev01.png.transform/1col/image.png", + "CountryCode": "NED", + "Position": 15, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 88325, + "Q2": 88395, + "Q3": None, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "4", + "BroadcastName": "L NORRIS", + "Abbreviation": "NOR", + "DriverId": "norris", + "TeamName": "McLaren", + "TeamColor": "F58020", + "TeamId": "mclaren", + "FirstName": "Lando", + "LastName": "Norris", + "FullName": "Lando Norris", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LANNOR01_Lando_Norris/lannor01.png.transform/1col/image.png", + "CountryCode": "GBR", + "Position": 16, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 88394, + "Q2": None, + "Q3": None, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "22", + "BroadcastName": "Y TSUNODA", + "Abbreviation": "TSU", + "DriverId": "tsunoda", + "TeamName": "AlphaTauri", + "TeamColor": "5E8FAA", + "TeamId": "alphatauri", + "FirstName": "Yuki", + "LastName": "Tsunoda", + "FullName": "Yuki Tsunoda", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/Y/YUKTSU01_Yuki_Tsunoda/yuktsu01.png.transform/1col/image.png", + "CountryCode": "JPN", + "Position": 17, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 88429, + "Q2": None, + "Q3": None, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "18", + "BroadcastName": "L STROLL", + "Abbreviation": "STR", + "DriverId": "stroll", + "TeamName": "Aston Martin", + "TeamColor": "358C75", + "TeamId": "aston_martin", + "FirstName": "Lance", + "LastName": "Stroll", + "FullName": "Lance Stroll", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LANSTR01_Lance_Stroll/lanstr01.png.transform/1col/image.png", + "CountryCode": "CAN", + "Position": 18, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 88476, "Q2": None, "Q3": None, "Time": None, @@ -3634,10 +4078,33 @@ def test_get_results(): "FullName": "Oscar Piastri", "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/O/OSCPIA01_Oscar_Piastri/oscpia01.png.transform/1col/image.png", "CountryCode": "AUS", - "Position": None, + "Position": 19, "ClassifiedPosition": "", "GridPosition": None, - "Q1": None, + "Q1": 88484, + "Q2": None, + "Q3": None, + "Time": None, + "Status": "", + "Points": None, + }, + { + "DriverNumber": "2", + "BroadcastName": "L SARGEANT", + "Abbreviation": "SAR", + "DriverId": "sargeant", + "TeamName": "Williams", + "TeamColor": "37BEDD", + "TeamId": "williams", + "FirstName": "Logan", + "LastName": "Sargeant", + "FullName": "Logan Sargeant", + "HeadshotUrl": "https://www.formula1.com/content/dam/fom-website/drivers/L/LOGSAR01_Logan_Sargeant/logsar01.png.transform/1col/image.png", + "CountryCode": "USA", + "Position": 20, + "ClassifiedPosition": "", + "GridPosition": None, + "Q1": 88577, "Q2": None, "Q3": None, "Time": None, @@ -3653,7 +4120,7 @@ def test_get_results(): def test_get_results_bad_round_invalid(): - response = client.get("/results/2023/25/2") + response = client.get("/results/2023/25?session=2") assert response.status_code == 400 assert response.json() == {"detail": "Bad Request. Invalid round: 25"} From 29c130d114fc523508527ace75a906e8a6b04658 Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Thu, 1 Feb 2024 14:41:09 +0530 Subject: [PATCH 04/17] fix(results): BACK-19 don't fetch laps --- README.md | 2 +- app/main.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7eae460..fae0e18 100644 --- a/README.md +++ b/README.md @@ -127,7 +127,7 @@ poetry run pytest -rpP ``` - We'll be keeping a linear commit history and so using a combination of `Rebase and merge` and `Squash and merge` merge strategies. - Use `Rebase and merge` as ***default*** to ensure all commits from the branch to be merged are brought in individually to the target branch. - - `Squash and merge` may be used ***ONLY** when bringing in changes from a feature/bug fix branch into `dev`. + - `Squash and merge` may be used ***ONLY*** when bringing in changes from a feature/bug fix branch into `dev`. - To maintain linear commit history, ensure to use `push force` when: - Bringing `dev` on the same commit as `staging` (ie rebasing `dev` onto `staging`). - Bringing `staging` on the same commit as `main` (ie rebasing `staging` onto `main`). diff --git a/app/main.py b/app/main.py index 844a7ab..9b85713 100644 --- a/app/main.py +++ b/app/main.py @@ -281,7 +281,7 @@ def get_results( try: session_obj = fastf1.get_session(year=year, gp=round, identifier=session) session_obj.load( - laps=True, + laps=False, telemetry=False, weather=False, messages=False, From ac8974a0b78558a33015b973536b285da85957c8 Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Thu, 1 Feb 2024 22:21:07 +0530 Subject: [PATCH 05/17] chore: updated dependencies --- poetry.lock | 326 +++++++++++++++++++++++-------------------------- pyproject.toml | 10 +- 2 files changed, 156 insertions(+), 180 deletions(-) diff --git a/poetry.lock b/poetry.lock index d1ec925..50c907a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -44,13 +44,13 @@ files = [ [[package]] name = "argcomplete" -version = "3.1.6" +version = "3.2.2" description = "Bash tab completion for argparse" optional = false python-versions = ">=3.8" files = [ - {file = "argcomplete-3.1.6-py3-none-any.whl", hash = "sha256:71f4683bc9e6b0be85f2b2c1224c47680f210903e23512cfebfe5a41edfd883a"}, - {file = "argcomplete-3.1.6.tar.gz", hash = "sha256:3b1f07d133332547a53c79437527c00be48cca3807b1d4ca5cab1b26313386a6"}, + {file = "argcomplete-3.2.2-py3-none-any.whl", hash = "sha256:e44f4e7985883ab3e73a103ef0acd27299dbfe2dfed00142c35d4ddd3005901d"}, + {file = "argcomplete-3.2.2.tar.gz", hash = "sha256:f3e49e8ea59b4026ee29548e24488af46e30c9de57d48638e24f54a1ea1000a2"}, ] [package.extras] @@ -217,33 +217,33 @@ lxml = ["lxml"] [[package]] name = "black" -version = "24.1.0" +version = "24.1.1" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:94d5280d020dadfafc75d7cae899609ed38653d3f5e82e7ce58f75e76387ed3d"}, - {file = "black-24.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:aaf9aa85aaaa466bf969e7dd259547f4481b712fe7ee14befeecc152c403ee05"}, - {file = "black-24.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec489cae76eac3f7573629955573c3a0e913641cafb9e3bfc87d8ce155ebdb29"}, - {file = "black-24.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:a5a0100b4bdb3744dd68412c3789f472d822dc058bb3857743342f8d7f93a5a7"}, - {file = "black-24.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6cc5a6ba3e671cfea95a40030b16a98ee7dc2e22b6427a6f3389567ecf1b5262"}, - {file = "black-24.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0e367759062dcabcd9a426d12450c6d61faf1704a352a49055a04c9f9ce8f5a"}, - {file = "black-24.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be305563ff4a2dea813f699daaffac60b977935f3264f66922b1936a5e492ee4"}, - {file = "black-24.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:6a8977774929b5db90442729f131221e58cc5d8208023c6af9110f26f75b6b20"}, - {file = "black-24.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d74d4d0da276fbe3b95aa1f404182562c28a04402e4ece60cf373d0b902f33a0"}, - {file = "black-24.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39addf23f7070dbc0b5518cdb2018468ac249d7412a669b50ccca18427dba1f3"}, - {file = "black-24.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:827a7c0da520dd2f8e6d7d3595f4591aa62ccccce95b16c0e94bb4066374c4c2"}, - {file = "black-24.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:0cd59d01bf3306ff7e3076dd7f4435fcd2fafe5506a6111cae1138fc7de52382"}, - {file = "black-24.1.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf8dd261ee82df1abfb591f97e174345ab7375a55019cc93ad38993b9ff5c6ad"}, - {file = "black-24.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:82d9452aeabd51d1c8f0d52d4d18e82b9f010ecb30fd55867b5ff95904f427ff"}, - {file = "black-24.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9aede09f72b2a466e673ee9fca96e4bccc36f463cac28a35ce741f0fd13aea8b"}, - {file = "black-24.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:780f13d03066a7daf1707ec723fdb36bd698ffa29d95a2e7ef33a8dd8fe43b5c"}, - {file = "black-24.1.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a15670c650668399c4b5eae32e222728185961d6ef6b568f62c1681d57b381ba"}, - {file = "black-24.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1e0fa70b8464055069864a4733901b31cbdbe1273f63a24d2fa9d726723d45ac"}, - {file = "black-24.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fa8d9aaa22d846f8c0f7f07391148e5e346562e9b215794f9101a8339d8b6d8"}, - {file = "black-24.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:f0dfbfbacfbf9cd1fac7a5ddd3e72510ffa93e841a69fcf4a6358feab1685382"}, - {file = "black-24.1.0-py3-none-any.whl", hash = "sha256:5134a6f6b683aa0a5592e3fd61dd3519d8acd953d93e2b8b76f9981245b65594"}, - {file = "black-24.1.0.tar.gz", hash = "sha256:30fbf768cd4f4576598b1db0202413fafea9a227ef808d1a12230c643cefe9fc"}, + {file = "black-24.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2588021038bd5ada078de606f2a804cadd0a3cc6a79cb3e9bb3a8bf581325a4c"}, + {file = "black-24.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1a95915c98d6e32ca43809d46d932e2abc5f1f7d582ffbe65a5b4d1588af7445"}, + {file = "black-24.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fa6a0e965779c8f2afb286f9ef798df770ba2b6cee063c650b96adec22c056a"}, + {file = "black-24.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:5242ecd9e990aeb995b6d03dc3b2d112d4a78f2083e5a8e86d566340ae80fec4"}, + {file = "black-24.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:fc1ec9aa6f4d98d022101e015261c056ddebe3da6a8ccfc2c792cbe0349d48b7"}, + {file = "black-24.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0269dfdea12442022e88043d2910429bed717b2d04523867a85dacce535916b8"}, + {file = "black-24.1.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3d64db762eae4a5ce04b6e3dd745dcca0fb9560eb931a5be97472e38652a161"}, + {file = "black-24.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:5d7b06ea8816cbd4becfe5f70accae953c53c0e53aa98730ceccb0395520ee5d"}, + {file = "black-24.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e2c8dfa14677f90d976f68e0c923947ae68fa3961d61ee30976c388adc0b02c8"}, + {file = "black-24.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a21725862d0e855ae05da1dd25e3825ed712eaaccef6b03017fe0853a01aa45e"}, + {file = "black-24.1.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07204d078e25327aad9ed2c64790d681238686bce254c910de640c7cc4fc3aa6"}, + {file = "black-24.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:a83fe522d9698d8f9a101b860b1ee154c1d25f8a82ceb807d319f085b2627c5b"}, + {file = "black-24.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:08b34e85170d368c37ca7bf81cf67ac863c9d1963b2c1780c39102187ec8dd62"}, + {file = "black-24.1.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7258c27115c1e3b5de9ac6c4f9957e3ee2c02c0b39222a24dc7aa03ba0e986f5"}, + {file = "black-24.1.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40657e1b78212d582a0edecafef133cf1dd02e6677f539b669db4746150d38f6"}, + {file = "black-24.1.1-cp38-cp38-win_amd64.whl", hash = "sha256:e298d588744efda02379521a19639ebcd314fba7a49be22136204d7ed1782717"}, + {file = "black-24.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:34afe9da5056aa123b8bfda1664bfe6fb4e9c6f311d8e4a6eb089da9a9173bf9"}, + {file = "black-24.1.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:854c06fb86fd854140f37fb24dbf10621f5dab9e3b0c29a690ba595e3d543024"}, + {file = "black-24.1.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3897ae5a21ca132efa219c029cce5e6bfc9c3d34ed7e892113d199c0b1b444a2"}, + {file = "black-24.1.1-cp39-cp39-win_amd64.whl", hash = "sha256:ecba2a15dfb2d97105be74bbfe5128bc5e9fa8477d8c46766505c1dda5883aac"}, + {file = "black-24.1.1-py3-none-any.whl", hash = "sha256:5cdc2e2195212208fbcae579b931407c1fa9997584f0a415421748aeafff1168"}, + {file = "black-24.1.1.tar.gz", hash = "sha256:48b5760dcbfe5cf97fd4fba23946681f3a81514c6ab8a45b50da67ac8fbc6c7b"}, ] [package.dependencies] @@ -529,21 +529,21 @@ test = ["pytest"] [[package]] name = "commitizen" -version = "3.13.0" +version = "3.14.0" description = "Python commitizen client tool" optional = false python-versions = ">=3.8" files = [ - {file = "commitizen-3.13.0-py3-none-any.whl", hash = "sha256:ff57069591ff109136b70841fe79a3434d0525748995531cceb4f3ccadb44ead"}, - {file = "commitizen-3.13.0.tar.gz", hash = "sha256:53cd225ae44fc25cb1582f5d50cda78711a5a1d44a32fee3dcf7a22bc204ce06"}, + {file = "commitizen-3.14.0-py3-none-any.whl", hash = "sha256:5345a118f2a0b2b8fcfc5fcfea7945f8c984803836a1735199d469e865be4efb"}, + {file = "commitizen-3.14.0.tar.gz", hash = "sha256:3c799dc0ffb2c99d021edd32de55ddce182635bf6129ac6abf223696ccbdd1a7"}, ] [package.dependencies] -argcomplete = ">=1.12.1,<3.2" +argcomplete = ">=1.12.1,<3.3" charset-normalizer = ">=2.1.0,<4" colorama = ">=0.4.1,<0.5.0" decli = ">=0.6.0,<0.7.0" -importlib_metadata = ">=4.13,<7" +importlib_metadata = ">=4.13,<8" jinja2 = ">=2.10.3" packaging = ">=19" pyyaml = ">=3.08" @@ -993,13 +993,13 @@ files = [ [[package]] name = "importlib-metadata" -version = "6.11.0" +version = "7.0.1" description = "Read metadata from Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "importlib_metadata-6.11.0-py3-none-any.whl", hash = "sha256:f0afba6205ad8f8947c7d338b5342d5db2afbfd82f9cbef7879a9539cc12eb9b"}, - {file = "importlib_metadata-6.11.0.tar.gz", hash = "sha256:1231cf92d825c9e03cfc4da076a16de6422c863558229ea0b22b675657463443"}, + {file = "importlib_metadata-7.0.1-py3-none-any.whl", hash = "sha256:4805911c3a4ec7c3966410053e9ec6a1fecd629117df5adee56dfc9432a1081e"}, + {file = "importlib_metadata-7.0.1.tar.gz", hash = "sha256:f238736bb06590ae52ac1fab06a3a9ef1d8dce2b7a35b5ab329371d6c8f5d2cc"}, ] [package.dependencies] @@ -1359,13 +1359,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.0.11" +version = "4.0.12" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.0.11-py3-none-any.whl", hash = "sha256:536bf0e78723153a5016ca7efb88ed0ecd7070d3f1555d5b0e2770658f900a3c"}, - {file = "jupyterlab-4.0.11.tar.gz", hash = "sha256:d1aec24712566bc25a36229788242778e498ca4088028e2f9aa156b8b7fdc8fc"}, + {file = "jupyterlab-4.0.12-py3-none-any.whl", hash = "sha256:53f132480e5f6564f4e20d1b5ed4e8b7945952a2decd5bdfa43760b1b536c99d"}, + {file = "jupyterlab-4.0.12.tar.gz", hash = "sha256:965d92efa82a538ed70ccb3968d9aabba788840da882e13d7b061780cdedc3b7"}, ] [package.dependencies] @@ -1877,13 +1877,13 @@ files = [ [[package]] name = "overrides" -version = "7.6.0" +version = "7.7.0" description = "A decorator to automatically detect mismatch when overriding a method." optional = false python-versions = ">=3.6" files = [ - {file = "overrides-7.6.0-py3-none-any.whl", hash = "sha256:c36e6635519ea9c5b043b65c36d4b886aee8bd45b7d4681d2a6df0898df4b654"}, - {file = "overrides-7.6.0.tar.gz", hash = "sha256:01e15bbbf15b766f0675c275baa1878bd1c7dc9bc7b9ee13e677cdba93dc1bd9"}, + {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, + {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, ] [[package]] @@ -2103,18 +2103,18 @@ xmp = ["defusedxml"] [[package]] name = "platformdirs" -version = "4.1.0" +version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.1.0-py3-none-any.whl", hash = "sha256:11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380"}, - {file = "platformdirs-4.1.0.tar.gz", hash = "sha256:906d548203468492d432bcb294d4bc2fff751bf84971fbb2c10918cc206ee420"}, + {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, + {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, ] [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.1)", "sphinx-autodoc-typehints (>=1.24)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-cov (>=4.1)", "pytest-mock (>=3.11.1)"] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] [[package]] name = "pluggy" @@ -2243,18 +2243,18 @@ files = [ [[package]] name = "pydantic" -version = "2.5.3" +version = "2.6.0" description = "Data validation using Python type hints" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic-2.5.3-py3-none-any.whl", hash = "sha256:d0caf5954bee831b6bfe7e338c32b9e30c85dfe080c843680783ac2b631673b4"}, - {file = "pydantic-2.5.3.tar.gz", hash = "sha256:b3ef57c62535b0941697cce638c08900d87fcb67e29cfa99e8a68f747f393f7a"}, + {file = "pydantic-2.6.0-py3-none-any.whl", hash = "sha256:1440966574e1b5b99cf75a13bec7b20e3512e8a61b894ae252f56275e2c465ae"}, + {file = "pydantic-2.6.0.tar.gz", hash = "sha256:ae887bd94eb404b09d86e4d12f93893bdca79d766e738528c6fa1c849f3c6bcf"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.14.6" +pydantic-core = "2.16.1" typing-extensions = ">=4.6.1" [package.extras] @@ -2262,116 +2262,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.14.6" +version = "2.16.1" description = "" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.14.6-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:72f9a942d739f09cd42fffe5dc759928217649f070056f03c70df14f5770acf9"}, - {file = "pydantic_core-2.14.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6a31d98c0d69776c2576dda4b77b8e0c69ad08e8b539c25c7d0ca0dc19a50d6c"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5aa90562bc079c6c290f0512b21768967f9968e4cfea84ea4ff5af5d917016e4"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:370ffecb5316ed23b667d99ce4debe53ea664b99cc37bfa2af47bc769056d534"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f85f3843bdb1fe80e8c206fe6eed7a1caeae897e496542cee499c374a85c6e08"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9862bf828112e19685b76ca499b379338fd4c5c269d897e218b2ae8fcb80139d"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:036137b5ad0cb0004c75b579445a1efccd072387a36c7f217bb8efd1afbe5245"}, - {file = "pydantic_core-2.14.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:92879bce89f91f4b2416eba4429c7b5ca22c45ef4a499c39f0c5c69257522c7c"}, - {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0c08de15d50fa190d577e8591f0329a643eeaed696d7771760295998aca6bc66"}, - {file = "pydantic_core-2.14.6-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:36099c69f6b14fc2c49d7996cbf4f87ec4f0e66d1c74aa05228583225a07b590"}, - {file = "pydantic_core-2.14.6-cp310-none-win32.whl", hash = "sha256:7be719e4d2ae6c314f72844ba9d69e38dff342bc360379f7c8537c48e23034b7"}, - {file = "pydantic_core-2.14.6-cp310-none-win_amd64.whl", hash = "sha256:36fa402dcdc8ea7f1b0ddcf0df4254cc6b2e08f8cd80e7010d4c4ae6e86b2a87"}, - {file = "pydantic_core-2.14.6-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:dea7fcd62915fb150cdc373212141a30037e11b761fbced340e9db3379b892d4"}, - {file = "pydantic_core-2.14.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ffff855100bc066ff2cd3aa4a60bc9534661816b110f0243e59503ec2df38421"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b027c86c66b8627eb90e57aee1f526df77dc6d8b354ec498be9a757d513b92b"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:00b1087dabcee0b0ffd104f9f53d7d3eaddfaa314cdd6726143af6bc713aa27e"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75ec284328b60a4e91010c1acade0c30584f28a1f345bc8f72fe8b9e46ec6a96"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e1f4744eea1501404b20b0ac059ff7e3f96a97d3e3f48ce27a139e053bb370b"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2602177668f89b38b9f84b7b3435d0a72511ddef45dc14446811759b82235a1"}, - {file = "pydantic_core-2.14.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c8edaea3089bf908dd27da8f5d9e395c5b4dc092dbcce9b65e7156099b4b937"}, - {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:478e9e7b360dfec451daafe286998d4a1eeaecf6d69c427b834ae771cad4b622"}, - {file = "pydantic_core-2.14.6-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b6ca36c12a5120bad343eef193cc0122928c5c7466121da7c20f41160ba00ba2"}, - {file = "pydantic_core-2.14.6-cp311-none-win32.whl", hash = "sha256:2b8719037e570639e6b665a4050add43134d80b687288ba3ade18b22bbb29dd2"}, - {file = "pydantic_core-2.14.6-cp311-none-win_amd64.whl", hash = "sha256:78ee52ecc088c61cce32b2d30a826f929e1708f7b9247dc3b921aec367dc1b23"}, - {file = "pydantic_core-2.14.6-cp311-none-win_arm64.whl", hash = "sha256:a19b794f8fe6569472ff77602437ec4430f9b2b9ec7a1105cfd2232f9ba355e6"}, - {file = "pydantic_core-2.14.6-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:667aa2eac9cd0700af1ddb38b7b1ef246d8cf94c85637cbb03d7757ca4c3fdec"}, - {file = "pydantic_core-2.14.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cdee837710ef6b56ebd20245b83799fce40b265b3b406e51e8ccc5b85b9099b7"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c5bcf3414367e29f83fd66f7de64509a8fd2368b1edf4351e862910727d3e51"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:26a92ae76f75d1915806b77cf459811e772d8f71fd1e4339c99750f0e7f6324f"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a983cca5ed1dd9a35e9e42ebf9f278d344603bfcb174ff99a5815f953925140a"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cb92f9061657287eded380d7dc455bbf115430b3aa4741bdc662d02977e7d0af"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ace1e220b078c8e48e82c081e35002038657e4b37d403ce940fa679e57113b"}, - {file = "pydantic_core-2.14.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ef633add81832f4b56d3b4c9408b43d530dfca29e68fb1b797dcb861a2c734cd"}, - {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7e90d6cc4aad2cc1f5e16ed56e46cebf4877c62403a311af20459c15da76fd91"}, - {file = "pydantic_core-2.14.6-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:e8a5ac97ea521d7bde7621d86c30e86b798cdecd985723c4ed737a2aa9e77d0c"}, - {file = "pydantic_core-2.14.6-cp312-none-win32.whl", hash = "sha256:f27207e8ca3e5e021e2402ba942e5b4c629718e665c81b8b306f3c8b1ddbb786"}, - {file = "pydantic_core-2.14.6-cp312-none-win_amd64.whl", hash = "sha256:b3e5fe4538001bb82e2295b8d2a39356a84694c97cb73a566dc36328b9f83b40"}, - {file = "pydantic_core-2.14.6-cp312-none-win_arm64.whl", hash = "sha256:64634ccf9d671c6be242a664a33c4acf12882670b09b3f163cd00a24cffbd74e"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:24368e31be2c88bd69340fbfe741b405302993242ccb476c5c3ff48aeee1afe0"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:e33b0834f1cf779aa839975f9d8755a7c2420510c0fa1e9fa0497de77cd35d2c"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6af4b3f52cc65f8a0bc8b1cd9676f8c21ef3e9132f21fed250f6958bd7223bed"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d15687d7d7f40333bd8266f3814c591c2e2cd263fa2116e314f60d82086e353a"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:095b707bb287bfd534044166ab767bec70a9bba3175dcdc3371782175c14e43c"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:94fc0e6621e07d1e91c44e016cc0b189b48db053061cc22d6298a611de8071bb"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ce830e480f6774608dedfd4a90c42aac4a7af0a711f1b52f807130c2e434c06"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a306cdd2ad3a7d795d8e617a58c3a2ed0f76c8496fb7621b6cd514eb1532cae8"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:2f5fa187bde8524b1e37ba894db13aadd64faa884657473b03a019f625cee9a8"}, - {file = "pydantic_core-2.14.6-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:438027a975cc213a47c5d70672e0d29776082155cfae540c4e225716586be75e"}, - {file = "pydantic_core-2.14.6-cp37-none-win32.whl", hash = "sha256:f96ae96a060a8072ceff4cfde89d261837b4294a4f28b84a28765470d502ccc6"}, - {file = "pydantic_core-2.14.6-cp37-none-win_amd64.whl", hash = "sha256:e646c0e282e960345314f42f2cea5e0b5f56938c093541ea6dbf11aec2862391"}, - {file = "pydantic_core-2.14.6-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:db453f2da3f59a348f514cfbfeb042393b68720787bbef2b4c6068ea362c8149"}, - {file = "pydantic_core-2.14.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3860c62057acd95cc84044e758e47b18dcd8871a328ebc8ccdefd18b0d26a21b"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36026d8f99c58d7044413e1b819a67ca0e0b8ebe0f25e775e6c3d1fabb3c38fb"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ed1af8692bd8d2a29d702f1a2e6065416d76897d726e45a1775b1444f5928a7"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:314ccc4264ce7d854941231cf71b592e30d8d368a71e50197c905874feacc8a8"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:982487f8931067a32e72d40ab6b47b1628a9c5d344be7f1a4e668fb462d2da42"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dbe357bc4ddda078f79d2a36fc1dd0494a7f2fad83a0a684465b6f24b46fe80"}, - {file = "pydantic_core-2.14.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2f6ffc6701a0eb28648c845f4945a194dc7ab3c651f535b81793251e1185ac3d"}, - {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7f5025db12fc6de7bc1104d826d5aee1d172f9ba6ca936bf6474c2148ac336c1"}, - {file = "pydantic_core-2.14.6-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:dab03ed811ed1c71d700ed08bde8431cf429bbe59e423394f0f4055f1ca0ea60"}, - {file = "pydantic_core-2.14.6-cp38-none-win32.whl", hash = "sha256:dfcbebdb3c4b6f739a91769aea5ed615023f3c88cb70df812849aef634c25fbe"}, - {file = "pydantic_core-2.14.6-cp38-none-win_amd64.whl", hash = "sha256:99b14dbea2fdb563d8b5a57c9badfcd72083f6006caf8e126b491519c7d64ca8"}, - {file = "pydantic_core-2.14.6-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:4ce8299b481bcb68e5c82002b96e411796b844d72b3e92a3fbedfe8e19813eab"}, - {file = "pydantic_core-2.14.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b9a9d92f10772d2a181b5ca339dee066ab7d1c9a34ae2421b2a52556e719756f"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd9e98b408384989ea4ab60206b8e100d8687da18b5c813c11e92fd8212a98e0"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4f86f1f318e56f5cbb282fe61eb84767aee743ebe32c7c0834690ebea50c0a6b"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86ce5fcfc3accf3a07a729779d0b86c5d0309a4764c897d86c11089be61da160"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dcf1978be02153c6a31692d4fbcc2a3f1db9da36039ead23173bc256ee3b91b"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eedf97be7bc3dbc8addcef4142f4b4164066df0c6f36397ae4aaed3eb187d8ab"}, - {file = "pydantic_core-2.14.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5f916acf8afbcab6bacbb376ba7dc61f845367901ecd5e328fc4d4aef2fcab0"}, - {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:8a14c192c1d724c3acbfb3f10a958c55a2638391319ce8078cb36c02283959b9"}, - {file = "pydantic_core-2.14.6-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:0348b1dc6b76041516e8a854ff95b21c55f5a411c3297d2ca52f5528e49d8411"}, - {file = "pydantic_core-2.14.6-cp39-none-win32.whl", hash = "sha256:de2a0645a923ba57c5527497daf8ec5df69c6eadf869e9cd46e86349146e5975"}, - {file = "pydantic_core-2.14.6-cp39-none-win_amd64.whl", hash = "sha256:aca48506a9c20f68ee61c87f2008f81f8ee99f8d7f0104bff3c47e2d148f89d9"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:d5c28525c19f5bb1e09511669bb57353d22b94cf8b65f3a8d141c389a55dec95"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:78d0768ee59baa3de0f4adac9e3748b4b1fffc52143caebddfd5ea2961595277"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b93785eadaef932e4fe9c6e12ba67beb1b3f1e5495631419c784ab87e975670"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a874f21f87c485310944b2b2734cd6d318765bcbb7515eead33af9641816506e"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89f4477d915ea43b4ceea6756f63f0288941b6443a2b28c69004fe07fde0d0d"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:172de779e2a153d36ee690dbc49c6db568d7b33b18dc56b69a7514aecbcf380d"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:dfcebb950aa7e667ec226a442722134539e77c575f6cfaa423f24371bb8d2e94"}, - {file = "pydantic_core-2.14.6-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:55a23dcd98c858c0db44fc5c04fc7ed81c4b4d33c653a7c45ddaebf6563a2f66"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:4241204e4b36ab5ae466ecec5c4c16527a054c69f99bba20f6f75232a6a534e2"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e574de99d735b3fc8364cba9912c2bec2da78775eba95cbb225ef7dda6acea24"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1302a54f87b5cd8528e4d6d1bf2133b6aa7c6122ff8e9dc5220fbc1e07bffebd"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8e81e4b55930e5ffab4a68db1af431629cf2e4066dbdbfef65348b8ab804ea8"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c99462ffc538717b3e60151dfaf91125f637e801f5ab008f81c402f1dff0cd0f"}, - {file = "pydantic_core-2.14.6-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e4cf2d5829f6963a5483ec01578ee76d329eb5caf330ecd05b3edd697e7d768a"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:cf10b7d58ae4a1f07fccbf4a0a956d705356fea05fb4c70608bb6fa81d103cda"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:399ac0891c284fa8eb998bcfa323f2234858f5d2efca3950ae58c8f88830f145"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c6a5c79b28003543db3ba67d1df336f253a87d3112dac3a51b94f7d48e4c0e1"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:599c87d79cab2a6a2a9df4aefe0455e61e7d2aeede2f8577c1b7c0aec643ee8e"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43e166ad47ba900f2542a80d83f9fc65fe99eb63ceec4debec160ae729824052"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3a0b5db001b98e1c649dd55afa928e75aa4087e587b9524a4992316fa23c9fba"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:747265448cb57a9f37572a488a57d873fd96bf51e5bb7edb52cfb37124516da4"}, - {file = "pydantic_core-2.14.6-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:7ebe3416785f65c28f4f9441e916bfc8a54179c8dea73c23023f7086fa601c5d"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:86c963186ca5e50d5c8287b1d1c9d3f8f024cbe343d048c5bd282aec2d8641f2"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e0641b506486f0b4cd1500a2a65740243e8670a2549bb02bc4556a83af84ae03"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71d72ca5eaaa8d38c8df16b7deb1a2da4f650c41b58bb142f3fb75d5ad4a611f"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27e524624eace5c59af499cd97dc18bb201dc6a7a2da24bfc66ef151c69a5f2a"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a3dde6cac75e0b0902778978d3b1646ca9f438654395a362cb21d9ad34b24acf"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:00646784f6cd993b1e1c0e7b0fdcbccc375d539db95555477771c27555e3c556"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:23598acb8ccaa3d1d875ef3b35cb6376535095e9405d91a3d57a8c7db5d29341"}, - {file = "pydantic_core-2.14.6-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7f41533d7e3cf9520065f610b41ac1c76bc2161415955fbcead4981b22c7611e"}, - {file = "pydantic_core-2.14.6.tar.gz", hash = "sha256:1fd0c1d395372843fba13a51c28e3bb9d59bd7aebfeb17358ffaaa1e4dbbe948"}, + {file = "pydantic_core-2.16.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:300616102fb71241ff477a2cbbc847321dbec49428434a2f17f37528721c4948"}, + {file = "pydantic_core-2.16.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5511f962dd1b9b553e9534c3b9c6a4b0c9ded3d8c2be96e61d56f933feef9e1f"}, + {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98f0edee7ee9cc7f9221af2e1b95bd02810e1c7a6d115cfd82698803d385b28f"}, + {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9795f56aa6b2296f05ac79d8a424e94056730c0b860a62b0fdcfe6340b658cc8"}, + {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c45f62e4107ebd05166717ac58f6feb44471ed450d07fecd90e5f69d9bf03c48"}, + {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462d599299c5971f03c676e2b63aa80fec5ebc572d89ce766cd11ca8bcb56f3f"}, + {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ebaa4bf6386a3b22eec518da7d679c8363fb7fb70cf6972161e5542f470798"}, + {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:99f9a50b56713a598d33bc23a9912224fc5d7f9f292444e6664236ae471ddf17"}, + {file = "pydantic_core-2.16.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8ec364e280db4235389b5e1e6ee924723c693cbc98e9d28dc1767041ff9bc388"}, + {file = "pydantic_core-2.16.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:653a5dfd00f601a0ed6654a8b877b18d65ac32c9d9997456e0ab240807be6cf7"}, + {file = "pydantic_core-2.16.1-cp310-none-win32.whl", hash = "sha256:1661c668c1bb67b7cec96914329d9ab66755911d093bb9063c4c8914188af6d4"}, + {file = "pydantic_core-2.16.1-cp310-none-win_amd64.whl", hash = "sha256:561be4e3e952c2f9056fba5267b99be4ec2afadc27261505d4992c50b33c513c"}, + {file = "pydantic_core-2.16.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:102569d371fadc40d8f8598a59379c37ec60164315884467052830b28cc4e9da"}, + {file = "pydantic_core-2.16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:735dceec50fa907a3c314b84ed609dec54b76a814aa14eb90da31d1d36873a5e"}, + {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e83ebbf020be727d6e0991c1b192a5c2e7113eb66e3def0cd0c62f9f266247e4"}, + {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:30a8259569fbeec49cfac7fda3ec8123486ef1b729225222f0d41d5f840b476f"}, + {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920c4897e55e2881db6a6da151198e5001552c3777cd42b8a4c2f72eedc2ee91"}, + {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5247a3d74355f8b1d780d0f3b32a23dd9f6d3ff43ef2037c6dcd249f35ecf4c"}, + {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5bea8012df5bb6dda1e67d0563ac50b7f64a5d5858348b5c8cb5043811c19d"}, + {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ed3025a8a7e5a59817b7494686d449ebfbe301f3e757b852c8d0d1961d6be864"}, + {file = "pydantic_core-2.16.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:06f0d5a1d9e1b7932477c172cc720b3b23c18762ed7a8efa8398298a59d177c7"}, + {file = "pydantic_core-2.16.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:150ba5c86f502c040b822777e2e519b5625b47813bd05f9273a8ed169c97d9ae"}, + {file = "pydantic_core-2.16.1-cp311-none-win32.whl", hash = "sha256:d6cbdf12ef967a6aa401cf5cdf47850559e59eedad10e781471c960583f25aa1"}, + {file = "pydantic_core-2.16.1-cp311-none-win_amd64.whl", hash = "sha256:afa01d25769af33a8dac0d905d5c7bb2d73c7c3d5161b2dd6f8b5b5eea6a3c4c"}, + {file = "pydantic_core-2.16.1-cp311-none-win_arm64.whl", hash = "sha256:1a2fe7b00a49b51047334d84aafd7e39f80b7675cad0083678c58983662da89b"}, + {file = "pydantic_core-2.16.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f478ec204772a5c8218e30eb813ca43e34005dff2eafa03931b3d8caef87d51"}, + {file = "pydantic_core-2.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1936ef138bed2165dd8573aa65e3095ef7c2b6247faccd0e15186aabdda7f66"}, + {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99d3a433ef5dc3021c9534a58a3686c88363c591974c16c54a01af7efd741f13"}, + {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd88f40f2294440d3f3c6308e50d96a0d3d0973d6f1a5732875d10f569acef49"}, + {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fac641bbfa43d5a1bed99d28aa1fded1984d31c670a95aac1bf1d36ac6ce137"}, + {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72bf9308a82b75039b8c8edd2be2924c352eda5da14a920551a8b65d5ee89253"}, + {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb4363e6c9fc87365c2bc777a1f585a22f2f56642501885ffc7942138499bf54"}, + {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:20f724a023042588d0f4396bbbcf4cffd0ddd0ad3ed4f0d8e6d4ac4264bae81e"}, + {file = "pydantic_core-2.16.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fb4370b15111905bf8b5ba2129b926af9470f014cb0493a67d23e9d7a48348e8"}, + {file = "pydantic_core-2.16.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23632132f1fd608034f1a56cc3e484be00854db845b3a4a508834be5a6435a6f"}, + {file = "pydantic_core-2.16.1-cp312-none-win32.whl", hash = "sha256:b9f3e0bffad6e238f7acc20c393c1ed8fab4371e3b3bc311020dfa6020d99212"}, + {file = "pydantic_core-2.16.1-cp312-none-win_amd64.whl", hash = "sha256:a0b4cfe408cd84c53bab7d83e4209458de676a6ec5e9c623ae914ce1cb79b96f"}, + {file = "pydantic_core-2.16.1-cp312-none-win_arm64.whl", hash = "sha256:d195add190abccefc70ad0f9a0141ad7da53e16183048380e688b466702195dd"}, + {file = "pydantic_core-2.16.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:502c062a18d84452858f8aea1e520e12a4d5228fc3621ea5061409d666ea1706"}, + {file = "pydantic_core-2.16.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d8c032ccee90b37b44e05948b449a2d6baed7e614df3d3f47fe432c952c21b60"}, + {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:920f4633bee43d7a2818e1a1a788906df5a17b7ab6fe411220ed92b42940f818"}, + {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f5d37ff01edcbace53a402e80793640c25798fb7208f105d87a25e6fcc9ea06"}, + {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:399166f24c33a0c5759ecc4801f040dbc87d412c1a6d6292b2349b4c505effc9"}, + {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac89ccc39cd1d556cc72d6752f252dc869dde41c7c936e86beac5eb555041b66"}, + {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73802194f10c394c2bedce7a135ba1d8ba6cff23adf4217612bfc5cf060de34c"}, + {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8fa00fa24ffd8c31fac081bf7be7eb495be6d248db127f8776575a746fa55c95"}, + {file = "pydantic_core-2.16.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:601d3e42452cd4f2891c13fa8c70366d71851c1593ed42f57bf37f40f7dca3c8"}, + {file = "pydantic_core-2.16.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07982b82d121ed3fc1c51faf6e8f57ff09b1325d2efccaa257dd8c0dd937acca"}, + {file = "pydantic_core-2.16.1-cp38-none-win32.whl", hash = "sha256:d0bf6f93a55d3fa7a079d811b29100b019784e2ee6bc06b0bb839538272a5610"}, + {file = "pydantic_core-2.16.1-cp38-none-win_amd64.whl", hash = "sha256:fbec2af0ebafa57eb82c18c304b37c86a8abddf7022955d1742b3d5471a6339e"}, + {file = "pydantic_core-2.16.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a497be217818c318d93f07e14502ef93d44e6a20c72b04c530611e45e54c2196"}, + {file = "pydantic_core-2.16.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:694a5e9f1f2c124a17ff2d0be613fd53ba0c26de588eb4bdab8bca855e550d95"}, + {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d4dfc66abea3ec6d9f83e837a8f8a7d9d3a76d25c9911735c76d6745950e62c"}, + {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8655f55fe68c4685673265a650ef71beb2d31871c049c8b80262026f23605ee3"}, + {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21e3298486c4ea4e4d5cc6fb69e06fb02a4e22089304308817035ac006a7f506"}, + {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71b4a48a7427f14679f0015b13c712863d28bb1ab700bd11776a5368135c7d60"}, + {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dca874e35bb60ce4f9f6665bfbfad050dd7573596608aeb9e098621ac331dc"}, + {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fa496cd45cda0165d597e9d6f01e36c33c9508f75cf03c0a650018c5048f578e"}, + {file = "pydantic_core-2.16.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5317c04349472e683803da262c781c42c5628a9be73f4750ac7d13040efb5d2d"}, + {file = "pydantic_core-2.16.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:42c29d54ed4501a30cd71015bf982fa95e4a60117b44e1a200290ce687d3e640"}, + {file = "pydantic_core-2.16.1-cp39-none-win32.whl", hash = "sha256:ba07646f35e4e49376c9831130039d1b478fbfa1215ae62ad62d2ee63cf9c18f"}, + {file = "pydantic_core-2.16.1-cp39-none-win_amd64.whl", hash = "sha256:2133b0e412a47868a358713287ff9f9a328879da547dc88be67481cdac529118"}, + {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d25ef0c33f22649b7a088035fd65ac1ce6464fa2876578df1adad9472f918a76"}, + {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:99c095457eea8550c9fa9a7a992e842aeae1429dab6b6b378710f62bfb70b394"}, + {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b49c604ace7a7aa8af31196abbf8f2193be605db6739ed905ecaf62af31ccae0"}, + {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c56da23034fe66221f2208c813d8aa509eea34d97328ce2add56e219c3a9f41c"}, + {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cebf8d56fee3b08ad40d332a807ecccd4153d3f1ba8231e111d9759f02edfd05"}, + {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1ae8048cba95f382dba56766525abca438328455e35c283bb202964f41a780b0"}, + {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:780daad9e35b18d10d7219d24bfb30148ca2afc309928e1d4d53de86822593dc"}, + {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c94b5537bf6ce66e4d7830c6993152940a188600f6ae044435287753044a8fe2"}, + {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:adf28099d061a25fbcc6531febb7a091e027605385de9fe14dd6a97319d614cf"}, + {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:644904600c15816a1f9a1bafa6aab0d21db2788abcdf4e2a77951280473f33e1"}, + {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87bce04f09f0552b66fca0c4e10da78d17cb0e71c205864bab4e9595122cb9d9"}, + {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:877045a7969ace04d59516d5d6a7dee13106822f99a5d8df5e6822941f7bedc8"}, + {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9c46e556ee266ed3fb7b7a882b53df3c76b45e872fdab8d9cf49ae5e91147fd7"}, + {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4eebbd049008eb800f519578e944b8dc8e0f7d59a5abb5924cc2d4ed3a1834ff"}, + {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c0be58529d43d38ae849a91932391eb93275a06b93b79a8ab828b012e916a206"}, + {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b1fc07896fc1851558f532dffc8987e526b682ec73140886c831d773cef44b76"}, + {file = "pydantic_core-2.16.1.tar.gz", hash = "sha256:daff04257b49ab7f4b3f73f98283d3dbb1a65bf3500d55c7beac3c66c310fe34"}, ] [package.dependencies] @@ -2408,20 +2382,20 @@ diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" -version = "7.4.4" +version = "8.0.0" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, + {file = "pytest-8.0.0-py3-none-any.whl", hash = "sha256:50fb9cbe836c3f20f0dfa99c565201fb75dc54c8d76373cd1bde06b06657bdb6"}, + {file = "pytest-8.0.0.tar.gz", hash = "sha256:249b1b0864530ba251b7438274c4d251c58d868edaaec8762893ad4a0d71c36c"}, ] [package.dependencies] colorama = {version = "*", markers = "sys_platform == \"win32\""} iniconfig = "*" packaging = "*" -pluggy = ">=0.12,<2.0" +pluggy = ">=1.3.0,<2.0" [package.extras] testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] @@ -2467,13 +2441,13 @@ files = [ [[package]] name = "pytz" -version = "2023.3.post1" +version = "2023.4" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.3.post1-py2.py3-none-any.whl", hash = "sha256:ce42d816b81b68506614c11e8937d3aa9e41007ceb50bfdcb0749b921bf646c7"}, - {file = "pytz-2023.3.post1.tar.gz", hash = "sha256:7b4fddbeb94a1eba4b557da24f19fdf9db575192544270a9101d8509f9f43d7b"}, + {file = "pytz-2023.4-py2.py3-none-any.whl", hash = "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a"}, + {file = "pytz-2023.4.tar.gz", hash = "sha256:31d4583c4ed539cd037956140d695e42c033a19e984bfce9964a3f7d59bc2b40"}, ] [[package]] @@ -2539,6 +2513,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -2796,13 +2771,13 @@ full = ["numpy"] [[package]] name = "referencing" -version = "0.32.1" +version = "0.33.0" description = "JSON Referencing + Python" optional = false python-versions = ">=3.8" files = [ - {file = "referencing-0.32.1-py3-none-any.whl", hash = "sha256:7e4dc12271d8e15612bfe35792f5ea1c40970dadf8624602e33db2758f7ee554"}, - {file = "referencing-0.32.1.tar.gz", hash = "sha256:3c57da0513e9563eb7e203ebe9bb3a1b509b042016433bd1e45a2853466c3dd3"}, + {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, + {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, ] [package.dependencies] @@ -3327,29 +3302,30 @@ six = "*" [[package]] name = "urllib3" -version = "2.1.0" +version = "2.2.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.8" files = [ - {file = "urllib3-2.1.0-py3-none-any.whl", hash = "sha256:55901e917a5896a349ff771be919f8bd99aff50b79fe58fec595eb37bbc56bb3"}, - {file = "urllib3-2.1.0.tar.gz", hash = "sha256:df7aa8afb0148fa78488e7899b2c59b5f4ffcfa82e6c54ccb9dd37c1d7b52d54"}, + {file = "urllib3-2.2.0-py3-none-any.whl", hash = "sha256:ce3711610ddce217e6d113a2732fafad960a03fd0318c91faa79481e35c11224"}, + {file = "urllib3-2.2.0.tar.gz", hash = "sha256:051d961ad0c62a94e50ecf1af379c3aba230c66c710493493560c0c223c49f20"}, ] [package.extras] brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] [[package]] name = "uvicorn" -version = "0.27.0" +version = "0.27.0.post1" description = "The lightning-fast ASGI server." optional = false python-versions = ">=3.8" files = [ - {file = "uvicorn-0.27.0-py3-none-any.whl", hash = "sha256:890b00f6c537d58695d3bb1f28e23db9d9e7a17cbcc76d7457c499935f933e24"}, - {file = "uvicorn-0.27.0.tar.gz", hash = "sha256:c855578045d45625fd027367f7653d249f7c49f9361ba15cf9624186b26b8eb6"}, + {file = "uvicorn-0.27.0.post1-py3-none-any.whl", hash = "sha256:4b85ba02b8a20429b9b205d015cbeb788a12da527f731811b643fd739ef90d5f"}, + {file = "uvicorn-0.27.0.post1.tar.gz", hash = "sha256:54898fcd80c13ff1cd28bf77b04ec9dbd8ff60c5259b499b4b12bb0917f22907"}, ] [package.dependencies] @@ -3669,4 +3645,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "16b0586b5b754fd8703e50445813eb574a013632609806a87e29128bea872c38" +content-hash = "05300857cd0adebd7da71b07bb0fe9da78d3c0bb70fa0e17bef2bfa38dc54fbf" diff --git a/pyproject.toml b/pyproject.toml index ba4419b..104dbf8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,16 +9,16 @@ readme = "README.md" python = "^3.12" fastapi = "^0.109.0" fastf1 = "^3.2.0" -uvicorn = { extras = ["standard"], version = "^0.27.0" } +uvicorn = { extras = ["standard"], version = "^0.27.0.post1" } [tool.poetry.group.dev.dependencies] -black = "^24.1.0" +black = "^24.1.1" isort = "^5.13.2" -jupyterlab = "^4.0.11" +jupyterlab = "^4.0.12" jupyterlab-code-formatter = "^2.2.1" -pytest = "^7.4.4" +pytest = "^8.0.0" httpx = "^0.26.0" -commitizen = "^3.13.0" +commitizen = "^3.14.0" pre-commit = "^3.6.0" [build-system] From 2413528081c306c1244854147259fbd96f9d5758 Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Sun, 4 Feb 2024 17:16:28 +0530 Subject: [PATCH 06/17] fix: BACK-22 added missing favicon.ico --- README.md | 4 +++- app/main.py | 7 +++++++ favicon.ico | Bin 0 -> 15406 bytes 3 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 favicon.ico diff --git a/README.md b/README.md index fae0e18..3d165a0 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,7 @@ Table of Contents: #### Installing dependencies ```sh +poetry config virtualenvs.in-project true # OPTIONAL poetry install --sync --no-root ``` @@ -48,9 +49,10 @@ poetry install --sync --no-root - Your IDE should activate the virtual environment for you automatically. - If it doesn't, you can follow either of these steps: + - Check the path of poetry env - `poetry env info`. - 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) + - Execute the `/Scripts/Activate` script from the virtual environment located [here](https://python-poetry.org/docs/configuration/#cache-directory). #### Installing git hooks diff --git a/app/main.py b/app/main.py index 9b85713..4573e36 100644 --- a/app/main.py +++ b/app/main.py @@ -4,6 +4,7 @@ import fastf1 from fastapi import FastAPI, HTTPException, Path, Query, status from fastapi.middleware.cors import CORSMiddleware +from fastapi.responses import FileResponse from fastf1.ergast import Ergast from .constants import ( @@ -26,6 +27,7 @@ origins = ["http://localhost:3000"] # Ergast configuration ergast = Ergast(result_type="raw", auto_cast=True) +favicon_path = "favicon.ico" app = FastAPI( @@ -54,6 +56,11 @@ ) +@app.get("/favicon.ico", include_in_schema=False) +async def favicon(): + return FileResponse(favicon_path) + + @app.get( "/", tags=["root"], diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2fdc34ec92378e0b9c40dc95ceea9f1ff6d94f92 GIT binary patch literal 15406 zcmeHucX(CTl`r;8Udp^Twgaf$-ivO(SGwvIgn9u9^@4iW73vLC0U;qk2nh)!(R=S0 zY`~`27#rKz&-OUU#BJ;l{9=-j7=g9kZy!vC$>(_D8E5{=`M#}l?!D)nz4qFx{?^ir z8BfgkhZ#>lJp*U)jN*TsF~f7lj2U9_!_VqxX3UttcP7)cy}RK(gWh=0h+)th-qUKdBU*(5vwZX6?d|AOy=d}We*__o5!@pWEx}lKK>T=*=)95G@9m;RMA8{ek#c%MpDUCq?D;i zEKVnhIEb{`Wb&~3k*9~p#mC=aFj>a5S{=Fa=HuRA@-UewAwHfK*VJOvQA~6+xob2e z7HUbUY$k(FPZm7GXwVvsW`$Bc?c$b4d^aBX`*_jnwd?4@<(KI4wO8rehfLgI>>4;(DIf2bmsXBQ#v&d)m<0 zMD*Z>@qH@>2B#WZmXK5|CWX9#1b9X)l#cKPqW4_+t4J);QFvGw9Xxh|#x`%R9o)F3 zxuvsrw4t?YtZ#7CQBm92FuZ9qd3xGOtuT{DGe{z#=v{$Gd`}|VL^832iVBNp^Y&fS z?aTUGE2n+ zpGG!KPS>|~CFT{DU7r&fx5(nRqW!F`_eOl1$UgcuFm8OKEU;vG&Z??dc(xF>213YQiWqNxj4IG4}&Rg z;bHQySiaI~wVXV=>-A$EUg2a4K0_k0Cy4|?yjw?6(Q%k7h7<}Fxj4B%oyq4-(hiGx*Fg3J|(XzhHv~1NDs;sK~Dn2%LG$|?RKj_aR zI@mcfGSZZumNrsTUHxuH`_g+o-JSP3mbAU=s3;rG$;tVP`uq4hzRNYUGh&P&3}&DH zyT>!nJoA*ZvvVrnjlWSW5?_}}q`#Jkr4JyV4`jH;=T}5R;YNX*TPnNvzdPTf=cPQU z61Hz#qt@It8BMS;p0HWo*L3ry}Z1+-^{qjU8B9LQK~jcrBcPC_k7p0 zo7MUgwOZS+bJtDTtTyt-``LUx-Z8k20S%>O_iP{!kLCCrMRt1&XqiL4>>e*KCWmA) z7^e(6L!TAz`Y!XEOeTfFV7zHISvb4m>FGsga|h`Rdq}Q&l@zKaB$KZtv2>Dn;?JQ6 zNu*S*CXM!0vRN}gn-_Uw*kO|_W;0nWmYa}c`CmhW)#?RTV7X;6Tgiqs7)^zw)|Qh* z5=hR1%g|K~xw(Z9&rL`Io)Wgso%lRCbi9yUh382mSw(7o}Wk)N09~)sSAT zA`QN0wpPg3gDxIyxEMTo3I1e0e3Ol=W(#?Fdff^N3i?Jqust$cJ>G(ECHPB{D^qEf z8|HQE!&(h^zmhDN*Jd(OfR7Ia`uoGyd6U1dF9rDdk=YT{MsSX z>jKGa!kP?5CZjjMNgk|LkACJWwXnkyiHw|K*PNW3!CxVnbnfJ3wNjw34<#;0q$M3) zG`?j!9XfuB4j(^Fn>KH!CGDLwKVd%J??GCXiX?cB@k=CmjZ|_SX;f;`;r)7d@XliG zdwd^^o}Nl~oncC))AHT ze?)^;ryrMtzhbeBW;!3GS@x zQn~7`5Hz~+7SPkPe*sz3lUgn(PqT?agM(??u6>x}1$y!7%k=E|i_?1!9^SrT)28sj zk+F3H>qi>bu3sO%VSMw>ExY&A_I-yy>k%5+ILY`7ImAAI4=R}ry!{mM#e#?ODU#e} za|^`MR5mxCFQnP7+sWB&m_+!@WX;!Zr;hIBbmHvuEOw#&M~{6zFf{W1=;#(9qkY@{ zW2+{1?5||k>nFE+G`4rW**`e)>xkI-v~ACRT3pu%T~u-NOYu&fb`pMc54W!(@B#cz zapem(385=|o&tLIOLBFK;(WE$Xr!>YVc73;wExI4+P-(+)WG1NXJ_Bql%0o8zP)0_ zil^3&ZXI1cGSS=JJ;0mTwg1!l_HM7*rZ#(JO~X|8$^qJa@F?t;7dO8|BqED3jWq7J zNX(aDAB1epW3D{Gbv8ebA5AX856R6{KpLfzJYh4c5F4C$_8e{7y@yr}4sK!VB%&v} z`vy-h?e2S{w5slQVVUDrsmXx-`PE7j@o_g%lbg~30jm_z{PgVCYam}WcU3o z^b>0YJ$%04nj2qmTO@+r5LJ>uas|51C#_ONzObGBtJiQkHab2@H4QEAZp|9H8 z+yA+;wmGG`uI)-qeG7|M*0Qy-!|ofjI%82WWh^Q^5j%gOZ((8kPl_vQrV-=f+4a~@ zDe*AB7JQ9Oc%96~CE$S+x+%Hu#uq-2NaV0P%SfX?2Rhxz9Wvu(v(f0LaoV}>04-a& z>H+5eUu>@E_{7kRoC1o7iZ5ZG*`YUj7R`&APf-cUDY);+ii(OK<`!2?uOFMFfwe=N zzVV=gI@sxjX>Y?XErmYFVdtdx-2}qhGMR#m<`y#9-vFIF&enRsZ}s-|(}5$$scU&Z z<(E3TyOyuH+}7Un$K% zE9>dv<*Qs=&qMyg`0DE!K#PjMf?bIry#}^cEMfAuNdbA&x?9O>&L2o3OC%xeg*$8? z^WA69UqrmTm1-K>rc*QX8)I{G|4(CU*N4#w$#r3o^AE)*Wu3Em2V`XxR^N_`OA(~x z6pIm;-x(Ykr=us%z~(Ap&s~X+`J*EnC^hHTuq_7CgBS2KV{QU*svPTAYuw4=dzMtj z?Vy!M3dH;@H>-41(+gK#MxM16I?(nJa+mET6*WC<-&3-R8nW^#*RboD`I$NMQ*)my zEUSIDseJ`K|Ke53$<2qY;lr0Xkp}iOEB7)*#qA?A@;n{pS1L6rh|!)xu6CEj40>}O z>HP1KP-ul7y1`e-;VaZMG%|{O?<)1L8KL^-j%i12b4yuSjVL9vATw=IMQeU}tpvK! zQdQq}uYLJyI(Okk>g^wZE(yqKmNS=|1pB8@df|Nv^h-e=iaZVRB;t*KX0*cwk0V#% zatpoh%cL+JguL(|i*B3`!@aa--FkZY)f=2`@97()=Jw@;9PoZ)ThCXmohzw*#TweY zV;|(@CCFd+R!hN zBNc!KH%=Z|JR?DTC6_BHGCGzV$ltq`^>Y5HylOGcofkm@p@@rHX3ccs@-ikvVUa_W zSokGH$5c{qKmZq)nhd6uY|h6I787Z-x|=MI_Vx3pz{pi(iM>ZkQ#W){fVd8RoX28L zA-6t0yXK3y;pWN*ojh*MPFS}9`liR8MarVIb!)Y|2)TgM27}3 ziQZtm6$GCj6%$KwsXY|FV1zueXA0wH5^Kgts@_3-$u`8@2Z$$ZLCm|Gc%n8Eit9

3lwUGL#bq6ok(tS19X{SZzw+_%kv*F4o6ZKS)#B;pbt^nFl9JOi zpfkCY&YsV@Kt3@S$mGA1G`5{2H|`~+VSqH|&1CRcNfvtz1xD?mxTNJ&Ts29xb+uIA z*hr=2<&>0^NCE!-zX}Kl_}2LQ5j`vp2aj$>L`8A)7gtnJW#c$iFFi?Rb=xVod@E%X zZl#pGEtFBPo$|_ekfUi2Em?MemJh#5%h&9quAXkHsja1jNl6qoXU>}u5fR_I?niS! zIx~4dtlk$M9zK33G^58T|`%tF4fULuwqk;~+tC=n~T!&e%S%d(u7 zP!<-ZO-p6v8?1)4nsS}ArX6Q6f@xT3n`9z3&Hz}3M4;hBT zXkwU*H^Yv+{~bGG_z@d^KK@^yfhPekW%n@5hhaY!tP|Mu6yl)|RZ1npmAL%tZ?K9d zWHOl(Xs%Hy)pzs^4+lSCkIDN_G>3q;K#cjonXIUbbA2%u_OQUvI8Hnr{TJo zEY=~&OB-3O$z(JR0Bacl_PmRfn$O5!?8a{i`2H|z6DRR}E1u24dKkv%&Fu%nlfGWZ zl-Xc9i8Ta#59B{-Fq!fZ|9oaNn5JzOk3ZpV9yU8-qHbVduVd^%9poJH#Q#eYX*sZ! zMiPi8fh&w7cm0^$gfAj@4@ZoYMpD^T#MDQj3(1h75Dtrb9G7F56!v1;X0?85v)Oa8 zhX0a&L!W+Rve+EJ?0(O1Gb`TfVFQn>!Js=1b)H~SseD1_1oHcz1H1DlSJ(OE;u3~f zjfc2NiFjX!ILd-pU59H8a`AqwyTfd;-ZmP{ct5ix9*~1%@VbQr(sSer%*IVn08AzVbT8myVul?k zP)|?;Yh!pD!wcA8m<{`0f;dzpFk>ByFqV@*5K0o{_zL7gT1`G|R|jbKLR{woY!bGM z>6oYewx3@>)pywktEX4K#p>~Uh8LPmR`A;c_=baIib~=O&A<*z$(er$w0m&51gpLIEYh=)O zfo|jypx?&$2CNwN>URNt0Zf+uv*QVy%`3=i^ZZP&Gk_l^4)fHwgU7-bXr|j+G}~>6 zT=*^I>@4H>$!M|w3p4|Z^Z+i#uqlRr`T+~|gKjb$l%4%xGd(S4(y{fhwO~!GuJs6y zl!{c)j}@d;G{cXe=BKw{-?8_wvB(Rs4_==lMrJzw7wwY4$H&QH^Ed@tGpz&tY^abw ziY2HAx!P&Aa|P;t*^p`A8kpaV`XIydyn)d&x&uIKbW}8DW@S@pSp_*3*I?9g*BP1F z6h1GUvo|d6H|h1*3kC2B8HZUhEKe-dK>yDnf8BvR4r>Kg!2BVrU*bIN;bA}N@9)oS z>o*=&4||PXZ=7OyFLEAY`8OZA49i_+&6*9pbVmLt;`qm8h2@M4`wax$4F6q$n&%E+ z8;61ao&e@~`nik12VbC*xITF76!#muCoV1?egi%XSQ_df9OlJzM}WMTFM1jE(k@a; z<)i}kssaDpK?`ap*b~E)*=$|>O~jkcJ|d&pdIz-;;PYD0u7Q53Im}?@PiN80nKSWz z9*4^_tlZDblR^RmDIT;e>+Pds$X8k3%IIY|{iT<$b676JbuR)(J_{W8SzxVfoIZD+ zx{*sqL_~5vPzxDkvc%pm6ec4tjwcmzOtv_ob(wdIt3k7vSY`PDi~xtQ73;Penz=tbWV!n&H5#2L1AD zZ_tgm-obd6Uc31Yz4FFebOl)W3ooNKjdeVWb+C1^{Tbh~136$e=gZj|I9wib#PU=r z@L`oA8M1qXBv=ot_sXPF4kuRuBX~Ss(r648l~(tW3>dlu`z91hfR`VlpF017X3m}i z`I(JctrR+{L%qO)I)yiClht(i#A&Wp{^HeZz%X9t@bhaoZgRXo1AOT?FxKN|&T{9Y zXP%=I=Pq#L2=?kA>I+A4-UCcKD<>B=Lj6*d(Pq0oe8@uzAlyN5mZF z&ghUzWFN9x{MT~yq)er$2hKkw!Wsp@eBF4N^wg{mv4+hwdp6!F;KLqj$qxJB54)0$ z`Su+?PA4G;4C{XZ`1=c3!`bsM{2q1ux5p+XdRGswPX{LcPXC&9Csz*-$FE&K(z{`N z^6gy*j@;diXZK*>nhrrPCb#dQ_=E+J4PbBJKhtG~D=4JykQ?OnqR)YKWN}y-vsYrF zqbXMXEDAE4i5fs^PWRDHg4Uy{cAqWXz%NDYG1Z;NB`jZ zX?#!12i8$f-)cH=^d$AJTFb?PD)>ECTVVRkhE|medHx8roq}9}M(m9YxTjDcJ}efC zpB4xNGV~;T!Y~>}zbh|>X1d-aC*CE{4qpR2)&g6{cpm`X*ETe9wH{XQIeGRu= zAvfRXSvm0h=;odKhlht*PBH^{@6)IUyf?mm|2c-uv+q`qOp1F4H@v#IsjaVbdEZO< zB^Bfs6iS05n`rN$W0Y4|!quT9s7Ww*VeG{TO*in!_L*pn#EU$Wl?eBsC7z0^e{ zib78YY|TT=$HlE4@ysXW%3lgRh{s`tX3)=Y>yY3OPUacy`;Qz2-;Pg@Z`tm zbHys-#Lk1CP43*krn-9I$4N;!E)%;B{cPRn=C|70Cx6u5zWV7++xJ{tKfdj?_V!-4 zmX>Z&d3D{5yyCLy#SN{HrNcD2V=v+>57uYF$q$ni7KeCP`^jDR8^juo&tgWyd9L=bZTDWt?T$PBgM;Y| zTL=E|*%?&q-Q1ea2u!7Ik^R_&*Pyjg$~G}lU`QzPk4Qa?>9p?ur{oL)rkZmNtX+c zf1D55Vf^RwP2?gtO|GK1VfP=#B?jb#tY*YwfU$|qbPDwEJ#-kgxZSjT)xi6pgOhhA zAM?|4rAvDH|7CdNmOmDjR{z>j*ZftPqwcH1(yH4%{p+Sms_L#KCFT8;-OG-oj68Ws z<>FtqqYkikcq1JGuDyEQFzYh`eW)Wr)>+Kwi8#nV_%q}W=V4ckoE;J~c^8U~x$^k$ zGTG;9Jwk8di{HRFf@dGv0V84rJ7THG@Cc6X)2O#?*|{4v7+`4)EuXLGA3U&T{Y3fd z^^>NO5{J~&H{?oP(-JDJti4-aRrf)DN#!q-Gji|d6<3he?)O4rd5yZMeOYvC&#K{4 zN8_7mS$Ve`+B&JLcYyQJTXydKx;6$~baCNqkrlRe&b(`6_kIU{*_$L-o0Qe2gyOfI zdHgSgxE4XDC6Zvom>-c)GR9%tY>lk8#AH7yF^P_xI0c(?fkr1#e;FL2imIBL)~?=( zm1{>oTRS{{x1+oN7kNb$Q$?j!zg?J;-I|t`qnH~Vtq7VE(GnH6@DA!%4{DmaZr8Rh zyI)?@`dW5gS!;4yc6v!=Ej2Ca=5(0FA0eT05vPbb`h|P}S67INIYR-#pFkf1xjo@* zkWl=&vn%g`5HiN>r$P~iTGRi7&lrI2@;Q8)#g}%}xKmS8>DZ~$h-J>v(C8TT^!DF} z?EEAtsq}x>x3;Plre(F~ad_J_$2^92U*Fh2eWYC4~zJ`~E;fnWyha)CowSQK#N={AzCVvL{dyWPmqa8gfz6AYT?TpEC zXlUrnIpMK;GII(kIyT`?HB0szJM<>|G;NHhhLVlh*k9x}x>X$31uC7j2)!gIU(y=nRy?f=xhSrW> zcp4y^QhS&({}m@o}yOv}R}n_`i}C6_#CVXzjkSyno%Drq<4>q?D|WBV!j# zVcho*4nJ-8368V*2FKdGgHCz*hu-)05B;O3PtYszN!g#JWS87a&#n9@c0u|FC6#rY z{GUd>W!K&V=zG+GehF+K#*dQ}_ux|Y@S99A4TixD`+GAPuZ?kd>)@NqsB$bz!yP*d8 z1B<8M>4M@a3J0$P=R{J-yg2d;j-aHBBC>f0Ut+m9^T$lD1LsC&CZ=S6R$Nt2=nvrf z7+CE_3|qo{C+ojs_H#}^C>507qv*Kjq08Rn4*$S%1IWxVSAnPpbvllIjmAp$fWu@9 z{0ebsC`Uhw_jJf(S-zBR= zXzulx`DynO({iV5-htQR7Uq1isHE=Wq|{u$M{<>tT@<>guh##2zuv)KLrA57@kG$qiky5*o zv!P6eG{_rR&68n;JNNFR7hk%DzJp_W!}I*Z+4wFd^L=9K+5J=d`(K0fDZ=EpJ%$`2Km*M8NxVgR&Xqv6qUMiXoY ztBtyFwP}U{WMrL0efTZ~2DWguY9sPV1>_xgV1yImH@;B(i5fnS=4@nEz7xKi;|O5AwyS@M_uIV=Z&qMtcHCIJP%sj(Dr^|ab-K>FYM<(Bxe-9 zlwDB$K5`AtN6(2#j7!QY`8XjhH$5l6VyLj9VY;TN1Mhkfe*OH{ycdCPH`LsmxZFO_ zCmJ>Sf1{+#Pmp5+!$Uk^0UuF+{#c<45%S9Zm12<=4!+4sIA7v_EAphmlPR$ z6mftD=gU~Gqg1L6qgMJfSoI|MUyr0ejlq@p)Bk^OmBjnz^dhQ#vaM2WU?T7Vk zFJN21>hGbKmdjt*UW?F^D-el3atB_)>g_sr=!nl{()ivbi98eUb>(7F_D&YlGQVa+ zoI9~~8*=pPbQ!t&rY$=Ou_i6)?&E6Ubxj@jDr=e_IOsz`Xw08DVOJ^S~UABtW zjZShoJ%sgv+Y6RUdwSTp{8xjp?STq5i}ePCp~k*;XgyuIcAZ|i@dn20=)b#x zy?Ko;zjU3mi_gD!g~KNpjBFXv0P-t8@VG@!?{1 zSG;33lXdiQFy1qJ&u~#c)IVZUZlJf|J|(2?r#V3(=MAb)>`tE0cr;`npAAAOb? z3{F_XDd7Fn9#}8ybM^L1AkXm2q!0g+RGtTb?fW1%;6tw;##Rh7<8nFVKj<6cd?)Ky zL=OvaUtqt$VwqiGm<-F2SYE{J0qX%_eHe`A?0s6?@8@3#zTc!|*qenpN6?oOM`0l$ zG#3N?q0^|Vo%p&o^N8d>KR=;HtwpWXeP%(-;q8MS)Sw^=4ojoJ`IpEV|A5p1Z<0bC zi~R0ke#V`FF)}Qf(Z+g2Snk96C>{u(Z{GySy*qlI3y80MAH7kzBvtLg-ZTKG-h%#%W^&_KA{QM3&b|#; zKq2ZDo6wIjMq*hXdT7p&%6$#F+YSK(jif;Q4@qJ|D&;MHgNm#7Q_iA1N=-@O{wHNl zXeh%Ne+TS2=MjB>#hKNO9N2@~f#82+bPUa3n2a8`Y)Z{;p!o|HAVv=(-;iab2_@1P zsz_mdljQCjNaX$jiPV=#q}V`0)lCv8FC(WbB8mHJBv&^fKXQ=C?>W#NL_x7<&_9w( z8L7!sT2cbtX{Pdu3d%1mr1bPO4r>DbejBv2UeN!P?~kvG)sHMTn}e-AI5>n7KyzAl z7G>q-B9_gktVN3`tzZ*H77+!-A4HGZB$<6yk`ZmR=@R# z4SUId?n;VSFi8uuH&9W{vsByIPmN8D)YQ^K4NXl{g+7X`EaYkE%Rw*o?*an@EB_1i zqen}5(&p)zhyV5X6l<7XfS!}=ygVu>Euq4)GAgehp~_{qsI2KM6;uL?EtsIh%rS~f z9-*kjVe|>Dr>F(P6rZvIeOenSw`4Pw*X^dpj)T-We4CbUyhY1b@8)`1+B-X_uAzbO zKO5MSsOdQ&A)lg0B3sJ z9kq52!^e(MYu5xdcaBqQ_hxGA*+T8hwgO++N-GAoA{~zUgvU~gBlhHp@ zh5nQb$P9X_r=r5cPt2P)kLl|7bv(i99>KxEi@}pG&^LozAcb-Z3b6kTv;@5CTD}aJ z{&M_3RxkCfT7@3l0qP$Z!2fowLEf_teLO?7eq;o(&IXJTTDxv7b#-@<19TTa9y8O^ z3B5SKNsNzoKwiGr`t{>Xh>ngH;(vBF#>T{an6zNQy)@twxsWO3!d!n*H`cLoU=`PY zw07MfN9XW{VbH#w)(x%0npROK*1Nd6iprt0B?bBS^0Tu(%t}oiTa=RWjehm<`M-~A z7JJ0U$D0xp5^B>@k`FJ+&ic48KaVP)7u8i&)L36nt HlN|W}P=hr1 literal 0 HcmV?d00001 From 059a86a998a262a3fbc81ceddf27cd91c6813471 Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Tue, 6 Feb 2024 07:38:38 +0530 Subject: [PATCH 07/17] fix(schedule): BACK-24 exclude testing events --- app/constants.py | 2 +- app/main.py | 2 +- app/test_main.py | 50 ------------------------------------------------ 3 files changed, 2 insertions(+), 52 deletions(-) diff --git a/app/constants.py b/app/constants.py index a969c89..78fa4e4 100644 --- a/app/constants.py +++ b/app/constants.py @@ -25,7 +25,7 @@ MIN_SUPPORTED_YEAR = 1950 MAX_SUPPORTED_YEAR = datetime.today().year -MIN_SUPPORTED_ROUND = 1 +MIN_SUPPORTED_ROUND = 1 # testing events all share round number = 0 MAX_SUPPORTED_ROUND = 25 MIN_SUPPORTED_SESSION = 1 diff --git a/app/main.py b/app/main.py index 4573e36..eccc33e 100644 --- a/app/main.py +++ b/app/main.py @@ -127,7 +127,7 @@ def get_schedule( if year is None: year = get_default_year() - event_schedule = fastf1.get_event_schedule(year) + event_schedule = fastf1.get_event_schedule(year, include_testing=False) # 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 diff --git a/app/test_main.py b/app/test_main.py index 6957397..7086636 100644 --- a/app/test_main.py +++ b/app/test_main.py @@ -48,31 +48,6 @@ def test_get_schedule(): assert response.json() == { "year": 2023, "EventSchedule": [ - { - "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", @@ -633,31 +608,6 @@ def test_get_schedule_good_year(): assert response.json() == { "year": 2023, "EventSchedule": [ - { - "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", From 7e4e411038162c6a083c98eb3879363f0db47080 Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Tue, 6 Feb 2024 07:47:52 +0530 Subject: [PATCH 08/17] chore: updated dependencies --- poetry.lock | 436 ++++++++++++++++++++++++------------------------- pyproject.toml | 10 +- 2 files changed, 223 insertions(+), 223 deletions(-) diff --git a/poetry.lock b/poetry.lock index 50c907a..6893ae7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -302,13 +302,13 @@ ujson = ["ujson (>=5.7.0)"] [[package]] name = "certifi" -version = "2023.11.17" +version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2023.11.17-py3-none-any.whl", hash = "sha256:e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474"}, - {file = "certifi-2023.11.17.tar.gz", hash = "sha256:9b469f3a900bf28dc19b8cfbf8019bf47f7fdd1a65a1d4ffb98fc14166beb4d1"}, + {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, + {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] [[package]] @@ -529,13 +529,13 @@ test = ["pytest"] [[package]] name = "commitizen" -version = "3.14.0" +version = "3.14.1" description = "Python commitizen client tool" optional = false python-versions = ">=3.8" files = [ - {file = "commitizen-3.14.0-py3-none-any.whl", hash = "sha256:5345a118f2a0b2b8fcfc5fcfea7945f8c984803836a1735199d469e865be4efb"}, - {file = "commitizen-3.14.0.tar.gz", hash = "sha256:3c799dc0ffb2c99d021edd32de55ddce182635bf6129ac6abf223696ccbdd1a7"}, + {file = "commitizen-3.14.1-py3-none-any.whl", hash = "sha256:e0f0bb2eb19a6bcc540902d32e5e3b53c2f7636e888bb1894f83efb416af8762"}, + {file = "commitizen-3.14.1.tar.gz", hash = "sha256:21e19143d209fd6b1feb6332430ad91cf5d37ba09990c74d1f941ef1e9087898"}, ] [package.dependencies] @@ -716,32 +716,32 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastapi" -version = "0.109.0" +version = "0.109.2" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" optional = false python-versions = ">=3.8" files = [ - {file = "fastapi-0.109.0-py3-none-any.whl", hash = "sha256:8c77515984cd8e8cfeb58364f8cc7a28f0692088475e2614f7bf03275eba9093"}, - {file = "fastapi-0.109.0.tar.gz", hash = "sha256:b978095b9ee01a5cf49b19f4bc1ac9b8ca83aa076e770ef8fd9af09a2b88d191"}, + {file = "fastapi-0.109.2-py3-none-any.whl", hash = "sha256:2c9bab24667293b501cad8dd388c05240c850b58ec5876ee3283c47d6e1e3a4d"}, + {file = "fastapi-0.109.2.tar.gz", hash = "sha256:f3817eac96fe4f65a2ebb4baa000f394e55f5fccdaf7f75250804bc58f354f73"}, ] [package.dependencies] pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.35.0,<0.36.0" +starlette = ">=0.36.3,<0.37.0" typing-extensions = ">=4.8.0" [package.extras] -all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.5)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] +all = ["email-validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] [[package]] name = "fastf1" -version = "3.2.0" +version = "3.2.1" description = "Python package for accessing and analyzing Formula 1 results, schedules, timing data and telemetry." optional = false python-versions = ">=3.8" files = [ - {file = "fastf1-3.2.0-py3-none-any.whl", hash = "sha256:c651709881b08604c8df7bc0c95d3c6e2e184967ddb05a6d7ae8adac1f2df559"}, - {file = "fastf1-3.2.0.tar.gz", hash = "sha256:45b8e6bc3faa48f476d0e6c96fcf97c097029ec4efcaddf9d583cabd8cd753ca"}, + {file = "fastf1-3.2.1-py3-none-any.whl", hash = "sha256:e79232576ee56420d67e3ccb5fa5a47ddacf306a9ee022ddc3da4a0062943078"}, + {file = "fastf1-3.2.1.tar.gz", hash = "sha256:3a18b9d7e3981ee3255d80720c5184530db26be0e8125ffb4c7ede9fee85963b"}, ] [package.dependencies] @@ -1023,13 +1023,13 @@ files = [ [[package]] name = "ipykernel" -version = "6.29.0" +version = "6.29.1" description = "IPython Kernel for Jupyter" optional = false python-versions = ">=3.8" files = [ - {file = "ipykernel-6.29.0-py3-none-any.whl", hash = "sha256:076663ca68492576f051e4af7720d33f34383e655f2be0d544c8b1c9de915b2f"}, - {file = "ipykernel-6.29.0.tar.gz", hash = "sha256:b5dd3013cab7b330df712891c96cd1ab868c27a7159e606f762015e9bf8ceb3f"}, + {file = "ipykernel-6.29.1-py3-none-any.whl", hash = "sha256:e5dfba210fc9da74a5dae8fa6c41f816e11bd18d10381b2517d9a0d57cc987c4"}, + {file = "ipykernel-6.29.1.tar.gz", hash = "sha256:1547352b32da95a2761011a8dac2af930c26a0703dfa07690d16b7d74dac0ba1"}, ] [package.dependencies] @@ -1052,7 +1052,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 (==0.23.2)", "pytest-cov", "pytest-timeout"] +test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (==0.23.4)", "pytest-cov", "pytest-timeout"] [[package]] name = "ipython" @@ -1359,17 +1359,18 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.0.12" +version = "4.1.0" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.0.12-py3-none-any.whl", hash = "sha256:53f132480e5f6564f4e20d1b5ed4e8b7945952a2decd5bdfa43760b1b536c99d"}, - {file = "jupyterlab-4.0.12.tar.gz", hash = "sha256:965d92efa82a538ed70ccb3968d9aabba788840da882e13d7b061780cdedc3b7"}, + {file = "jupyterlab-4.1.0-py3-none-any.whl", hash = "sha256:5380e85fb4f11a227ed2db13103e513cfea274d1011f6210e62d611e92e0369d"}, + {file = "jupyterlab-4.1.0.tar.gz", hash = "sha256:92cdfd86c53e163fb9e91e14497901153536c5a889c9225dade270f6107a077f"}, ] [package.dependencies] async-lru = ">=1.0.0" +httpx = ">=0.25.0" ipykernel = "*" jinja2 = ">=3.0.3" jupyter-core = "*" @@ -1382,9 +1383,9 @@ tornado = ">=6.2.0" traitlets = "*" [package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.1.6)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-tornasync", "sphinx (>=1.8,<7.2.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.0.1)", "ipython (==8.14.0)", "ipywidgets (==8.0.6)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post0)", "matplotlib (==3.7.1)", "nbconvert (>=7.0.0)", "pandas (==2.0.2)", "scipy (==1.10.1)", "vega-datasets (==0.9.0)"] +dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.1.15)"] +docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] +docs-screenshots = ["altair (==5.2.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.1)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post6)", "matplotlib (==3.8.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.0)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] [[package]] @@ -1557,71 +1558,71 @@ files = [ [[package]] name = "markupsafe" -version = "2.1.4" +version = "2.1.5" description = "Safely add untrusted strings to HTML/XML markup." optional = false python-versions = ">=3.7" files = [ - {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"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4"}, + {file = "MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906"}, + {file = "MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad"}, + {file = "MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win32.whl", hash = "sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371"}, + {file = "MarkupSafe-2.1.5-cp37-cp37m-win_amd64.whl", hash = "sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win32.whl", hash = "sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff"}, + {file = "MarkupSafe-2.1.5-cp38-cp38-win_amd64.whl", hash = "sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win32.whl", hash = "sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf"}, + {file = "MarkupSafe-2.1.5-cp39-cp39-win_amd64.whl", hash = "sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5"}, + {file = "MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b"}, ] [[package]] @@ -1732,13 +1733,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.14.2" +version = "7.15.0" description = "Converting Jupyter Notebooks" optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.14.2-py3-none-any.whl", hash = "sha256:db28590cef90f7faf2ebbc71acd402cbecf13d29176df728c0a9025a49345ea1"}, - {file = "nbconvert-7.14.2.tar.gz", hash = "sha256:a7f8808fd4e082431673ac538400218dd45efd076fbeb07cc6e5aa5a3a4e949e"}, + {file = "nbconvert-7.15.0-py3-none-any.whl", hash = "sha256:0efd3ca74fd1525560e0312cec235e57dfbf3c5c775c7e61e04c532b28f8da6f"}, + {file = "nbconvert-7.15.0.tar.gz", hash = "sha256:ff3f54a1a5e1e024beb9fde8946d05b6d0bf68cd14b5f2f9dc5b545c8bc71055"}, ] [package.dependencies] @@ -1832,47 +1833,47 @@ test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync" [[package]] name = "numpy" -version = "1.26.3" +version = "1.26.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:806dd64230dbbfaca8a27faa64e2f414bf1c6622ab78cc4264f7f5f028fee3bf"}, - {file = "numpy-1.26.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02f98011ba4ab17f46f80f7f8f1c291ee7d855fcef0a5a98db80767a468c85cd"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d45b3ec2faed4baca41c76617fcdcfa4f684ff7a151ce6fc78ad3b6e85af0a6"}, - {file = "numpy-1.26.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bdd2b45bf079d9ad90377048e2747a0c82351989a2165821f0c96831b4a2a54b"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:211ddd1e94817ed2d175b60b6374120244a4dd2287f4ece45d49228b4d529178"}, - {file = "numpy-1.26.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b1240f767f69d7c4c8a29adde2310b871153df9b26b5cb2b54a561ac85146485"}, - {file = "numpy-1.26.3-cp310-cp310-win32.whl", hash = "sha256:21a9484e75ad018974a2fdaa216524d64ed4212e418e0a551a2d83403b0531d3"}, - {file = "numpy-1.26.3-cp310-cp310-win_amd64.whl", hash = "sha256:9e1591f6ae98bcfac2a4bbf9221c0b92ab49762228f38287f6eeb5f3f55905ce"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b831295e5472954104ecb46cd98c08b98b49c69fdb7040483aff799a755a7374"}, - {file = "numpy-1.26.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e87562b91f68dd8b1c39149d0323b42e0082db7ddb8e934ab4c292094d575d6"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c66d6fec467e8c0f975818c1796d25c53521124b7cfb760114be0abad53a0a2"}, - {file = "numpy-1.26.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f25e2811a9c932e43943a2615e65fc487a0b6b49218899e62e426e7f0a57eeda"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:af36e0aa45e25c9f57bf684b1175e59ea05d9a7d3e8e87b7ae1a1da246f2767e"}, - {file = "numpy-1.26.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:51c7f1b344f302067b02e0f5b5d2daa9ed4a721cf49f070280ac202738ea7f00"}, - {file = "numpy-1.26.3-cp311-cp311-win32.whl", hash = "sha256:7ca4f24341df071877849eb2034948459ce3a07915c2734f1abb4018d9c49d7b"}, - {file = "numpy-1.26.3-cp311-cp311-win_amd64.whl", hash = "sha256:39763aee6dfdd4878032361b30b2b12593fb445ddb66bbac802e2113eb8a6ac4"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a7081fd19a6d573e1a05e600c82a1c421011db7935ed0d5c483e9dd96b99cf13"}, - {file = "numpy-1.26.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12c70ac274b32bc00c7f61b515126c9205323703abb99cd41836e8125ea0043e"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f784e13e598e9594750b2ef6729bcd5a47f6cfe4a12cca13def35e06d8163e3"}, - {file = "numpy-1.26.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f24750ef94d56ce6e33e4019a8a4d68cfdb1ef661a52cdaee628a56d2437419"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:77810ef29e0fb1d289d225cabb9ee6cf4d11978a00bb99f7f8ec2132a84e0166"}, - {file = "numpy-1.26.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8ed07a90f5450d99dad60d3799f9c03c6566709bd53b497eb9ccad9a55867f36"}, - {file = "numpy-1.26.3-cp312-cp312-win32.whl", hash = "sha256:f73497e8c38295aaa4741bdfa4fda1a5aedda5473074369eca10626835445511"}, - {file = "numpy-1.26.3-cp312-cp312-win_amd64.whl", hash = "sha256:da4b0c6c699a0ad73c810736303f7fbae483bcb012e38d7eb06a5e3b432c981b"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1666f634cb3c80ccbd77ec97bc17337718f56d6658acf5d3b906ca03e90ce87f"}, - {file = "numpy-1.26.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:18c3319a7d39b2c6a9e3bb75aab2304ab79a811ac0168a671a62e6346c29b03f"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b7e807d6888da0db6e7e75838444d62495e2b588b99e90dd80c3459594e857b"}, - {file = "numpy-1.26.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4d362e17bcb0011738c2d83e0a65ea8ce627057b2fdda37678f4374a382a137"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b8c275f0ae90069496068c714387b4a0eba5d531aace269559ff2b43655edd58"}, - {file = "numpy-1.26.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cc0743f0302b94f397a4a65a660d4cd24267439eb16493fb3caad2e4389bccbb"}, - {file = "numpy-1.26.3-cp39-cp39-win32.whl", hash = "sha256:9bc6d1a7f8cedd519c4b7b1156d98e051b726bf160715b769106661d567b3f03"}, - {file = "numpy-1.26.3-cp39-cp39-win_amd64.whl", hash = "sha256:867e3644e208c8922a3be26fc6bbf112a035f50f0a86497f98f228c50c607bb2"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3c67423b3703f8fbd90f5adaa37f85b5794d3366948efe9a5190a5f3a83fc34e"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46f47ee566d98849323f01b349d58f2557f02167ee301e5e28809a8c0e27a2d0"}, - {file = "numpy-1.26.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a8474703bffc65ca15853d5fd4d06b18138ae90c17c8d12169968e998e448bb5"}, - {file = "numpy-1.26.3.tar.gz", hash = "sha256:697df43e2b6310ecc9d95f05d5ef20eacc09c7c4ecc9da3f235d39e71b7da1e4"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, + {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, + {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, + {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, + {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, + {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, + {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, + {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, + {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, + {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, + {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, + {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, + {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, + {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, + {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, + {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, + {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, + {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, + {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, + {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, + {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, + {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, + {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] [[package]] @@ -2243,18 +2244,18 @@ files = [ [[package]] name = "pydantic" -version = "2.6.0" +version = "2.6.1" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.0-py3-none-any.whl", hash = "sha256:1440966574e1b5b99cf75a13bec7b20e3512e8a61b894ae252f56275e2c465ae"}, - {file = "pydantic-2.6.0.tar.gz", hash = "sha256:ae887bd94eb404b09d86e4d12f93893bdca79d766e738528c6fa1c849f3c6bcf"}, + {file = "pydantic-2.6.1-py3-none-any.whl", hash = "sha256:0b6a909df3192245cb736509a92ff69e4fef76116feffec68e93a567347bae6f"}, + {file = "pydantic-2.6.1.tar.gz", hash = "sha256:4fd5c182a2488dc63e6d32737ff19937888001e2a6d86e94b3f233104a5d1fa9"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.16.1" +pydantic-core = "2.16.2" typing-extensions = ">=4.6.1" [package.extras] @@ -2262,90 +2263,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.16.1" +version = "2.16.2" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.16.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:300616102fb71241ff477a2cbbc847321dbec49428434a2f17f37528721c4948"}, - {file = "pydantic_core-2.16.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5511f962dd1b9b553e9534c3b9c6a4b0c9ded3d8c2be96e61d56f933feef9e1f"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98f0edee7ee9cc7f9221af2e1b95bd02810e1c7a6d115cfd82698803d385b28f"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9795f56aa6b2296f05ac79d8a424e94056730c0b860a62b0fdcfe6340b658cc8"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c45f62e4107ebd05166717ac58f6feb44471ed450d07fecd90e5f69d9bf03c48"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:462d599299c5971f03c676e2b63aa80fec5ebc572d89ce766cd11ca8bcb56f3f"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21ebaa4bf6386a3b22eec518da7d679c8363fb7fb70cf6972161e5542f470798"}, - {file = "pydantic_core-2.16.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:99f9a50b56713a598d33bc23a9912224fc5d7f9f292444e6664236ae471ddf17"}, - {file = "pydantic_core-2.16.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:8ec364e280db4235389b5e1e6ee924723c693cbc98e9d28dc1767041ff9bc388"}, - {file = "pydantic_core-2.16.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:653a5dfd00f601a0ed6654a8b877b18d65ac32c9d9997456e0ab240807be6cf7"}, - {file = "pydantic_core-2.16.1-cp310-none-win32.whl", hash = "sha256:1661c668c1bb67b7cec96914329d9ab66755911d093bb9063c4c8914188af6d4"}, - {file = "pydantic_core-2.16.1-cp310-none-win_amd64.whl", hash = "sha256:561be4e3e952c2f9056fba5267b99be4ec2afadc27261505d4992c50b33c513c"}, - {file = "pydantic_core-2.16.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:102569d371fadc40d8f8598a59379c37ec60164315884467052830b28cc4e9da"}, - {file = "pydantic_core-2.16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:735dceec50fa907a3c314b84ed609dec54b76a814aa14eb90da31d1d36873a5e"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e83ebbf020be727d6e0991c1b192a5c2e7113eb66e3def0cd0c62f9f266247e4"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:30a8259569fbeec49cfac7fda3ec8123486ef1b729225222f0d41d5f840b476f"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:920c4897e55e2881db6a6da151198e5001552c3777cd42b8a4c2f72eedc2ee91"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5247a3d74355f8b1d780d0f3b32a23dd9f6d3ff43ef2037c6dcd249f35ecf4c"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2d5bea8012df5bb6dda1e67d0563ac50b7f64a5d5858348b5c8cb5043811c19d"}, - {file = "pydantic_core-2.16.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ed3025a8a7e5a59817b7494686d449ebfbe301f3e757b852c8d0d1961d6be864"}, - {file = "pydantic_core-2.16.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:06f0d5a1d9e1b7932477c172cc720b3b23c18762ed7a8efa8398298a59d177c7"}, - {file = "pydantic_core-2.16.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:150ba5c86f502c040b822777e2e519b5625b47813bd05f9273a8ed169c97d9ae"}, - {file = "pydantic_core-2.16.1-cp311-none-win32.whl", hash = "sha256:d6cbdf12ef967a6aa401cf5cdf47850559e59eedad10e781471c960583f25aa1"}, - {file = "pydantic_core-2.16.1-cp311-none-win_amd64.whl", hash = "sha256:afa01d25769af33a8dac0d905d5c7bb2d73c7c3d5161b2dd6f8b5b5eea6a3c4c"}, - {file = "pydantic_core-2.16.1-cp311-none-win_arm64.whl", hash = "sha256:1a2fe7b00a49b51047334d84aafd7e39f80b7675cad0083678c58983662da89b"}, - {file = "pydantic_core-2.16.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f478ec204772a5c8218e30eb813ca43e34005dff2eafa03931b3d8caef87d51"}, - {file = "pydantic_core-2.16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f1936ef138bed2165dd8573aa65e3095ef7c2b6247faccd0e15186aabdda7f66"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99d3a433ef5dc3021c9534a58a3686c88363c591974c16c54a01af7efd741f13"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd88f40f2294440d3f3c6308e50d96a0d3d0973d6f1a5732875d10f569acef49"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fac641bbfa43d5a1bed99d28aa1fded1984d31c670a95aac1bf1d36ac6ce137"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72bf9308a82b75039b8c8edd2be2924c352eda5da14a920551a8b65d5ee89253"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fb4363e6c9fc87365c2bc777a1f585a22f2f56642501885ffc7942138499bf54"}, - {file = "pydantic_core-2.16.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:20f724a023042588d0f4396bbbcf4cffd0ddd0ad3ed4f0d8e6d4ac4264bae81e"}, - {file = "pydantic_core-2.16.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:fb4370b15111905bf8b5ba2129b926af9470f014cb0493a67d23e9d7a48348e8"}, - {file = "pydantic_core-2.16.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:23632132f1fd608034f1a56cc3e484be00854db845b3a4a508834be5a6435a6f"}, - {file = "pydantic_core-2.16.1-cp312-none-win32.whl", hash = "sha256:b9f3e0bffad6e238f7acc20c393c1ed8fab4371e3b3bc311020dfa6020d99212"}, - {file = "pydantic_core-2.16.1-cp312-none-win_amd64.whl", hash = "sha256:a0b4cfe408cd84c53bab7d83e4209458de676a6ec5e9c623ae914ce1cb79b96f"}, - {file = "pydantic_core-2.16.1-cp312-none-win_arm64.whl", hash = "sha256:d195add190abccefc70ad0f9a0141ad7da53e16183048380e688b466702195dd"}, - {file = "pydantic_core-2.16.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:502c062a18d84452858f8aea1e520e12a4d5228fc3621ea5061409d666ea1706"}, - {file = "pydantic_core-2.16.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d8c032ccee90b37b44e05948b449a2d6baed7e614df3d3f47fe432c952c21b60"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:920f4633bee43d7a2818e1a1a788906df5a17b7ab6fe411220ed92b42940f818"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9f5d37ff01edcbace53a402e80793640c25798fb7208f105d87a25e6fcc9ea06"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:399166f24c33a0c5759ecc4801f040dbc87d412c1a6d6292b2349b4c505effc9"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ac89ccc39cd1d556cc72d6752f252dc869dde41c7c936e86beac5eb555041b66"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:73802194f10c394c2bedce7a135ba1d8ba6cff23adf4217612bfc5cf060de34c"}, - {file = "pydantic_core-2.16.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8fa00fa24ffd8c31fac081bf7be7eb495be6d248db127f8776575a746fa55c95"}, - {file = "pydantic_core-2.16.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:601d3e42452cd4f2891c13fa8c70366d71851c1593ed42f57bf37f40f7dca3c8"}, - {file = "pydantic_core-2.16.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:07982b82d121ed3fc1c51faf6e8f57ff09b1325d2efccaa257dd8c0dd937acca"}, - {file = "pydantic_core-2.16.1-cp38-none-win32.whl", hash = "sha256:d0bf6f93a55d3fa7a079d811b29100b019784e2ee6bc06b0bb839538272a5610"}, - {file = "pydantic_core-2.16.1-cp38-none-win_amd64.whl", hash = "sha256:fbec2af0ebafa57eb82c18c304b37c86a8abddf7022955d1742b3d5471a6339e"}, - {file = "pydantic_core-2.16.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a497be217818c318d93f07e14502ef93d44e6a20c72b04c530611e45e54c2196"}, - {file = "pydantic_core-2.16.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:694a5e9f1f2c124a17ff2d0be613fd53ba0c26de588eb4bdab8bca855e550d95"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d4dfc66abea3ec6d9f83e837a8f8a7d9d3a76d25c9911735c76d6745950e62c"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8655f55fe68c4685673265a650ef71beb2d31871c049c8b80262026f23605ee3"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:21e3298486c4ea4e4d5cc6fb69e06fb02a4e22089304308817035ac006a7f506"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:71b4a48a7427f14679f0015b13c712863d28bb1ab700bd11776a5368135c7d60"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dca874e35bb60ce4f9f6665bfbfad050dd7573596608aeb9e098621ac331dc"}, - {file = "pydantic_core-2.16.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fa496cd45cda0165d597e9d6f01e36c33c9508f75cf03c0a650018c5048f578e"}, - {file = "pydantic_core-2.16.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5317c04349472e683803da262c781c42c5628a9be73f4750ac7d13040efb5d2d"}, - {file = "pydantic_core-2.16.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:42c29d54ed4501a30cd71015bf982fa95e4a60117b44e1a200290ce687d3e640"}, - {file = "pydantic_core-2.16.1-cp39-none-win32.whl", hash = "sha256:ba07646f35e4e49376c9831130039d1b478fbfa1215ae62ad62d2ee63cf9c18f"}, - {file = "pydantic_core-2.16.1-cp39-none-win_amd64.whl", hash = "sha256:2133b0e412a47868a358713287ff9f9a328879da547dc88be67481cdac529118"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d25ef0c33f22649b7a088035fd65ac1ce6464fa2876578df1adad9472f918a76"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:99c095457eea8550c9fa9a7a992e842aeae1429dab6b6b378710f62bfb70b394"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b49c604ace7a7aa8af31196abbf8f2193be605db6739ed905ecaf62af31ccae0"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c56da23034fe66221f2208c813d8aa509eea34d97328ce2add56e219c3a9f41c"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cebf8d56fee3b08ad40d332a807ecccd4153d3f1ba8231e111d9759f02edfd05"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:1ae8048cba95f382dba56766525abca438328455e35c283bb202964f41a780b0"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:780daad9e35b18d10d7219d24bfb30148ca2afc309928e1d4d53de86822593dc"}, - {file = "pydantic_core-2.16.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c94b5537bf6ce66e4d7830c6993152940a188600f6ae044435287753044a8fe2"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:adf28099d061a25fbcc6531febb7a091e027605385de9fe14dd6a97319d614cf"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:644904600c15816a1f9a1bafa6aab0d21db2788abcdf4e2a77951280473f33e1"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87bce04f09f0552b66fca0c4e10da78d17cb0e71c205864bab4e9595122cb9d9"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:877045a7969ace04d59516d5d6a7dee13106822f99a5d8df5e6822941f7bedc8"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9c46e556ee266ed3fb7b7a882b53df3c76b45e872fdab8d9cf49ae5e91147fd7"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:4eebbd049008eb800f519578e944b8dc8e0f7d59a5abb5924cc2d4ed3a1834ff"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c0be58529d43d38ae849a91932391eb93275a06b93b79a8ab828b012e916a206"}, - {file = "pydantic_core-2.16.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:b1fc07896fc1851558f532dffc8987e526b682ec73140886c831d773cef44b76"}, - {file = "pydantic_core-2.16.1.tar.gz", hash = "sha256:daff04257b49ab7f4b3f73f98283d3dbb1a65bf3500d55c7beac3c66c310fe34"}, + {file = "pydantic_core-2.16.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3fab4e75b8c525a4776e7630b9ee48aea50107fea6ca9f593c98da3f4d11bf7c"}, + {file = "pydantic_core-2.16.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8bde5b48c65b8e807409e6f20baee5d2cd880e0fad00b1a811ebc43e39a00ab2"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2924b89b16420712e9bb8192396026a8fbd6d8726224f918353ac19c4c043d2a"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:16aa02e7a0f539098e215fc193c8926c897175d64c7926d00a36188917717a05"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:936a787f83db1f2115ee829dd615c4f684ee48ac4de5779ab4300994d8af325b"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:459d6be6134ce3b38e0ef76f8a672924460c455d45f1ad8fdade36796df1ddc8"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9ee4febb249c591d07b2d4dd36ebcad0ccd128962aaa1801508320896575ef"}, + {file = "pydantic_core-2.16.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40a0bd0bed96dae5712dab2aba7d334a6c67cbcac2ddfca7dbcc4a8176445990"}, + {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:870dbfa94de9b8866b37b867a2cb37a60c401d9deb4a9ea392abf11a1f98037b"}, + {file = "pydantic_core-2.16.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:308974fdf98046db28440eb3377abba274808bf66262e042c412eb2adf852731"}, + {file = "pydantic_core-2.16.2-cp310-none-win32.whl", hash = "sha256:a477932664d9611d7a0816cc3c0eb1f8856f8a42435488280dfbf4395e141485"}, + {file = "pydantic_core-2.16.2-cp310-none-win_amd64.whl", hash = "sha256:8f9142a6ed83d90c94a3efd7af8873bf7cefed2d3d44387bf848888482e2d25f"}, + {file = "pydantic_core-2.16.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:406fac1d09edc613020ce9cf3f2ccf1a1b2f57ab00552b4c18e3d5276c67eb11"}, + {file = "pydantic_core-2.16.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ce232a6170dd6532096cadbf6185271e4e8c70fc9217ebe105923ac105da9978"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a90fec23b4b05a09ad988e7a4f4e081711a90eb2a55b9c984d8b74597599180f"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8aafeedb6597a163a9c9727d8a8bd363a93277701b7bfd2749fbefee2396469e"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9957433c3a1b67bdd4c63717eaf174ebb749510d5ea612cd4e83f2d9142f3fc8"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b0d7a9165167269758145756db43a133608a531b1e5bb6a626b9ee24bc38a8f7"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dffaf740fe2e147fedcb6b561353a16243e654f7fe8e701b1b9db148242e1272"}, + {file = "pydantic_core-2.16.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f8ed79883b4328b7f0bd142733d99c8e6b22703e908ec63d930b06be3a0e7113"}, + {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:cf903310a34e14651c9de056fcc12ce090560864d5a2bb0174b971685684e1d8"}, + {file = "pydantic_core-2.16.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:46b0d5520dbcafea9a8645a8164658777686c5c524d381d983317d29687cce97"}, + {file = "pydantic_core-2.16.2-cp311-none-win32.whl", hash = "sha256:70651ff6e663428cea902dac297066d5c6e5423fda345a4ca62430575364d62b"}, + {file = "pydantic_core-2.16.2-cp311-none-win_amd64.whl", hash = "sha256:98dc6f4f2095fc7ad277782a7c2c88296badcad92316b5a6e530930b1d475ebc"}, + {file = "pydantic_core-2.16.2-cp311-none-win_arm64.whl", hash = "sha256:ef6113cd31411eaf9b39fc5a8848e71c72656fd418882488598758b2c8c6dfa0"}, + {file = "pydantic_core-2.16.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:88646cae28eb1dd5cd1e09605680c2b043b64d7481cdad7f5003ebef401a3039"}, + {file = "pydantic_core-2.16.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7b883af50eaa6bb3299780651e5be921e88050ccf00e3e583b1e92020333304b"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bf26c2e2ea59d32807081ad51968133af3025c4ba5753e6a794683d2c91bf6e"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:99af961d72ac731aae2a1b55ccbdae0733d816f8bfb97b41909e143de735f522"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02906e7306cb8c5901a1feb61f9ab5e5c690dbbeaa04d84c1b9ae2a01ebe9379"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5362d099c244a2d2f9659fb3c9db7c735f0004765bbe06b99be69fbd87c3f15"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ac426704840877a285d03a445e162eb258924f014e2f074e209d9b4ff7bf380"}, + {file = "pydantic_core-2.16.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b94cbda27267423411c928208e89adddf2ea5dd5f74b9528513f0358bba019cb"}, + {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6db58c22ac6c81aeac33912fb1af0e930bc9774166cdd56eade913d5f2fff35e"}, + {file = "pydantic_core-2.16.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:396fdf88b1b503c9c59c84a08b6833ec0c3b5ad1a83230252a9e17b7dfb4cffc"}, + {file = "pydantic_core-2.16.2-cp312-none-win32.whl", hash = "sha256:7c31669e0c8cc68400ef0c730c3a1e11317ba76b892deeefaf52dcb41d56ed5d"}, + {file = "pydantic_core-2.16.2-cp312-none-win_amd64.whl", hash = "sha256:a3b7352b48fbc8b446b75f3069124e87f599d25afb8baa96a550256c031bb890"}, + {file = "pydantic_core-2.16.2-cp312-none-win_arm64.whl", hash = "sha256:a9e523474998fb33f7c1a4d55f5504c908d57add624599e095c20fa575b8d943"}, + {file = "pydantic_core-2.16.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:ae34418b6b389d601b31153b84dce480351a352e0bb763684a1b993d6be30f17"}, + {file = "pydantic_core-2.16.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:732bd062c9e5d9582a30e8751461c1917dd1ccbdd6cafb032f02c86b20d2e7ec"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4b52776a2e3230f4854907a1e0946eec04d41b1fc64069ee774876bbe0eab55"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ef551c053692b1e39e3f7950ce2296536728871110e7d75c4e7753fb30ca87f4"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ebb892ed8599b23fa8f1799e13a12c87a97a6c9d0f497525ce9858564c4575a4"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa6c8c582036275997a733427b88031a32ffa5dfc3124dc25a730658c47a572f"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4ba0884a91f1aecce75202473ab138724aa4fb26d7707f2e1fa6c3e68c84fbf"}, + {file = "pydantic_core-2.16.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7924e54f7ce5d253d6160090ddc6df25ed2feea25bfb3339b424a9dd591688bc"}, + {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:69a7b96b59322a81c2203be537957313b07dd333105b73db0b69212c7d867b4b"}, + {file = "pydantic_core-2.16.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7e6231aa5bdacda78e96ad7b07d0c312f34ba35d717115f4b4bff6cb87224f0f"}, + {file = "pydantic_core-2.16.2-cp38-none-win32.whl", hash = "sha256:41dac3b9fce187a25c6253ec79a3f9e2a7e761eb08690e90415069ea4a68ff7a"}, + {file = "pydantic_core-2.16.2-cp38-none-win_amd64.whl", hash = "sha256:f685dbc1fdadb1dcd5b5e51e0a378d4685a891b2ddaf8e2bba89bd3a7144e44a"}, + {file = "pydantic_core-2.16.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:55749f745ebf154c0d63d46c8c58594d8894b161928aa41adbb0709c1fe78b77"}, + {file = "pydantic_core-2.16.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b30b0dd58a4509c3bd7eefddf6338565c4905406aee0c6e4a5293841411a1286"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18de31781cdc7e7b28678df7c2d7882f9692ad060bc6ee3c94eb15a5d733f8f7"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5864b0242f74b9dd0b78fd39db1768bc3f00d1ffc14e596fd3e3f2ce43436a33"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8f9186ca45aee030dc8234118b9c0784ad91a0bb27fc4e7d9d6608a5e3d386c"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cc6f6c9be0ab6da37bc77c2dda5f14b1d532d5dbef00311ee6e13357a418e646"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa057095f621dad24a1e906747179a69780ef45cc8f69e97463692adbcdae878"}, + {file = "pydantic_core-2.16.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6ad84731a26bcfb299f9eab56c7932d46f9cad51c52768cace09e92a19e4cf55"}, + {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:3b052c753c4babf2d1edc034c97851f867c87d6f3ea63a12e2700f159f5c41c3"}, + {file = "pydantic_core-2.16.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e0f686549e32ccdb02ae6f25eee40cc33900910085de6aa3790effd391ae10c2"}, + {file = "pydantic_core-2.16.2-cp39-none-win32.whl", hash = "sha256:7afb844041e707ac9ad9acad2188a90bffce2c770e6dc2318be0c9916aef1469"}, + {file = "pydantic_core-2.16.2-cp39-none-win_amd64.whl", hash = "sha256:9da90d393a8227d717c19f5397688a38635afec89f2e2d7af0df037f3249c39a"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5f60f920691a620b03082692c378661947d09415743e437a7478c309eb0e4f82"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:47924039e785a04d4a4fa49455e51b4eb3422d6eaacfde9fc9abf8fdef164e8a"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6294e76b0380bb7a61eb8a39273c40b20beb35e8c87ee101062834ced19c545"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe56851c3f1d6f5384b3051c536cc81b3a93a73faf931f404fef95217cf1e10d"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9d776d30cde7e541b8180103c3f294ef7c1862fd45d81738d156d00551005784"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:72f7919af5de5ecfaf1eba47bf9a5d8aa089a3340277276e5636d16ee97614d7"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:4bfcbde6e06c56b30668a0c872d75a7ef3025dc3c1823a13cf29a0e9b33f67e8"}, + {file = "pydantic_core-2.16.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ff7c97eb7a29aba230389a2661edf2e9e06ce616c7e35aa764879b6894a44b25"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9b5f13857da99325dcabe1cc4e9e6a3d7b2e2c726248ba5dd4be3e8e4a0b6d0e"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a7e41e3ada4cca5f22b478c08e973c930e5e6c7ba3588fb8e35f2398cdcc1545"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:60eb8ceaa40a41540b9acae6ae7c1f0a67d233c40dc4359c256ad2ad85bdf5e5"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7beec26729d496a12fd23cf8da9944ee338c8b8a17035a560b585c36fe81af20"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22c5f022799f3cd6741e24f0443ead92ef42be93ffda0d29b2597208c94c3753"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:eca58e319f4fd6df004762419612122b2c7e7d95ffafc37e890252f869f3fb2a"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed957db4c33bc99895f3a1672eca7e80e8cda8bd1e29a80536b4ec2153fa9804"}, + {file = "pydantic_core-2.16.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:459c0d338cc55d099798618f714b21b7ece17eb1a87879f2da20a3ff4c7628e2"}, + {file = "pydantic_core-2.16.2.tar.gz", hash = "sha256:0ba503850d8b8dcc18391f10de896ae51d37fe5fe43dbfb6a35c5c5cad271a06"}, ] [package.dependencies] @@ -2441,13 +2442,13 @@ files = [ [[package]] name = "pytz" -version = "2023.4" +version = "2024.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2023.4-py2.py3-none-any.whl", hash = "sha256:f90ef520d95e7c46951105338d918664ebfd6f1d995bd7d153127ce90efafa6a"}, - {file = "pytz-2023.4.tar.gz", hash = "sha256:31d4583c4ed539cd037956140d695e42c033a19e984bfce9964a3f7d59bc2b40"}, + {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, + {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] [[package]] @@ -2513,7 +2514,6 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -3096,20 +3096,20 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] [[package]] name = "starlette" -version = "0.35.1" +version = "0.36.3" description = "The little ASGI library that shines." optional = false python-versions = ">=3.8" files = [ - {file = "starlette-0.35.1-py3-none-any.whl", hash = "sha256:50bbbda9baa098e361f398fda0928062abbaf1f54f4fadcbe17c092a01eb9a25"}, - {file = "starlette-0.35.1.tar.gz", hash = "sha256:3e2639dac3520e4f58734ed22553f950d3f3cb1001cd2eaac4d57e8cdc5f66bc"}, + {file = "starlette-0.36.3-py3-none-any.whl", hash = "sha256:13d429aa93a61dc40bf503e8c801db1f1bca3dc706b10ef2434a36123568f044"}, + {file = "starlette-0.36.3.tar.gz", hash = "sha256:90a671733cfb35771d8cc605e0b679d23b992f8dcfad48cc60b38cb29aeb7080"}, ] [package.dependencies] anyio = ">=3.4.0,<5" [package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyaml"] +full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] [[package]] name = "termcolor" @@ -3645,4 +3645,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "05300857cd0adebd7da71b07bb0fe9da78d3c0bb70fa0e17bef2bfa38dc54fbf" +content-hash = "191d68f0820537e9c3ef1f1e8c0294142ef483846ffdd8d8c345c6b67e5db469" diff --git a/pyproject.toml b/pyproject.toml index 104dbf8..891d017 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,19 +7,19 @@ readme = "README.md" [tool.poetry.dependencies] python = "^3.12" -fastapi = "^0.109.0" -fastf1 = "^3.2.0" +fastapi = "^0.109.2" +fastf1 = "^3.2.1" uvicorn = { extras = ["standard"], version = "^0.27.0.post1" } [tool.poetry.group.dev.dependencies] black = "^24.1.1" +commitizen = "^3.14.1" isort = "^5.13.2" -jupyterlab = "^4.0.12" +jupyterlab = "^4.1.0" jupyterlab-code-formatter = "^2.2.1" +pre-commit = "^3.6.0" pytest = "^8.0.0" httpx = "^0.26.0" -commitizen = "^3.14.0" -pre-commit = "^3.6.0" [build-system] requires = ["poetry-core"] From 58a90b9579f09db1e0792fef8e15676470d7f85f Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Wed, 7 Feb 2024 16:54:53 +0530 Subject: [PATCH 09/17] chore: removed jupyter notebook --- README.md | 17 +- notebooks/pratik-playground.ipynb | 4399 ----------------------------- poetry.lock | 1643 +---------- pyproject.toml | 2 - 4 files changed, 75 insertions(+), 5986 deletions(-) delete mode 100644 notebooks/pratik-playground.ipynb diff --git a/README.md b/README.md index 3d165a0..7b4ab59 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,6 @@ Table of Contents: - [Running the project](#running-the-project) - [Docker](#docker) - [Interactive API docs](#interactive-api-docs) - - [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) @@ -66,7 +63,7 @@ pre-commit install --hook-type commit-msg --hook-type pre-push --hook-type pre-c - Open up a terminal in your IDE. - Run `python run.py` to start the server. -- Open your browser at `http://127.0.0.1/8081`. +- Open your browser at `http://127.0.0.1:8081`. ### Docker @@ -87,18 +84,6 @@ pre-commit install --hook-type commit-msg --hook-type pre-push --hook-type pre-c - Once the server is running, open your browser at `http://127.0.0.1:8081/docs`. - Alternate docs can be found at `http://127.0.0.1:8081/redoc`, provided by [redoc](https://github.com/Redocly/redoc). -### Interactive Jupyter notebook - -#### Using Jupyter Lab - -- The project has Jupyter Lab as a dev dependency for you to rummage through FastF1. -- Run `jupyter lab` in a new terminal and open your default browser should open automatically (if it doesn't, open browser at `http://localhost:8888/lab`). - -#### Running the notebook in VS Code - -- 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 diff --git a/notebooks/pratik-playground.ipynb b/notebooks/pratik-playground.ipynb deleted file mode 100644 index 157094a..0000000 --- a/notebooks/pratik-playground.ipynb +++ /dev/null @@ -1,4399 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 2, - "id": "f4e32ad5-e506-434c-8ec8-d8a1c10547af", - "metadata": {}, - "outputs": [], - "source": [ - "import fastf1\n", - "import pandas as pd\n", - "from fastf1.ergast import Ergast\n", - "\n", - "# Pandas options\n", - "pd.set_option(\"display.max_columns\", None)\n", - "pd.set_option(\"display.max_colwidth\", None)\n", - "\n", - "# Ergast options\n", - "ergast = Ergast(result_type=\"raw\", auto_cast=True)" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "15a9f59c-11c3-4461-b887-fe8eeacb2a35", - "metadata": { - "scrolled": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "req WARNING \tDEFAULT CACHE ENABLED! (115.37 MB) /Users/pratikborole/Library/Caches/fastf1\n" - ] - }, - { - "data": { - "text/html": [ - "

\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
RoundNumberCountryLocationOfficialEventNameEventDateEventNameEventFormatSession1Session1DateSession1DateUtcSession2Session2DateSession2DateUtcSession3Session3DateSession3DateUtcSession4Session4DateSession4DateUtcSession5Session5DateSession5DateUtcF1ApiSupport
00BahrainSakhirFORMULA 1 ARAMCO PRE-SEASON TESTING 20232023-02-25Pre-Season TestingtestingPractice 12023-02-23 10:00:00+03:002023-02-23 07:00:00Practice 22023-02-24 10:00:00+03:002023-02-24 07:00:00Practice 32023-02-25 10:00:00+03:002023-02-25 07:00:00NoneNaTNaTNoneNaTNaTTrue
11BahrainSakhirFORMULA 1 GULF AIR BAHRAIN GRAND PRIX 20232023-03-05Bahrain Grand PrixconventionalPractice 12023-03-03 14:30:00+03:002023-03-03 11:30:00Practice 22023-03-03 18:00:00+03:002023-03-03 15:00:00Practice 32023-03-04 14:30:00+03:002023-03-04 11:30:00Qualifying2023-03-04 18:00:00+03:002023-03-04 15:00:00Race2023-03-05 18:00:00+03:002023-03-05 15:00:00True
22Saudi ArabiaJeddahFORMULA 1 STC SAUDI ARABIAN GRAND PRIX 20232023-03-19Saudi Arabian Grand PrixconventionalPractice 12023-03-17 16:30:00+03:002023-03-17 13:30:00Practice 22023-03-17 20:00:00+03:002023-03-17 17:00:00Practice 32023-03-18 16:30:00+03:002023-03-18 13:30:00Qualifying2023-03-18 20:00:00+03:002023-03-18 17:00:00Race2023-03-19 20:00:00+03:002023-03-19 17:00:00True
33AustraliaMelbourneFORMULA 1 ROLEX AUSTRALIAN GRAND PRIX 20232023-04-02Australian Grand PrixconventionalPractice 12023-03-31 12:30:00+10:002023-03-31 02:30:00Practice 22023-03-31 16:00:00+10:002023-03-31 06:00:00Practice 32023-04-01 12:30:00+10:002023-04-01 02:30:00Qualifying2023-04-01 16:00:00+10:002023-04-01 06:00:00Race2023-04-02 15:00:00+10:002023-04-02 05:00:00True
44AzerbaijanBakuFORMULA 1 AZERBAIJAN GRAND PRIX 20232023-04-30Azerbaijan Grand Prixsprint_shootoutPractice 12023-04-28 13:30:00+04:002023-04-28 09:30:00Qualifying2023-04-28 17:00:00+04:002023-04-28 13:00:00Sprint Shootout2023-04-29 12:30:00+04:002023-04-29 08:30:00Sprint2023-04-29 17:30:00+04:002023-04-29 13:30:00Race2023-04-30 15:00:00+04:002023-04-30 11:00:00True
55United StatesMiamiFORMULA 1 CRYPTO.COM MIAMI GRAND PRIX 20232023-05-07Miami Grand PrixconventionalPractice 12023-05-05 14:00:00-04:002023-05-05 18:00:00Practice 22023-05-05 17:30:00-04:002023-05-05 21:30:00Practice 32023-05-06 12:30:00-04:002023-05-06 16:30:00Qualifying2023-05-06 16:00:00-04:002023-05-06 20:00:00Race2023-05-07 15:30:00-04:002023-05-07 19:30:00True
66MonacoMonacoFORMULA 1 GRAND PRIX DE MONACO 20232023-05-28Monaco Grand PrixconventionalPractice 12023-05-26 13:30:00+02:002023-05-26 11:30:00Practice 22023-05-26 17:00:00+02:002023-05-26 15:00:00Practice 32023-05-27 12:30:00+02:002023-05-27 10:30:00Qualifying2023-05-27 16:00:00+02:002023-05-27 14:00:00Race2023-05-28 15:00:00+02:002023-05-28 13:00:00True
77SpainBarcelonaFORMULA 1 AWS GRAN PREMIO DE ESPAÑA 20232023-06-04Spanish Grand PrixconventionalPractice 12023-06-02 13:30:00+02:002023-06-02 11:30:00Practice 22023-06-02 17:00:00+02:002023-06-02 15:00:00Practice 32023-06-03 12:30:00+02:002023-06-03 10:30:00Qualifying2023-06-03 16:00:00+02:002023-06-03 14:00:00Race2023-06-04 15:00:00+02:002023-06-04 13:00:00True
88CanadaMontréalFORMULA 1 PIRELLI GRAND PRIX DU CANADA 20232023-06-18Canadian Grand PrixconventionalPractice 12023-06-16 13:30:00-04:002023-06-16 17:30:00Practice 22023-06-16 16:30:00-04:002023-06-16 20:30:00Practice 32023-06-17 12:30:00-04:002023-06-17 16:30:00Qualifying2023-06-17 16:00:00-04:002023-06-17 20:00:00Race2023-06-18 14:00:00-04:002023-06-18 18:00:00True
99AustriaSpielbergFORMULA 1 ROLEX GROSSER PREIS VON ÖSTERREICH 20232023-07-02Austrian Grand Prixsprint_shootoutPractice 12023-06-30 13:30:00+02:002023-06-30 11:30:00Qualifying2023-06-30 17:00:00+02:002023-06-30 15:00:00Sprint Shootout2023-07-01 12:00:00+02:002023-07-01 10:00:00Sprint2023-07-01 16:30:00+02:002023-07-01 14:30:00Race2023-07-02 15:00:00+02:002023-07-02 13:00:00True
1010Great BritainSilverstoneFORMULA 1 ARAMCO BRITISH GRAND PRIX 20232023-07-09British Grand PrixconventionalPractice 12023-07-07 12:30:00+01:002023-07-07 11:30:00Practice 22023-07-07 16:00:00+01:002023-07-07 15:00:00Practice 32023-07-08 11:30:00+01:002023-07-08 10:30:00Qualifying2023-07-08 15:00:00+01:002023-07-08 14:00:00Race2023-07-09 15:00:00+01:002023-07-09 14:00:00True
1111HungaryBudapestFORMULA 1 QATAR AIRWAYS HUNGARIAN GRAND PRIX 20232023-07-23Hungarian Grand PrixconventionalPractice 12023-07-21 13:30:00+02:002023-07-21 11:30:00Practice 22023-07-21 17:00:00+02:002023-07-21 15:00:00Practice 32023-07-22 12:30:00+02:002023-07-22 10:30:00Qualifying2023-07-22 16:00:00+02:002023-07-22 14:00:00Race2023-07-23 15:00:00+02:002023-07-23 13:00:00True
1212BelgiumSpa-FrancorchampsFORMULA 1 MSC CRUISES BELGIAN GRAND PRIX 20232023-07-30Belgian Grand Prixsprint_shootoutPractice 12023-07-28 13:30:00+02:002023-07-28 11:30:00Qualifying2023-07-28 17:00:00+02:002023-07-28 15:00:00Sprint Shootout2023-07-29 12:00:00+02:002023-07-29 10:00:00Sprint2023-07-29 17:05:00+02:002023-07-29 15:05:00Race2023-07-30 15:00:00+02:002023-07-30 13:00:00True
1313NetherlandsZandvoortFORMULA 1 HEINEKEN DUTCH GRAND PRIX 20232023-08-27Dutch Grand PrixconventionalPractice 12023-08-25 12:30:00+02:002023-08-25 10:30:00Practice 22023-08-25 16:00:00+02:002023-08-25 14:00:00Practice 32023-08-26 11:30:00+02:002023-08-26 09:30:00Qualifying2023-08-26 15:00:00+02:002023-08-26 13:00:00Race2023-08-27 15:00:00+02:002023-08-27 13:00:00True
1414ItalyMonzaFORMULA 1 PIRELLI GRAN PREMIO D’ITALIA 20232023-09-03Italian Grand PrixconventionalPractice 12023-09-01 13:30:00+02:002023-09-01 11:30:00Practice 22023-09-01 17:00:00+02:002023-09-01 15:00:00Practice 32023-09-02 12:30:00+02:002023-09-02 10:30:00Qualifying2023-09-02 16:00:00+02:002023-09-02 14:00:00Race2023-09-03 15:00:00+02:002023-09-03 13:00:00True
1515SingaporeMarina BayFORMULA 1 SINGAPORE AIRLINES SINGAPORE GRAND PRIX 20232023-09-17Singapore Grand PrixconventionalPractice 12023-09-15 17:30:00+08:002023-09-15 09:30:00Practice 22023-09-15 21:00:00+08:002023-09-15 13:00:00Practice 32023-09-16 17:30:00+08:002023-09-16 09:30:00Qualifying2023-09-16 21:00:00+08:002023-09-16 13:00:00Race2023-09-17 20:00:00+08:002023-09-17 12:00:00True
1616JapanSuzukaFORMULA 1 LENOVO JAPANESE GRAND PRIX 20232023-09-24Japanese Grand PrixconventionalPractice 12023-09-22 11:30:00+09:002023-09-22 02:30:00Practice 22023-09-22 15:00:00+09:002023-09-22 06:00:00Practice 32023-09-23 11:30:00+09:002023-09-23 02:30:00Qualifying2023-09-23 15:00:00+09:002023-09-23 06:00:00Race2023-09-24 14:00:00+09:002023-09-24 05:00:00True
1717QatarLusailFORMULA 1 QATAR AIRWAYS QATAR GRAND PRIX 20232023-10-08Qatar Grand Prixsprint_shootoutPractice 12023-10-06 16:30:00+03:002023-10-06 13:30:00Qualifying2023-10-06 20:00:00+03:002023-10-06 17:00:00Sprint Shootout2023-10-07 16:20:00+03:002023-10-07 13:20:00Sprint2023-10-07 20:30:00+03:002023-10-07 17:30:00Race2023-10-08 20:00:00+03:002023-10-08 17:00:00True
1818United StatesAustinFORMULA 1 LENOVO UNITED STATES GRAND PRIX 20232023-10-22United States Grand Prixsprint_shootoutPractice 12023-10-20 12:30:00-05:002023-10-20 17:30:00Qualifying2023-10-20 16:00:00-05:002023-10-20 21:00:00Sprint Shootout2023-10-21 12:30:00-05:002023-10-21 17:30:00Sprint2023-10-21 17:00:00-05:002023-10-21 22:00:00Race2023-10-22 14:00:00-05:002023-10-22 19:00:00True
1919MexicoMexico CityFORMULA 1 GRAN PREMIO DE LA CIUDAD DE MÉXICO 20232023-10-29Mexico City Grand PrixconventionalPractice 12023-10-27 12:30:00-06:002023-10-27 18:30:00Practice 22023-10-27 16:00:00-06:002023-10-27 22:00:00Practice 32023-10-28 11:30:00-06:002023-10-28 17:30:00Qualifying2023-10-28 15:00:00-06:002023-10-28 21:00:00Race2023-10-29 14:00:00-06:002023-10-29 20:00:00True
2020BrazilSão PauloFORMULA 1 ROLEX GRANDE PRÊMIO DE SÃO PAULO 20232023-11-05São Paulo Grand Prixsprint_shootoutPractice 12023-11-03 11:30:00-03:002023-11-03 14:30:00Qualifying2023-11-03 15:00:00-03:002023-11-03 18:00:00Sprint Shootout2023-11-04 11:00:00-03:002023-11-04 14:00:00Sprint2023-11-04 15:30:00-03:002023-11-04 18:30:00Race2023-11-05 14:00:00-03:002023-11-05 17:00:00True
2121United StatesLas VegasFORMULA 1 HEINEKEN SILVER LAS VEGAS GRAND PRIX 20232023-11-18Las Vegas Grand PrixconventionalPractice 12023-11-16 20:30:00-08:002023-11-17 04:30:00Practice 22023-11-17 02:30:00-08:002023-11-17 10:30:00Practice 32023-11-17 20:30:00-08:002023-11-18 04:30:00Qualifying2023-11-18 00:00:00-08:002023-11-18 08:00:00Race2023-11-18 22:00:00-08:002023-11-19 06:00:00True
2222Abu DhabiYas IslandFORMULA 1 ETIHAD AIRWAYS ABU DHABI GRAND PRIX 20232023-11-26Abu Dhabi Grand PrixconventionalPractice 12023-11-24 13:30:00+04:002023-11-24 09:30:00Practice 22023-11-24 17:00:00+04:002023-11-24 13:00:00Practice 32023-11-25 14:30:00+04:002023-11-25 10:30:00Qualifying2023-11-25 18:00:00+04:002023-11-25 14:00:00Race2023-11-26 17:00:00+04:002023-11-26 13:00:00True
\n", - "
" - ], - "text/plain": [ - " RoundNumber Country Location \\\n", - "0 0 Bahrain Sakhir \n", - "1 1 Bahrain Sakhir \n", - "2 2 Saudi Arabia Jeddah \n", - "3 3 Australia Melbourne \n", - "4 4 Azerbaijan Baku \n", - "5 5 United States Miami \n", - "6 6 Monaco Monaco \n", - "7 7 Spain Barcelona \n", - "8 8 Canada Montréal \n", - "9 9 Austria Spielberg \n", - "10 10 Great Britain Silverstone \n", - "11 11 Hungary Budapest \n", - "12 12 Belgium Spa-Francorchamps \n", - "13 13 Netherlands Zandvoort \n", - "14 14 Italy Monza \n", - "15 15 Singapore Marina Bay \n", - "16 16 Japan Suzuka \n", - "17 17 Qatar Lusail \n", - "18 18 United States Austin \n", - "19 19 Mexico Mexico City \n", - "20 20 Brazil São Paulo \n", - "21 21 United States Las Vegas \n", - "22 22 Abu Dhabi Yas Island \n", - "\n", - " OfficialEventName EventDate \\\n", - "0 FORMULA 1 ARAMCO PRE-SEASON TESTING 2023 2023-02-25 \n", - "1 FORMULA 1 GULF AIR BAHRAIN GRAND PRIX 2023 2023-03-05 \n", - "2 FORMULA 1 STC SAUDI ARABIAN GRAND PRIX 2023 2023-03-19 \n", - "3 FORMULA 1 ROLEX AUSTRALIAN GRAND PRIX 2023 2023-04-02 \n", - "4 FORMULA 1 AZERBAIJAN GRAND PRIX 2023 2023-04-30 \n", - "5 FORMULA 1 CRYPTO.COM MIAMI GRAND PRIX 2023 2023-05-07 \n", - "6 FORMULA 1 GRAND PRIX DE MONACO 2023 2023-05-28 \n", - "7 FORMULA 1 AWS GRAN PREMIO DE ESPAÑA 2023 2023-06-04 \n", - "8 FORMULA 1 PIRELLI GRAND PRIX DU CANADA 2023 2023-06-18 \n", - "9 FORMULA 1 ROLEX GROSSER PREIS VON ÖSTERREICH 2023 2023-07-02 \n", - "10 FORMULA 1 ARAMCO BRITISH GRAND PRIX 2023 2023-07-09 \n", - "11 FORMULA 1 QATAR AIRWAYS HUNGARIAN GRAND PRIX 2023 2023-07-23 \n", - "12 FORMULA 1 MSC CRUISES BELGIAN GRAND PRIX 2023 2023-07-30 \n", - "13 FORMULA 1 HEINEKEN DUTCH GRAND PRIX 2023 2023-08-27 \n", - "14 FORMULA 1 PIRELLI GRAN PREMIO D’ITALIA 2023 2023-09-03 \n", - "15 FORMULA 1 SINGAPORE AIRLINES SINGAPORE GRAND PRIX 2023 2023-09-17 \n", - "16 FORMULA 1 LENOVO JAPANESE GRAND PRIX 2023 2023-09-24 \n", - "17 FORMULA 1 QATAR AIRWAYS QATAR GRAND PRIX 2023 2023-10-08 \n", - "18 FORMULA 1 LENOVO UNITED STATES GRAND PRIX 2023 2023-10-22 \n", - "19 FORMULA 1 GRAN PREMIO DE LA CIUDAD DE MÉXICO 2023 2023-10-29 \n", - "20 FORMULA 1 ROLEX GRANDE PRÊMIO DE SÃO PAULO 2023 2023-11-05 \n", - "21 FORMULA 1 HEINEKEN SILVER LAS VEGAS GRAND PRIX 2023 2023-11-18 \n", - "22 FORMULA 1 ETIHAD AIRWAYS ABU DHABI GRAND PRIX 2023 2023-11-26 \n", - "\n", - " EventName EventFormat Session1 \\\n", - "0 Pre-Season Testing testing Practice 1 \n", - "1 Bahrain Grand Prix conventional Practice 1 \n", - "2 Saudi Arabian Grand Prix conventional Practice 1 \n", - "3 Australian Grand Prix conventional Practice 1 \n", - "4 Azerbaijan Grand Prix sprint_shootout Practice 1 \n", - "5 Miami Grand Prix conventional Practice 1 \n", - "6 Monaco Grand Prix conventional Practice 1 \n", - "7 Spanish Grand Prix conventional Practice 1 \n", - "8 Canadian Grand Prix conventional Practice 1 \n", - "9 Austrian Grand Prix sprint_shootout Practice 1 \n", - "10 British Grand Prix conventional Practice 1 \n", - "11 Hungarian Grand Prix conventional Practice 1 \n", - "12 Belgian Grand Prix sprint_shootout Practice 1 \n", - "13 Dutch Grand Prix conventional Practice 1 \n", - "14 Italian Grand Prix conventional Practice 1 \n", - "15 Singapore Grand Prix conventional Practice 1 \n", - "16 Japanese Grand Prix conventional Practice 1 \n", - "17 Qatar Grand Prix sprint_shootout Practice 1 \n", - "18 United States Grand Prix sprint_shootout Practice 1 \n", - "19 Mexico City Grand Prix conventional Practice 1 \n", - "20 São Paulo Grand Prix sprint_shootout Practice 1 \n", - "21 Las Vegas Grand Prix conventional Practice 1 \n", - "22 Abu Dhabi Grand Prix conventional Practice 1 \n", - "\n", - " Session1Date Session1DateUtc Session2 \\\n", - "0 2023-02-23 10:00:00+03:00 2023-02-23 07:00:00 Practice 2 \n", - "1 2023-03-03 14:30:00+03:00 2023-03-03 11:30:00 Practice 2 \n", - "2 2023-03-17 16:30:00+03:00 2023-03-17 13:30:00 Practice 2 \n", - "3 2023-03-31 12:30:00+10:00 2023-03-31 02:30:00 Practice 2 \n", - "4 2023-04-28 13:30:00+04:00 2023-04-28 09:30:00 Qualifying \n", - "5 2023-05-05 14:00:00-04:00 2023-05-05 18:00:00 Practice 2 \n", - "6 2023-05-26 13:30:00+02:00 2023-05-26 11:30:00 Practice 2 \n", - "7 2023-06-02 13:30:00+02:00 2023-06-02 11:30:00 Practice 2 \n", - "8 2023-06-16 13:30:00-04:00 2023-06-16 17:30:00 Practice 2 \n", - "9 2023-06-30 13:30:00+02:00 2023-06-30 11:30:00 Qualifying \n", - "10 2023-07-07 12:30:00+01:00 2023-07-07 11:30:00 Practice 2 \n", - "11 2023-07-21 13:30:00+02:00 2023-07-21 11:30:00 Practice 2 \n", - "12 2023-07-28 13:30:00+02:00 2023-07-28 11:30:00 Qualifying \n", - "13 2023-08-25 12:30:00+02:00 2023-08-25 10:30:00 Practice 2 \n", - "14 2023-09-01 13:30:00+02:00 2023-09-01 11:30:00 Practice 2 \n", - "15 2023-09-15 17:30:00+08:00 2023-09-15 09:30:00 Practice 2 \n", - "16 2023-09-22 11:30:00+09:00 2023-09-22 02:30:00 Practice 2 \n", - "17 2023-10-06 16:30:00+03:00 2023-10-06 13:30:00 Qualifying \n", - "18 2023-10-20 12:30:00-05:00 2023-10-20 17:30:00 Qualifying \n", - "19 2023-10-27 12:30:00-06:00 2023-10-27 18:30:00 Practice 2 \n", - "20 2023-11-03 11:30:00-03:00 2023-11-03 14:30:00 Qualifying \n", - "21 2023-11-16 20:30:00-08:00 2023-11-17 04:30:00 Practice 2 \n", - "22 2023-11-24 13:30:00+04:00 2023-11-24 09:30:00 Practice 2 \n", - "\n", - " Session2Date Session2DateUtc Session3 \\\n", - "0 2023-02-24 10:00:00+03:00 2023-02-24 07:00:00 Practice 3 \n", - "1 2023-03-03 18:00:00+03:00 2023-03-03 15:00:00 Practice 3 \n", - "2 2023-03-17 20:00:00+03:00 2023-03-17 17:00:00 Practice 3 \n", - "3 2023-03-31 16:00:00+10:00 2023-03-31 06:00:00 Practice 3 \n", - "4 2023-04-28 17:00:00+04:00 2023-04-28 13:00:00 Sprint Shootout \n", - "5 2023-05-05 17:30:00-04:00 2023-05-05 21:30:00 Practice 3 \n", - "6 2023-05-26 17:00:00+02:00 2023-05-26 15:00:00 Practice 3 \n", - "7 2023-06-02 17:00:00+02:00 2023-06-02 15:00:00 Practice 3 \n", - "8 2023-06-16 16:30:00-04:00 2023-06-16 20:30:00 Practice 3 \n", - "9 2023-06-30 17:00:00+02:00 2023-06-30 15:00:00 Sprint Shootout \n", - "10 2023-07-07 16:00:00+01:00 2023-07-07 15:00:00 Practice 3 \n", - "11 2023-07-21 17:00:00+02:00 2023-07-21 15:00:00 Practice 3 \n", - "12 2023-07-28 17:00:00+02:00 2023-07-28 15:00:00 Sprint Shootout \n", - "13 2023-08-25 16:00:00+02:00 2023-08-25 14:00:00 Practice 3 \n", - "14 2023-09-01 17:00:00+02:00 2023-09-01 15:00:00 Practice 3 \n", - "15 2023-09-15 21:00:00+08:00 2023-09-15 13:00:00 Practice 3 \n", - "16 2023-09-22 15:00:00+09:00 2023-09-22 06:00:00 Practice 3 \n", - "17 2023-10-06 20:00:00+03:00 2023-10-06 17:00:00 Sprint Shootout \n", - "18 2023-10-20 16:00:00-05:00 2023-10-20 21:00:00 Sprint Shootout \n", - "19 2023-10-27 16:00:00-06:00 2023-10-27 22:00:00 Practice 3 \n", - "20 2023-11-03 15:00:00-03:00 2023-11-03 18:00:00 Sprint Shootout \n", - "21 2023-11-17 02:30:00-08:00 2023-11-17 10:30:00 Practice 3 \n", - "22 2023-11-24 17:00:00+04:00 2023-11-24 13:00:00 Practice 3 \n", - "\n", - " Session3Date Session3DateUtc Session4 \\\n", - "0 2023-02-25 10:00:00+03:00 2023-02-25 07:00:00 None \n", - "1 2023-03-04 14:30:00+03:00 2023-03-04 11:30:00 Qualifying \n", - "2 2023-03-18 16:30:00+03:00 2023-03-18 13:30:00 Qualifying \n", - "3 2023-04-01 12:30:00+10:00 2023-04-01 02:30:00 Qualifying \n", - "4 2023-04-29 12:30:00+04:00 2023-04-29 08:30:00 Sprint \n", - "5 2023-05-06 12:30:00-04:00 2023-05-06 16:30:00 Qualifying \n", - "6 2023-05-27 12:30:00+02:00 2023-05-27 10:30:00 Qualifying \n", - "7 2023-06-03 12:30:00+02:00 2023-06-03 10:30:00 Qualifying \n", - "8 2023-06-17 12:30:00-04:00 2023-06-17 16:30:00 Qualifying \n", - "9 2023-07-01 12:00:00+02:00 2023-07-01 10:00:00 Sprint \n", - "10 2023-07-08 11:30:00+01:00 2023-07-08 10:30:00 Qualifying \n", - "11 2023-07-22 12:30:00+02:00 2023-07-22 10:30:00 Qualifying \n", - "12 2023-07-29 12:00:00+02:00 2023-07-29 10:00:00 Sprint \n", - "13 2023-08-26 11:30:00+02:00 2023-08-26 09:30:00 Qualifying \n", - "14 2023-09-02 12:30:00+02:00 2023-09-02 10:30:00 Qualifying \n", - "15 2023-09-16 17:30:00+08:00 2023-09-16 09:30:00 Qualifying \n", - "16 2023-09-23 11:30:00+09:00 2023-09-23 02:30:00 Qualifying \n", - "17 2023-10-07 16:20:00+03:00 2023-10-07 13:20:00 Sprint \n", - "18 2023-10-21 12:30:00-05:00 2023-10-21 17:30:00 Sprint \n", - "19 2023-10-28 11:30:00-06:00 2023-10-28 17:30:00 Qualifying \n", - "20 2023-11-04 11:00:00-03:00 2023-11-04 14:00:00 Sprint \n", - "21 2023-11-17 20:30:00-08:00 2023-11-18 04:30:00 Qualifying \n", - "22 2023-11-25 14:30:00+04:00 2023-11-25 10:30:00 Qualifying \n", - "\n", - " Session4Date Session4DateUtc Session5 \\\n", - "0 NaT NaT None \n", - "1 2023-03-04 18:00:00+03:00 2023-03-04 15:00:00 Race \n", - "2 2023-03-18 20:00:00+03:00 2023-03-18 17:00:00 Race \n", - "3 2023-04-01 16:00:00+10:00 2023-04-01 06:00:00 Race \n", - "4 2023-04-29 17:30:00+04:00 2023-04-29 13:30:00 Race \n", - "5 2023-05-06 16:00:00-04:00 2023-05-06 20:00:00 Race \n", - "6 2023-05-27 16:00:00+02:00 2023-05-27 14:00:00 Race \n", - "7 2023-06-03 16:00:00+02:00 2023-06-03 14:00:00 Race \n", - "8 2023-06-17 16:00:00-04:00 2023-06-17 20:00:00 Race \n", - "9 2023-07-01 16:30:00+02:00 2023-07-01 14:30:00 Race \n", - "10 2023-07-08 15:00:00+01:00 2023-07-08 14:00:00 Race \n", - "11 2023-07-22 16:00:00+02:00 2023-07-22 14:00:00 Race \n", - "12 2023-07-29 17:05:00+02:00 2023-07-29 15:05:00 Race \n", - "13 2023-08-26 15:00:00+02:00 2023-08-26 13:00:00 Race \n", - "14 2023-09-02 16:00:00+02:00 2023-09-02 14:00:00 Race \n", - "15 2023-09-16 21:00:00+08:00 2023-09-16 13:00:00 Race \n", - "16 2023-09-23 15:00:00+09:00 2023-09-23 06:00:00 Race \n", - "17 2023-10-07 20:30:00+03:00 2023-10-07 17:30:00 Race \n", - "18 2023-10-21 17:00:00-05:00 2023-10-21 22:00:00 Race \n", - "19 2023-10-28 15:00:00-06:00 2023-10-28 21:00:00 Race \n", - "20 2023-11-04 15:30:00-03:00 2023-11-04 18:30:00 Race \n", - "21 2023-11-18 00:00:00-08:00 2023-11-18 08:00:00 Race \n", - "22 2023-11-25 18:00:00+04:00 2023-11-25 14:00:00 Race \n", - "\n", - " Session5Date Session5DateUtc F1ApiSupport \n", - "0 NaT NaT True \n", - "1 2023-03-05 18:00:00+03:00 2023-03-05 15:00:00 True \n", - "2 2023-03-19 20:00:00+03:00 2023-03-19 17:00:00 True \n", - "3 2023-04-02 15:00:00+10:00 2023-04-02 05:00:00 True \n", - "4 2023-04-30 15:00:00+04:00 2023-04-30 11:00:00 True \n", - "5 2023-05-07 15:30:00-04:00 2023-05-07 19:30:00 True \n", - "6 2023-05-28 15:00:00+02:00 2023-05-28 13:00:00 True \n", - "7 2023-06-04 15:00:00+02:00 2023-06-04 13:00:00 True \n", - "8 2023-06-18 14:00:00-04:00 2023-06-18 18:00:00 True \n", - "9 2023-07-02 15:00:00+02:00 2023-07-02 13:00:00 True \n", - "10 2023-07-09 15:00:00+01:00 2023-07-09 14:00:00 True \n", - "11 2023-07-23 15:00:00+02:00 2023-07-23 13:00:00 True \n", - "12 2023-07-30 15:00:00+02:00 2023-07-30 13:00:00 True \n", - "13 2023-08-27 15:00:00+02:00 2023-08-27 13:00:00 True \n", - "14 2023-09-03 15:00:00+02:00 2023-09-03 13:00:00 True \n", - "15 2023-09-17 20:00:00+08:00 2023-09-17 12:00:00 True \n", - "16 2023-09-24 14:00:00+09:00 2023-09-24 05:00:00 True \n", - "17 2023-10-08 20:00:00+03:00 2023-10-08 17:00:00 True \n", - "18 2023-10-22 14:00:00-05:00 2023-10-22 19:00:00 True \n", - "19 2023-10-29 14:00:00-06:00 2023-10-29 20:00:00 True \n", - "20 2023-11-05 14:00:00-03:00 2023-11-05 17:00:00 True \n", - "21 2023-11-18 22:00:00-08:00 2023-11-19 06:00:00 True \n", - "22 2023-11-26 17:00:00+04:00 2023-11-26 13:00:00 True " - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "event_schedule_2023 = fastf1.get_event_schedule(2023)\n", - "event_schedule_2023" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "02f26061-c4b8-4b33-a240-14f4ee0411d4", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "core INFO \tLoading data for Belgian Grand Prix - Sprint Shootout [v3.2.0]\n", - "req INFO \tUsing cached data for session_info\n", - "req INFO \tUsing cached data for driver_info\n", - "core WARNING \tNo result data for this session available on Ergast! (This is expected for recent sessions)\n", - "req INFO \tUsing cached data for session_status_data\n", - "req INFO \tUsing cached data for track_status_data\n", - "req INFO \tUsing cached data for _extended_timing_data\n", - "req INFO \tUsing cached data for timing_app_data\n", - "core INFO \tProcessing timing data...\n", - "logger WARNING \tFailed to calculate quali results from lap times!\n", - "core INFO \tFinished loading data for 20 drivers: ['55', '81', '4', '16', '11', '23', '22', '20', '3', '27', '14', '44', '63', '77', '24', '2', '18', '10', '31', '1']\n" - ] - }, - { - "data": { - "text/plain": [ - "[{'DriverNumber': '55',\n", - " 'BroadcastName': 'C SAINZ',\n", - " 'Abbreviation': 'SAI',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Ferrari',\n", - " 'TeamColor': 'F91536',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Carlos',\n", - " 'LastName': 'Sainz',\n", - " 'FullName': 'Carlos Sainz',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/C/CARSAI01_Carlos_Sainz/carsai01.png.transform/1col/image.png',\n", - " 'CountryCode': 'ESP',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '81',\n", - " 'BroadcastName': 'O PIASTRI',\n", - " 'Abbreviation': 'PIA',\n", - " 'DriverId': '',\n", - " 'TeamName': 'McLaren',\n", - " 'TeamColor': 'F58020',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Oscar',\n", - " 'LastName': 'Piastri',\n", - " 'FullName': 'Oscar Piastri',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/O/OSCPIA01_Oscar_Piastri/oscpia01.png.transform/1col/image.png',\n", - " 'CountryCode': 'AUS',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '4',\n", - " 'BroadcastName': 'L NORRIS',\n", - " 'Abbreviation': 'NOR',\n", - " 'DriverId': '',\n", - " 'TeamName': 'McLaren',\n", - " 'TeamColor': 'F58020',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Lando',\n", - " 'LastName': 'Norris',\n", - " 'FullName': 'Lando Norris',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/L/LANNOR01_Lando_Norris/lannor01.png.transform/1col/image.png',\n", - " 'CountryCode': 'GBR',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '16',\n", - " 'BroadcastName': 'C LECLERC',\n", - " 'Abbreviation': 'LEC',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Ferrari',\n", - " 'TeamColor': 'F91536',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Charles',\n", - " 'LastName': 'Leclerc',\n", - " 'FullName': 'Charles Leclerc',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/C/CHALEC01_Charles_Leclerc/chalec01.png.transform/1col/image.png',\n", - " 'CountryCode': 'MON',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '11',\n", - " 'BroadcastName': 'S PEREZ',\n", - " 'Abbreviation': 'PER',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Red Bull Racing',\n", - " 'TeamColor': '3671C6',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Sergio',\n", - " 'LastName': 'Perez',\n", - " 'FullName': 'Sergio Perez',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/S/SERPER01_Sergio_Perez/serper01.png.transform/1col/image.png',\n", - " 'CountryCode': 'MEX',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '23',\n", - " 'BroadcastName': 'A ALBON',\n", - " 'Abbreviation': 'ALB',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Williams',\n", - " 'TeamColor': '37BEDD',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Alexander',\n", - " 'LastName': 'Albon',\n", - " 'FullName': 'Alexander Albon',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/A/ALEALB01_Alexander_Albon/alealb01.png.transform/1col/image.png',\n", - " 'CountryCode': 'THA',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '22',\n", - " 'BroadcastName': 'Y TSUNODA',\n", - " 'Abbreviation': 'TSU',\n", - " 'DriverId': '',\n", - " 'TeamName': 'AlphaTauri',\n", - " 'TeamColor': '5E8FAA',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Yuki',\n", - " 'LastName': 'Tsunoda',\n", - " 'FullName': 'Yuki Tsunoda',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/Y/YUKTSU01_Yuki_Tsunoda/yuktsu01.png.transform/1col/image.png',\n", - " 'CountryCode': 'JPN',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '20',\n", - " 'BroadcastName': 'K MAGNUSSEN',\n", - " 'Abbreviation': 'MAG',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Haas F1 Team',\n", - " 'TeamColor': 'B6BABD',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Kevin',\n", - " 'LastName': 'Magnussen',\n", - " 'FullName': 'Kevin Magnussen',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/K/KEVMAG01_Kevin_Magnussen/kevmag01.png.transform/1col/image.png',\n", - " 'CountryCode': 'DEN',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '3',\n", - " 'BroadcastName': 'D RICCIARDO',\n", - " 'Abbreviation': 'RIC',\n", - " 'DriverId': '',\n", - " 'TeamName': 'AlphaTauri',\n", - " 'TeamColor': '5E8FAA',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Daniel',\n", - " 'LastName': 'Ricciardo',\n", - " 'FullName': 'Daniel Ricciardo',\n", - " 'HeadshotUrl': 'None',\n", - " 'CountryCode': 'AUS',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '27',\n", - " 'BroadcastName': 'N HULKENBERG',\n", - " 'Abbreviation': 'HUL',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Haas F1 Team',\n", - " 'TeamColor': 'B6BABD',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Nico',\n", - " 'LastName': 'Hulkenberg',\n", - " 'FullName': 'Nico Hulkenberg',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/N/NICHUL01_Nico_Hulkenberg/nichul01.png.transform/1col/image.png',\n", - " 'CountryCode': 'GER',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '14',\n", - " 'BroadcastName': 'F ALONSO',\n", - " 'Abbreviation': 'ALO',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Aston Martin',\n", - " 'TeamColor': '358C75',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Fernando',\n", - " 'LastName': 'Alonso',\n", - " 'FullName': 'Fernando Alonso',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/F/FERALO01_Fernando_Alonso/feralo01.png.transform/1col/image.png',\n", - " 'CountryCode': 'ESP',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '44',\n", - " 'BroadcastName': 'L HAMILTON',\n", - " 'Abbreviation': 'HAM',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Mercedes',\n", - " 'TeamColor': '6CD3BF',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Lewis',\n", - " 'LastName': 'Hamilton',\n", - " 'FullName': 'Lewis Hamilton',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/L/LEWHAM01_Lewis_Hamilton/lewham01.png.transform/1col/image.png',\n", - " 'CountryCode': 'GBR',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '63',\n", - " 'BroadcastName': 'G RUSSELL',\n", - " 'Abbreviation': 'RUS',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Mercedes',\n", - " 'TeamColor': '6CD3BF',\n", - " 'TeamId': '',\n", - " 'FirstName': 'George',\n", - " 'LastName': 'Russell',\n", - " 'FullName': 'George Russell',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/G/GEORUS01_George_Russell/georus01.png.transform/1col/image.png',\n", - " 'CountryCode': 'GBR',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '77',\n", - " 'BroadcastName': 'V BOTTAS',\n", - " 'Abbreviation': 'BOT',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Alfa Romeo',\n", - " 'TeamColor': 'C92D4B',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Valtteri',\n", - " 'LastName': 'Bottas',\n", - " 'FullName': 'Valtteri Bottas',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/V/VALBOT01_Valtteri_Bottas/valbot01.png.transform/1col/image.png',\n", - " 'CountryCode': 'FIN',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '24',\n", - " 'BroadcastName': 'G ZHOU',\n", - " 'Abbreviation': 'ZHO',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Alfa Romeo',\n", - " 'TeamColor': 'C92D4B',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Guanyu',\n", - " 'LastName': 'Zhou',\n", - " 'FullName': 'Guanyu Zhou',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/G/GUAZHO01_Guanyu_Zhou/guazho01.png.transform/1col/image.png',\n", - " 'CountryCode': 'CHN',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '2',\n", - " 'BroadcastName': 'L SARGEANT',\n", - " 'Abbreviation': 'SAR',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Williams',\n", - " 'TeamColor': '37BEDD',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Logan',\n", - " 'LastName': 'Sargeant',\n", - " 'FullName': 'Logan Sargeant',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/L/LOGSAR01_Logan_Sargeant/logsar01.png.transform/1col/image.png',\n", - " 'CountryCode': 'USA',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '18',\n", - " 'BroadcastName': 'L STROLL',\n", - " 'Abbreviation': 'STR',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Aston Martin',\n", - " 'TeamColor': '358C75',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Lance',\n", - " 'LastName': 'Stroll',\n", - " 'FullName': 'Lance Stroll',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/L/LANSTR01_Lance_Stroll/lanstr01.png.transform/1col/image.png',\n", - " 'CountryCode': 'CAN',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '10',\n", - " 'BroadcastName': 'P GASLY',\n", - " 'Abbreviation': 'GAS',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Alpine',\n", - " 'TeamColor': '2293D1',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Pierre',\n", - " 'LastName': 'Gasly',\n", - " 'FullName': 'Pierre Gasly',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/P/PIEGAS01_Pierre_Gasly/piegas01.png.transform/1col/image.png',\n", - " 'CountryCode': 'FRA',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '31',\n", - " 'BroadcastName': 'E OCON',\n", - " 'Abbreviation': 'OCO',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Alpine',\n", - " 'TeamColor': '2293D1',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Esteban',\n", - " 'LastName': 'Ocon',\n", - " 'FullName': 'Esteban Ocon',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/E/ESTOCO01_Esteban_Ocon/estoco01.png.transform/1col/image.png',\n", - " 'CountryCode': 'FRA',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None},\n", - " {'DriverNumber': '1',\n", - " 'BroadcastName': 'M VERSTAPPEN',\n", - " 'Abbreviation': 'VER',\n", - " 'DriverId': '',\n", - " 'TeamName': 'Red Bull Racing',\n", - " 'TeamColor': '3671C6',\n", - " 'TeamId': '',\n", - " 'FirstName': 'Max',\n", - " 'LastName': 'Verstappen',\n", - " 'FullName': 'Max Verstappen',\n", - " 'HeadshotUrl': 'https://www.formula1.com/content/dam/fom-website/drivers/M/MAXVER01_Max_Verstappen/maxver01.png.transform/1col/image.png',\n", - " 'CountryCode': 'NED',\n", - " 'Position': None,\n", - " 'ClassifiedPosition': '',\n", - " 'GridPosition': None,\n", - " 'Q1': None,\n", - " 'Q2': None,\n", - " 'Q3': None,\n", - " 'Time': None,\n", - " 'Status': '',\n", - " 'Points': None}]" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "import json\n", - "\n", - "\n", - "event_bahraingp = event_schedule_2023.get_event_by_name(\"Belgian Grand Prix\")\n", - "\n", - "event_session = event_bahraingp.get_sprint_shootout()\n", - "event_session.load(\n", - " laps=True,\n", - " telemetry=False,\n", - " weather=False,\n", - " messages=False,\n", - ")\n", - "event_session_as_json = event_session.results.to_json(orient=\"records\")\n", - "event_session_as_json_obj = json.loads(event_session_as_json)\n", - "event_session_as_json_obj" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "ea9e656e-5f0b-450c-a45d-83ecd55597af", - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "core INFO \tLoading data for Belgian 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", - "req INFO \tUsing cached data for lap_count\n", - "req INFO \tUsing cached data for track_status_data\n", - "req INFO \tUsing cached data for _extended_timing_data\n", - "req INFO \tUsing cached data for timing_app_data\n", - "core INFO \tProcessing timing data...\n", - "req INFO \tNo cached data found for car_data. Loading data...\n", - "_api INFO \tFetching car data...\n", - "_api INFO \tParsing car data...\n", - "req INFO \tData has been written to cache!\n", - "req INFO \tNo cached data found for position_data. Loading data...\n", - "_api INFO \tFetching position data...\n", - "_api INFO \tParsing position data...\n", - "req INFO \tData has been written to cache!\n", - "req INFO \tNo cached data found for weather_data. Loading data...\n", - "_api INFO \tFetching weather data...\n", - "req INFO \tData has been written to cache!\n", - "req INFO \tNo cached data found for race_control_messages. Loading data...\n", - "_api INFO \tFetching race control messages...\n", - "req INFO \tData has been written to cache!\n", - "core INFO \tFinished loading data for 20 drivers: ['1', '11', '16', '44', '14', '63', '4', '31', '18', '22', '10', '77', '24', '23', '20', '3', '2', '27', '55', '81']\n" - ] - }, - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
DriverNumberBroadcastNameAbbreviationDriverIdTeamNameTeamColorTeamIdFirstNameLastNameFullNameHeadshotUrlCountryCodePositionClassifiedPositionGridPositionQ1Q2Q3TimeStatusPoints
11M VERSTAPPENVERmax_verstappenRed Bull Racing3671C6red_bullMaxVerstappenMax Verstappenhttps://www.formula1.com/content/dam/fom-website/drivers/M/MAXVER01_Max_Verstappen/maxver01.png.transform/1col/image.pngNED1.016.0NaTNaTNaT0 days 01:22:30.450000Finished25.0
1111S PEREZPERperezRed Bull Racing3671C6red_bullSergioPerezSergio Perezhttps://www.formula1.com/content/dam/fom-website/drivers/S/SERPER01_Sergio_Perez/serper01.png.transform/1col/image.pngMEX2.022.0NaTNaTNaT0 days 00:00:22.305000Finished18.0
1616C LECLERCLECleclercFerrariF91536ferrariCharlesLeclercCharles Leclerchttps://www.formula1.com/content/dam/fom-website/drivers/C/CHALEC01_Charles_Leclerc/chalec01.png.transform/1col/image.pngMON3.031.0NaTNaTNaT0 days 00:00:32.259000Finished15.0
4444L HAMILTONHAMhamiltonMercedes6CD3BFmercedesLewisHamiltonLewis Hamiltonhttps://www.formula1.com/content/dam/fom-website/drivers/L/LEWHAM01_Lewis_Hamilton/lewham01.png.transform/1col/image.pngGBR4.043.0NaTNaTNaT0 days 00:00:49.671000Finished13.0
1414F ALONSOALOalonsoAston Martin358C75aston_martinFernandoAlonsoFernando Alonsohttps://www.formula1.com/content/dam/fom-website/drivers/F/FERALO01_Fernando_Alonso/feralo01.png.transform/1col/image.pngESP5.059.0NaTNaTNaT0 days 00:00:56.184000Finished10.0
6363G RUSSELLRUSrussellMercedes6CD3BFmercedesGeorgeRussellGeorge Russellhttps://www.formula1.com/content/dam/fom-website/drivers/G/GEORUS01_George_Russell/georus01.png.transform/1col/image.pngGBR6.068.0NaTNaTNaT0 days 00:01:03.101000Finished8.0
44L NORRISNORnorrisMcLarenF58020mclarenLandoNorrisLando Norrishttps://www.formula1.com/content/dam/fom-website/drivers/L/LANNOR01_Lando_Norris/lannor01.png.transform/1col/image.pngGBR7.077.0NaTNaTNaT0 days 00:01:13.719000Finished6.0
3131E OCONOCOoconAlpine2293D1alpineEstebanOconEsteban Oconhttps://www.formula1.com/content/dam/fom-website/drivers/E/ESTOCO01_Esteban_Ocon/estoco01.png.transform/1col/image.pngFRA8.0814.0NaTNaTNaT0 days 00:01:14.719000Finished4.0
1818L STROLLSTRstrollAston Martin358C75aston_martinLanceStrollLance Strollhttps://www.formula1.com/content/dam/fom-website/drivers/L/LANSTR01_Lance_Stroll/lanstr01.png.transform/1col/image.pngCAN9.0910.0NaTNaTNaT0 days 00:01:19.340000Finished2.0
2222Y TSUNODATSUtsunodaAlphaTauri5E8FAAalphatauriYukiTsunodaYuki Tsunodahttps://www.formula1.com/content/dam/fom-website/drivers/Y/YUKTSU01_Yuki_Tsunoda/yuktsu01.png.transform/1col/image.pngJPN10.01011.0NaTNaTNaT0 days 00:01:20.221000Finished1.0
1010P GASLYGASgaslyAlpine2293D1alpinePierreGaslyPierre Gaslyhttps://www.formula1.com/content/dam/fom-website/drivers/P/PIEGAS01_Pierre_Gasly/piegas01.png.transform/1col/image.pngFRA11.01112.0NaTNaTNaT0 days 00:01:23.084000Finished0.0
7777V BOTTASBOTbottasAlfa RomeoC92D4BalfaValtteriBottasValtteri Bottashttps://www.formula1.com/content/dam/fom-website/drivers/V/VALBOT01_Valtteri_Bottas/valbot01.png.transform/1col/image.pngFIN12.01213.0NaTNaTNaT0 days 00:01:25.191000Finished0.0
2424G ZHOUZHOzhouAlfa RomeoC92D4BalfaGuanyuZhouGuanyu Zhouhttps://www.formula1.com/content/dam/fom-website/drivers/G/GUAZHO01_Guanyu_Zhou/guazho01.png.transform/1col/image.pngCHN13.01317.0NaTNaTNaT0 days 00:01:35.441000Finished0.0
2323A ALBONALBalbonWilliams37BEDDwilliamsAlexanderAlbonAlexander Albonhttps://www.formula1.com/content/dam/fom-website/drivers/A/ALEALB01_Alexander_Albon/alealb01.png.transform/1col/image.pngTHA14.01415.0NaTNaTNaT0 days 00:01:36.184000Finished0.0
2020K MAGNUSSENMAGkevin_magnussenHaas F1 TeamB6BABDhaasKevinMagnussenKevin Magnussenhttps://www.formula1.com/content/dam/fom-website/drivers/K/KEVMAG01_Kevin_Magnussen/kevmag01.png.transform/1col/image.pngDEN15.01516.0NaTNaTNaT0 days 00:01:41.754000Finished0.0
33D RICCIARDORICricciardoAlphaTauri5E8FAAalphatauriDanielRicciardoDaniel RicciardoNoneAUS16.01619.0NaTNaTNaT0 days 00:01:43.071000Finished0.0
22L SARGEANTSARsargeantWilliams37BEDDwilliamsLoganSargeantLogan Sargeanthttps://www.formula1.com/content/dam/fom-website/drivers/L/LOGSAR01_Logan_Sargeant/logsar01.png.transform/1col/image.pngUSA17.01718.0NaTNaTNaT0 days 00:01:44.476000Finished0.0
2727N HULKENBERGHULhulkenbergHaas F1 TeamB6BABDhaasNicoHulkenbergNico Hulkenberghttps://www.formula1.com/content/dam/fom-website/drivers/N/NICHUL01_Nico_Hulkenberg/nichul01.png.transform/1col/image.pngGER18.0180.0NaTNaTNaT0 days 00:01:50.450000Finished0.0
5555C SAINZSAIsainzFerrariF91536ferrariCarlosSainzCarlos Sainzhttps://www.formula1.com/content/dam/fom-website/drivers/C/CARSAI01_Carlos_Sainz/carsai01.png.transform/1col/image.pngESP19.0R4.0NaTNaTNaTNaTCollision damage0.0
8181O PIASTRIPIApiastriMcLarenF58020mclarenOscarPiastriOscar Piastrihttps://www.formula1.com/content/dam/fom-website/drivers/O/OSCPIA01_Oscar_Piastri/oscpia01.png.transform/1col/image.pngAUS20.0R5.0NaTNaTNaTNaTCollision damage0.0
\n", - "
" - ], - "text/plain": [ - " DriverNumber BroadcastName Abbreviation DriverId TeamName \\\n", - "1 1 M VERSTAPPEN VER max_verstappen Red Bull Racing \n", - "11 11 S PEREZ PER perez Red Bull Racing \n", - "16 16 C LECLERC LEC leclerc Ferrari \n", - "44 44 L HAMILTON HAM hamilton Mercedes \n", - "14 14 F ALONSO ALO alonso Aston Martin \n", - "63 63 G RUSSELL RUS russell Mercedes \n", - "4 4 L NORRIS NOR norris McLaren \n", - "31 31 E OCON OCO ocon Alpine \n", - "18 18 L STROLL STR stroll Aston Martin \n", - "22 22 Y TSUNODA TSU tsunoda AlphaTauri \n", - "10 10 P GASLY GAS gasly Alpine \n", - "77 77 V BOTTAS BOT bottas Alfa Romeo \n", - "24 24 G ZHOU ZHO zhou Alfa Romeo \n", - "23 23 A ALBON ALB albon Williams \n", - "20 20 K MAGNUSSEN MAG kevin_magnussen Haas F1 Team \n", - "3 3 D RICCIARDO RIC ricciardo AlphaTauri \n", - "2 2 L SARGEANT SAR sargeant Williams \n", - "27 27 N HULKENBERG HUL hulkenberg Haas F1 Team \n", - "55 55 C SAINZ SAI sainz Ferrari \n", - "81 81 O PIASTRI PIA piastri McLaren \n", - "\n", - " TeamColor TeamId FirstName LastName FullName \\\n", - "1 3671C6 red_bull Max Verstappen Max Verstappen \n", - "11 3671C6 red_bull Sergio Perez Sergio Perez \n", - "16 F91536 ferrari Charles Leclerc Charles Leclerc \n", - "44 6CD3BF mercedes Lewis Hamilton Lewis Hamilton \n", - "14 358C75 aston_martin Fernando Alonso Fernando Alonso \n", - "63 6CD3BF mercedes George Russell George Russell \n", - "4 F58020 mclaren Lando Norris Lando Norris \n", - "31 2293D1 alpine Esteban Ocon Esteban Ocon \n", - "18 358C75 aston_martin Lance Stroll Lance Stroll \n", - "22 5E8FAA alphatauri Yuki Tsunoda Yuki Tsunoda \n", - "10 2293D1 alpine Pierre Gasly Pierre Gasly \n", - "77 C92D4B alfa Valtteri Bottas Valtteri Bottas \n", - "24 C92D4B alfa Guanyu Zhou Guanyu Zhou \n", - "23 37BEDD williams Alexander Albon Alexander Albon \n", - "20 B6BABD haas Kevin Magnussen Kevin Magnussen \n", - "3 5E8FAA alphatauri Daniel Ricciardo Daniel Ricciardo \n", - "2 37BEDD williams Logan Sargeant Logan Sargeant \n", - "27 B6BABD haas Nico Hulkenberg Nico Hulkenberg \n", - "55 F91536 ferrari Carlos Sainz Carlos Sainz \n", - "81 F58020 mclaren Oscar Piastri Oscar Piastri \n", - "\n", - " HeadshotUrl \\\n", - "1 https://www.formula1.com/content/dam/fom-website/drivers/M/MAXVER01_Max_Verstappen/maxver01.png.transform/1col/image.png \n", - "11 https://www.formula1.com/content/dam/fom-website/drivers/S/SERPER01_Sergio_Perez/serper01.png.transform/1col/image.png \n", - "16 https://www.formula1.com/content/dam/fom-website/drivers/C/CHALEC01_Charles_Leclerc/chalec01.png.transform/1col/image.png \n", - "44 https://www.formula1.com/content/dam/fom-website/drivers/L/LEWHAM01_Lewis_Hamilton/lewham01.png.transform/1col/image.png \n", - "14 https://www.formula1.com/content/dam/fom-website/drivers/F/FERALO01_Fernando_Alonso/feralo01.png.transform/1col/image.png \n", - "63 https://www.formula1.com/content/dam/fom-website/drivers/G/GEORUS01_George_Russell/georus01.png.transform/1col/image.png \n", - "4 https://www.formula1.com/content/dam/fom-website/drivers/L/LANNOR01_Lando_Norris/lannor01.png.transform/1col/image.png \n", - "31 https://www.formula1.com/content/dam/fom-website/drivers/E/ESTOCO01_Esteban_Ocon/estoco01.png.transform/1col/image.png \n", - "18 https://www.formula1.com/content/dam/fom-website/drivers/L/LANSTR01_Lance_Stroll/lanstr01.png.transform/1col/image.png \n", - "22 https://www.formula1.com/content/dam/fom-website/drivers/Y/YUKTSU01_Yuki_Tsunoda/yuktsu01.png.transform/1col/image.png \n", - "10 https://www.formula1.com/content/dam/fom-website/drivers/P/PIEGAS01_Pierre_Gasly/piegas01.png.transform/1col/image.png \n", - "77 https://www.formula1.com/content/dam/fom-website/drivers/V/VALBOT01_Valtteri_Bottas/valbot01.png.transform/1col/image.png \n", - "24 https://www.formula1.com/content/dam/fom-website/drivers/G/GUAZHO01_Guanyu_Zhou/guazho01.png.transform/1col/image.png \n", - "23 https://www.formula1.com/content/dam/fom-website/drivers/A/ALEALB01_Alexander_Albon/alealb01.png.transform/1col/image.png \n", - "20 https://www.formula1.com/content/dam/fom-website/drivers/K/KEVMAG01_Kevin_Magnussen/kevmag01.png.transform/1col/image.png \n", - "3 None \n", - "2 https://www.formula1.com/content/dam/fom-website/drivers/L/LOGSAR01_Logan_Sargeant/logsar01.png.transform/1col/image.png \n", - "27 https://www.formula1.com/content/dam/fom-website/drivers/N/NICHUL01_Nico_Hulkenberg/nichul01.png.transform/1col/image.png \n", - "55 https://www.formula1.com/content/dam/fom-website/drivers/C/CARSAI01_Carlos_Sainz/carsai01.png.transform/1col/image.png \n", - "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 NED 1.0 1 6.0 NaT NaT NaT \n", - "11 MEX 2.0 2 2.0 NaT NaT NaT \n", - "16 MON 3.0 3 1.0 NaT NaT NaT \n", - "44 GBR 4.0 4 3.0 NaT NaT NaT \n", - "14 ESP 5.0 5 9.0 NaT NaT NaT \n", - "63 GBR 6.0 6 8.0 NaT NaT NaT \n", - "4 GBR 7.0 7 7.0 NaT NaT NaT \n", - "31 FRA 8.0 8 14.0 NaT NaT NaT \n", - "18 CAN 9.0 9 10.0 NaT NaT NaT \n", - "22 JPN 10.0 10 11.0 NaT NaT NaT \n", - "10 FRA 11.0 11 12.0 NaT NaT NaT \n", - "77 FIN 12.0 12 13.0 NaT NaT NaT \n", - "24 CHN 13.0 13 17.0 NaT NaT NaT \n", - "23 THA 14.0 14 15.0 NaT NaT NaT \n", - "20 DEN 15.0 15 16.0 NaT NaT NaT \n", - "3 AUS 16.0 16 19.0 NaT NaT NaT \n", - "2 USA 17.0 17 18.0 NaT NaT NaT \n", - "27 GER 18.0 18 0.0 NaT NaT NaT \n", - "55 ESP 19.0 R 4.0 NaT NaT NaT \n", - "81 AUS 20.0 R 5.0 NaT NaT NaT \n", - "\n", - " Time Status Points \n", - "1 0 days 01:22:30.450000 Finished 25.0 \n", - "11 0 days 00:00:22.305000 Finished 18.0 \n", - "16 0 days 00:00:32.259000 Finished 15.0 \n", - "44 0 days 00:00:49.671000 Finished 13.0 \n", - "14 0 days 00:00:56.184000 Finished 10.0 \n", - "63 0 days 00:01:03.101000 Finished 8.0 \n", - "4 0 days 00:01:13.719000 Finished 6.0 \n", - "31 0 days 00:01:14.719000 Finished 4.0 \n", - "18 0 days 00:01:19.340000 Finished 2.0 \n", - "22 0 days 00:01:20.221000 Finished 1.0 \n", - "10 0 days 00:01:23.084000 Finished 0.0 \n", - "77 0 days 00:01:25.191000 Finished 0.0 \n", - "24 0 days 00:01:35.441000 Finished 0.0 \n", - "23 0 days 00:01:36.184000 Finished 0.0 \n", - "20 0 days 00:01:41.754000 Finished 0.0 \n", - "3 0 days 00:01:43.071000 Finished 0.0 \n", - "2 0 days 00:01:44.476000 Finished 0.0 \n", - "27 0 days 00:01:50.450000 Finished 0.0 \n", - "55 NaT Collision damage 0.0 \n", - "81 NaT Collision damage 0.0 " - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "race_event = event_bahraingp.get_race()\n", - "race_event.load(\n", - " laps=True,\n", - " telemetry=True,\n", - " weather=True,\n", - " messages=True,\n", - ")\n", - "race_event.results" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "130a094d-3133-4d45-b0cf-b20f2ed9277d", - "metadata": { - "editable": true, - "slideshow": { - "slide_type": "" - }, - "tags": [] - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TimeDriverDriverNumberLapTimeLapNumberStintPitOutTimePitInTimeSector1TimeSector2TimeSector3TimeSector1SessionTimeSector2SessionTimeSector3SessionTimeSpeedI1SpeedI2SpeedFLSpeedSTIsPersonalBestCompoundTyreLifeFreshTyreTeamLapStartTimeLapStartDateTrackStatusPositionDeletedDeletedReasonFastF1GeneratedIsAccurate
00 days 01:04:40.504000VER10 days 00:01:55.6590001.01.0NaTNaTNaT0 days 00:00:49.7870000 days 00:00:29.968000NaT0 days 01:04:10.6130000 days 01:04:40.504000319.0196.0212.0298.0FalseSOFT1.0TrueRed Bull Racing0 days 01:02:44.6140002023-07-30 13:03:45.83315.0FalseFalseFalse
10 days 01:06:33.607000VER10 days 00:01:53.1030002.01.0NaTNaT0 days 00:00:32.2910000 days 00:00:50.7120000 days 00:00:30.1000000 days 01:05:12.7950000 days 01:06:03.5070000 days 01:06:33.607000302.0194.0211.0307.0TrueSOFT2.0TrueRed Bull Racing0 days 01:04:40.5040002023-07-30 13:05:41.72324.0FalseFalseTrue
20 days 01:08:25.884000VER10 days 00:01:52.2770003.01.0NaTNaT0 days 00:00:31.7580000 days 00:00:50.3250000 days 00:00:30.1940000 days 01:07:05.3650000 days 01:07:55.6900000 days 01:08:25.884000323.0184.0213.0NaNTrueSOFT3.0TrueRed Bull Racing0 days 01:06:33.6070002023-07-30 13:07:34.82624.0FalseFalseTrue
30 days 01:10:18.673000VER10 days 00:01:52.7890004.01.0NaTNaT0 days 00:00:31.8810000 days 00:00:50.5990000 days 00:00:30.3090000 days 01:08:57.7650000 days 01:09:48.3640000 days 01:10:18.673000325.0187.0212.0308.0FalseSOFT4.0TrueRed Bull Racing0 days 01:08:25.8840002023-07-30 13:09:27.10314.0FalseFalseTrue
40 days 01:12:11.275000VER10 days 00:01:52.6020005.01.0NaTNaT0 days 00:00:32.0010000 days 00:00:50.2010000 days 00:00:30.4000000 days 01:10:50.6740000 days 01:11:40.8750000 days 01:12:11.275000NaN179.0211.0307.0FalseSOFT5.0TrueRed Bull Racing0 days 01:10:18.6730002023-07-30 13:11:19.89214.0FalseFalseTrue
................................................................................................
8110 days 01:41:37.216000SAI550 days 00:01:56.42600020.02.0NaTNaT0 days 00:00:32.6480000 days 00:00:52.4190000 days 00:00:31.3590000 days 01:40:13.4800000 days 01:41:05.8990000 days 01:41:37.258000312.0174.0205.0300.0FalseMEDIUM13.0TrueFerrari0 days 01:39:40.7900002023-07-30 13:40:42.009119.0FalseFalseTrue
8120 days 01:43:37.378000SAI550 days 00:02:00.16200021.02.0NaTNaT0 days 00:00:32.7870000 days 00:00:54.7600000 days 00:00:32.6150000 days 01:42:10.0450000 days 01:43:04.8050000 days 01:43:37.420000311.0178.0208.0NaNFalseMEDIUM14.0TrueFerrari0 days 01:41:37.2160002023-07-30 13:42:38.435119.0TrueTRACK LIMITS AT TURN 11 LAP 21FalseTrue
8130 days 01:45:35.327000SAI550 days 00:01:57.94900022.02.0NaTNaT0 days 00:00:32.9360000 days 00:00:53.6380000 days 00:00:31.3750000 days 01:44:10.3560000 days 01:45:03.9940000 days 01:45:35.369000NaN181.0207.0286.0FalseMEDIUM15.0TrueFerrari0 days 01:43:37.3780002023-07-30 13:44:38.597119.0FalseFalseTrue
8140 days 01:47:38.690000SAI550 days 00:02:03.36300023.02.0NaT0 days 01:47:34.9130000 days 00:00:32.7480000 days 00:00:52.1570000 days 00:00:38.4580000 days 01:46:08.1170000 days 01:47:00.2740000 days 01:47:38.732000NaN181.0NaN300.0FalseMEDIUM16.0TrueFerrari0 days 01:45:35.3270002023-07-30 13:46:36.546119.0FalseFalseFalse
8150 days 01:04:38.140000PIA81NaT1.01.0NaTNaTNaTNaTNaTNaTNaTNaTNaNNaNNaNNaNFalseMEDIUM1.0TrueMcLaren0 days 01:02:44.6140002023-07-30 13:03:45.83311.0FalseTrueFalse
\n", - "

816 rows × 31 columns

\n", - "
" - ], - "text/plain": [ - " Time Driver DriverNumber LapTime \\\n", - "0 0 days 01:04:40.504000 VER 1 0 days 00:01:55.659000 \n", - "1 0 days 01:06:33.607000 VER 1 0 days 00:01:53.103000 \n", - "2 0 days 01:08:25.884000 VER 1 0 days 00:01:52.277000 \n", - "3 0 days 01:10:18.673000 VER 1 0 days 00:01:52.789000 \n", - "4 0 days 01:12:11.275000 VER 1 0 days 00:01:52.602000 \n", - ".. ... ... ... ... \n", - "811 0 days 01:41:37.216000 SAI 55 0 days 00:01:56.426000 \n", - "812 0 days 01:43:37.378000 SAI 55 0 days 00:02:00.162000 \n", - "813 0 days 01:45:35.327000 SAI 55 0 days 00:01:57.949000 \n", - "814 0 days 01:47:38.690000 SAI 55 0 days 00:02:03.363000 \n", - "815 0 days 01:04:38.140000 PIA 81 NaT \n", - "\n", - " LapNumber Stint PitOutTime PitInTime \\\n", - "0 1.0 1.0 NaT NaT \n", - "1 2.0 1.0 NaT NaT \n", - "2 3.0 1.0 NaT NaT \n", - "3 4.0 1.0 NaT NaT \n", - "4 5.0 1.0 NaT NaT \n", - ".. ... ... ... ... \n", - "811 20.0 2.0 NaT NaT \n", - "812 21.0 2.0 NaT NaT \n", - "813 22.0 2.0 NaT NaT \n", - "814 23.0 2.0 NaT 0 days 01:47:34.913000 \n", - "815 1.0 1.0 NaT NaT \n", - "\n", - " Sector1Time Sector2Time Sector3Time \\\n", - "0 NaT 0 days 00:00:49.787000 0 days 00:00:29.968000 \n", - "1 0 days 00:00:32.291000 0 days 00:00:50.712000 0 days 00:00:30.100000 \n", - "2 0 days 00:00:31.758000 0 days 00:00:50.325000 0 days 00:00:30.194000 \n", - "3 0 days 00:00:31.881000 0 days 00:00:50.599000 0 days 00:00:30.309000 \n", - "4 0 days 00:00:32.001000 0 days 00:00:50.201000 0 days 00:00:30.400000 \n", - ".. ... ... ... \n", - "811 0 days 00:00:32.648000 0 days 00:00:52.419000 0 days 00:00:31.359000 \n", - "812 0 days 00:00:32.787000 0 days 00:00:54.760000 0 days 00:00:32.615000 \n", - "813 0 days 00:00:32.936000 0 days 00:00:53.638000 0 days 00:00:31.375000 \n", - "814 0 days 00:00:32.748000 0 days 00:00:52.157000 0 days 00:00:38.458000 \n", - "815 NaT NaT NaT \n", - "\n", - " Sector1SessionTime Sector2SessionTime Sector3SessionTime \\\n", - "0 NaT 0 days 01:04:10.613000 0 days 01:04:40.504000 \n", - "1 0 days 01:05:12.795000 0 days 01:06:03.507000 0 days 01:06:33.607000 \n", - "2 0 days 01:07:05.365000 0 days 01:07:55.690000 0 days 01:08:25.884000 \n", - "3 0 days 01:08:57.765000 0 days 01:09:48.364000 0 days 01:10:18.673000 \n", - "4 0 days 01:10:50.674000 0 days 01:11:40.875000 0 days 01:12:11.275000 \n", - ".. ... ... ... \n", - "811 0 days 01:40:13.480000 0 days 01:41:05.899000 0 days 01:41:37.258000 \n", - "812 0 days 01:42:10.045000 0 days 01:43:04.805000 0 days 01:43:37.420000 \n", - "813 0 days 01:44:10.356000 0 days 01:45:03.994000 0 days 01:45:35.369000 \n", - "814 0 days 01:46:08.117000 0 days 01:47:00.274000 0 days 01:47:38.732000 \n", - "815 NaT NaT NaT \n", - "\n", - " SpeedI1 SpeedI2 SpeedFL SpeedST IsPersonalBest Compound TyreLife \\\n", - "0 319.0 196.0 212.0 298.0 False SOFT 1.0 \n", - "1 302.0 194.0 211.0 307.0 True SOFT 2.0 \n", - "2 323.0 184.0 213.0 NaN True SOFT 3.0 \n", - "3 325.0 187.0 212.0 308.0 False SOFT 4.0 \n", - "4 NaN 179.0 211.0 307.0 False SOFT 5.0 \n", - ".. ... ... ... ... ... ... ... \n", - "811 312.0 174.0 205.0 300.0 False MEDIUM 13.0 \n", - "812 311.0 178.0 208.0 NaN False MEDIUM 14.0 \n", - "813 NaN 181.0 207.0 286.0 False MEDIUM 15.0 \n", - "814 NaN 181.0 NaN 300.0 False MEDIUM 16.0 \n", - "815 NaN NaN NaN NaN False MEDIUM 1.0 \n", - "\n", - " FreshTyre Team LapStartTime \\\n", - "0 True Red Bull Racing 0 days 01:02:44.614000 \n", - "1 True Red Bull Racing 0 days 01:04:40.504000 \n", - "2 True Red Bull Racing 0 days 01:06:33.607000 \n", - "3 True Red Bull Racing 0 days 01:08:25.884000 \n", - "4 True Red Bull Racing 0 days 01:10:18.673000 \n", - ".. ... ... ... \n", - "811 True Ferrari 0 days 01:39:40.790000 \n", - "812 True Ferrari 0 days 01:41:37.216000 \n", - "813 True Ferrari 0 days 01:43:37.378000 \n", - "814 True Ferrari 0 days 01:45:35.327000 \n", - "815 True McLaren 0 days 01:02:44.614000 \n", - "\n", - " LapStartDate TrackStatus Position Deleted \\\n", - "0 2023-07-30 13:03:45.833 1 5.0 False \n", - "1 2023-07-30 13:05:41.723 2 4.0 False \n", - "2 2023-07-30 13:07:34.826 2 4.0 False \n", - "3 2023-07-30 13:09:27.103 1 4.0 False \n", - "4 2023-07-30 13:11:19.892 1 4.0 False \n", - ".. ... ... ... ... \n", - "811 2023-07-30 13:40:42.009 1 19.0 False \n", - "812 2023-07-30 13:42:38.435 1 19.0 True \n", - "813 2023-07-30 13:44:38.597 1 19.0 False \n", - "814 2023-07-30 13:46:36.546 1 19.0 False \n", - "815 2023-07-30 13:03:45.833 1 1.0 False \n", - "\n", - " DeletedReason FastF1Generated IsAccurate \n", - "0 False False \n", - "1 False True \n", - "2 False True \n", - "3 False True \n", - "4 False True \n", - ".. ... ... ... \n", - "811 False True \n", - "812 TRACK LIMITS AT TURN 11 LAP 21 False True \n", - "813 False True \n", - "814 False False \n", - "815 True False \n", - "\n", - "[816 rows x 31 columns]" - ] - }, - "execution_count": 6, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "race_event.laps" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "id": "398816a5-113c-4126-b1de-405e2e9db390", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'Meeting': {'Key': 1216,\n", - " 'Name': 'Belgian Grand Prix',\n", - " 'OfficialName': 'FORMULA 1 MSC CRUISES BELGIAN GRAND PRIX 2023',\n", - " 'Location': 'Spa-Francorchamps',\n", - " 'Country': {'Key': 16, 'Code': 'BEL', 'Name': 'Belgium'},\n", - " 'Circuit': {'Key': 7, 'ShortName': 'Spa-Francorchamps'}},\n", - " 'ArchiveStatus': {'Status': 'Generating'},\n", - " 'Key': 9141,\n", - " 'Type': 'Race',\n", - " 'Name': 'Race',\n", - " 'StartDate': datetime.datetime(2023, 7, 30, 15, 0),\n", - " 'EndDate': datetime.datetime(2023, 7, 30, 17, 0),\n", - " 'GmtOffset': datetime.timedelta(seconds=7200),\n", - " 'Path': '2023/2023-07-30_Belgian_Grand_Prix/2023-07-30_Race/'}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "race_event.session_info" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "cdc295cb-37a3-493c-acec-557aee7dc8e5", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TimeStatusMessage
00 days 00:00:002Yellow
10 days 00:05:56.6840001AllClear
20 days 00:28:36.1840002Yellow
30 days 00:29:50.1050001AllClear
40 days 00:51:13.7310002Yellow
50 days 00:51:35.7150001AllClear
60 days 01:05:29.4250002Yellow
70 days 01:07:05.2360001AllClear
80 days 01:07:18.7990002Yellow
90 days 01:07:25.1110001AllClear
100 days 02:25:23.9660002Yellow
\n", - "
" - ], - "text/plain": [ - " Time Status Message\n", - "0 0 days 00:00:00 2 Yellow\n", - "1 0 days 00:05:56.684000 1 AllClear\n", - "2 0 days 00:28:36.184000 2 Yellow\n", - "3 0 days 00:29:50.105000 1 AllClear\n", - "4 0 days 00:51:13.731000 2 Yellow\n", - "5 0 days 00:51:35.715000 1 AllClear\n", - "6 0 days 01:05:29.425000 2 Yellow\n", - "7 0 days 01:07:05.236000 1 AllClear\n", - "8 0 days 01:07:18.799000 2 Yellow\n", - "9 0 days 01:07:25.111000 1 AllClear\n", - "10 0 days 02:25:23.966000 2 Yellow" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "race_event.track_status" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "a63f3ab0-d8d0-4328-bd51-d6feee44ba26", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TimeCategoryMessageStatusFlagScopeSectorRacingNumberLap
02023-07-30 12:06:58FlagCLEAR IN TRACK SECTOR 5NoneCLEARSector5.0None1
12023-07-30 12:06:58OtherDRS ENABLED IN ZONE 1NoneNoneNoneNaNNone1
22023-07-30 12:10:01FlagGREEN LIGHT - PIT EXIT OPENNoneGREENTrackNaNNone1
32023-07-30 12:20:01OtherPIT EXIT CLOSEDNoneNoneNoneNaNNone1
42023-07-30 12:29:37FlagDOUBLE YELLOW IN TRACK SECTOR 16NoneDOUBLE YELLOWSector16.0None1
52023-07-30 12:29:55FlagDOUBLE YELLOW IN TRACK SECTOR 15NoneDOUBLE YELLOWSector15.0None1
62023-07-30 12:30:49FlagCLEAR IN TRACK SECTOR 15NoneCLEARSector15.0None1
72023-07-30 12:30:51FlagCLEAR IN TRACK SECTOR 16NoneCLEARSector16.0None1
82023-07-30 12:45:11OtherRISK OF RAIN FOR F1 RACE IS 40%NoneNoneNoneNaNNone1
92023-07-30 12:52:15FlagYELLOW IN TRACK SECTOR 20NoneYELLOWSector20.0None1
102023-07-30 12:52:37FlagCLEAR IN TRACK SECTOR 20NoneCLEARSector20.0None1
112023-07-30 12:57:06DrsDRS DISABLEDDISABLEDNoneNoneNaNNone1
122023-07-30 13:03:46FlagGREEN LIGHT - PIT EXIT OPENNoneGREENTrackNaNNone1
132023-07-30 13:06:31FlagYELLOW IN TRACK SECTOR 14NoneYELLOWSector14.0None2
142023-07-30 13:06:39FlagDOUBLE YELLOW IN TRACK SECTOR 14NoneDOUBLE YELLOWSector14.0None2
152023-07-30 13:06:41FlagYELLOW IN TRACK SECTOR 13NoneYELLOWSector13.0None2
162023-07-30 13:07:24DrsDRS ENABLEDENABLEDNoneNoneNaNNone2
172023-07-30 13:08:06FlagCLEAR IN TRACK SECTOR 13NoneCLEARSector13.0None3
182023-07-30 13:08:06FlagCLEAR IN TRACK SECTOR 14NoneCLEARSector14.0None3
192023-07-30 13:08:20FlagDOUBLE YELLOW IN TRACK SECTOR 2NoneDOUBLE YELLOWSector2.0None3
202023-07-30 13:08:21OtherDRS DISABLED IN ZONE 2NoneNoneNoneNaNNone3
212023-07-30 13:08:26FlagCLEAR IN TRACK SECTOR 2NoneCLEARSector2.0None3
222023-07-30 13:08:26OtherDRS ENABLED IN ZONE 2NoneNoneNoneNaNNone3
232023-07-30 13:08:54OtherLAP 1 TURN 1 NOTEDNoneNoneNoneNaNNone3
242023-07-30 13:09:29OtherFIA STEWARDS: LAP 1 TURN 1 REVIEWED NO FURTHER INVESTIGATIONNoneNoneNoneNaNNone4
252023-07-30 13:13:35OtherCAR 20 (MAG) LAP DELETED - TRACK LIMITS AT TURN 11 LAP 5 15:12:39 (PIT)NoneNoneNoneNaNNone6
262023-07-30 13:22:28OtherCAR 2 (SAR) TIME 2:07.068 DELETED - TRACK LIMITS AT TURN 9 LAP 9 15:20:28NoneNoneNoneNaNNone10
272023-07-30 13:23:16OtherCAR 27 (HUL) TIME 1:54.655 DELETED - TRACK LIMITS AT TURN 11 LAP 10 15:22:16NoneNoneNoneNaNNone11
282023-07-30 13:24:58OtherCAR 55 (SAI) TIME 1:53.893 DELETED - TRACK LIMITS AT TURN 4 LAP 10 15:21:46NoneNoneNoneNaNNone12
292023-07-30 13:28:26OtherBETWEEN TURN 4 AND 5 INCIDENT INVOLVING CAR 44 (HAM) NOTED - WEAVING ON STRAIGHTNoneNoneNoneNaNNone14
302023-07-30 13:30:17OtherFIA STEWARDS: BETWEEN TURN 4 AND 5 INCIDENT INVOLVING CAR 44 (HAM) REVIEWED NO FURTHER INVESTIGATION - WEAVING ON STRAIGHTNoneNoneNoneNaNNone15
312023-07-30 13:31:03OtherCAR 22 (TSU) TIME 1:52.504 DELETED - TRACK LIMITS AT TURN 9 LAP 13 15:27:51NoneNoneNoneNaNNone15
322023-07-30 13:33:47OtherCAR 22 (TSU) TIME 1:52.963 DELETED - TRACK LIMITS AT TURN 9 LAP 14 15:29:44NoneNoneNoneNaNNone16
332023-07-30 13:40:37OtherTRACK SURFACE SLIPPERY IN TRACK SECTOR 12NoneNoneNoneNaNNone20
342023-07-30 13:40:39FlagCLEAR IN TRACK SECTOR 12NoneCLEARSector12.0None20
352023-07-30 13:43:33OtherCAR 1 (VER) TIME 1:54.915 DELETED - TRACK LIMITS AT TURN 4 LAP 21 15:41:55NoneNoneNoneNaNNone22
362023-07-30 13:43:39OtherTRACK SURFACE SLIPPERY IN TRACK SECTOR 20NoneNoneNoneNaNNone22
372023-07-30 13:43:39FlagCLEAR IN TRACK SECTOR 20NoneCLEARSector20.0None22
382023-07-30 13:44:44OtherCAR 55 (SAI) TIME 2:00.162 DELETED - TRACK LIMITS AT TURN 11 LAP 21 15:43:44NoneNoneNoneNaNNone22
392023-07-30 13:45:36OtherCAR 11 (PER) TIME 1:56.286 DELETED - TRACK LIMITS AT TURN 11 LAP 22 15:44:37NoneNoneNoneNaNNone23
402023-07-30 13:58:00OtherCAR 23 (ALB) TIME 1:52.076 DELETED - TRACK LIMITS AT TURN 9 LAP 28 15:56:43NoneNoneNoneNaNNone29
412023-07-30 14:07:20OtherCAR 2 (SAR) TIME 1:53.556 DELETED - TRACK LIMITS AT TURN 4 LAP 33 16:05:43NoneNoneNoneNaNNone34
422023-07-30 14:12:34OtherCAR 4 (NOR) TIME 1:52.433 DELETED - TRACK LIMITS AT TURN 4 LAP 36 16:10:59NoneNoneNoneNaNNone37
432023-07-30 14:13:11OtherCAR 2 (SAR) TIME 1:50.236 DELETED - TRACK LIMITS AT TURN 4 LAP 36 16:11:39NoneNoneNoneNaNNone37
442023-07-30 14:13:17FlagBLACK AND WHITE FLAG FOR CAR 2 (SAR) - TRACK LIMITSNoneBLACK AND WHITEDriverNaN237
452023-07-30 14:13:52OtherCAR 44 (HAM) TIME 1:51.428 DELETED - TRACK LIMITS AT TURN 9 LAP 37 16:12:51NoneNoneNoneNaNNone38
462023-07-30 14:16:07OtherCAR 3 (RIC) TIME 1:53.131 DELETED - TRACK LIMITS AT TURN 15 LAP 37 16:14:15NoneNoneNoneNaNNone39
472023-07-30 14:26:16FlagCHEQUERED FLAGNoneCHEQUEREDTrackNaNNone44
482023-07-30 14:26:25FlagYELLOW IN TRACK SECTOR 2NoneYELLOWSector2.0None44
492023-07-30 14:26:26OtherDRS DISABLED IN ZONE 2NoneNoneNoneNaNNone44
502023-07-30 14:28:26FlagDOUBLE YELLOW IN TRACK SECTOR 16NoneDOUBLE YELLOWSector16.0None44
512023-07-30 14:29:32FlagCLEAR IN TRACK SECTOR 16NoneCLEARSector16.0None44
522023-07-30 14:32:31OtherDRS ENABLED IN ZONE 2NoneNoneNoneNaNNone44
532023-07-30 14:32:31FlagCLEAR IN TRACK SECTOR 2NoneCLEARSector2.0None44
\n", - "
" - ], - "text/plain": [ - " Time Category \\\n", - "0 2023-07-30 12:06:58 Flag \n", - "1 2023-07-30 12:06:58 Other \n", - "2 2023-07-30 12:10:01 Flag \n", - "3 2023-07-30 12:20:01 Other \n", - "4 2023-07-30 12:29:37 Flag \n", - "5 2023-07-30 12:29:55 Flag \n", - "6 2023-07-30 12:30:49 Flag \n", - "7 2023-07-30 12:30:51 Flag \n", - "8 2023-07-30 12:45:11 Other \n", - "9 2023-07-30 12:52:15 Flag \n", - "10 2023-07-30 12:52:37 Flag \n", - "11 2023-07-30 12:57:06 Drs \n", - "12 2023-07-30 13:03:46 Flag \n", - "13 2023-07-30 13:06:31 Flag \n", - "14 2023-07-30 13:06:39 Flag \n", - "15 2023-07-30 13:06:41 Flag \n", - "16 2023-07-30 13:07:24 Drs \n", - "17 2023-07-30 13:08:06 Flag \n", - "18 2023-07-30 13:08:06 Flag \n", - "19 2023-07-30 13:08:20 Flag \n", - "20 2023-07-30 13:08:21 Other \n", - "21 2023-07-30 13:08:26 Flag \n", - "22 2023-07-30 13:08:26 Other \n", - "23 2023-07-30 13:08:54 Other \n", - "24 2023-07-30 13:09:29 Other \n", - "25 2023-07-30 13:13:35 Other \n", - "26 2023-07-30 13:22:28 Other \n", - "27 2023-07-30 13:23:16 Other \n", - "28 2023-07-30 13:24:58 Other \n", - "29 2023-07-30 13:28:26 Other \n", - "30 2023-07-30 13:30:17 Other \n", - "31 2023-07-30 13:31:03 Other \n", - "32 2023-07-30 13:33:47 Other \n", - "33 2023-07-30 13:40:37 Other \n", - "34 2023-07-30 13:40:39 Flag \n", - "35 2023-07-30 13:43:33 Other \n", - "36 2023-07-30 13:43:39 Other \n", - "37 2023-07-30 13:43:39 Flag \n", - "38 2023-07-30 13:44:44 Other \n", - "39 2023-07-30 13:45:36 Other \n", - "40 2023-07-30 13:58:00 Other \n", - "41 2023-07-30 14:07:20 Other \n", - "42 2023-07-30 14:12:34 Other \n", - "43 2023-07-30 14:13:11 Other \n", - "44 2023-07-30 14:13:17 Flag \n", - "45 2023-07-30 14:13:52 Other \n", - "46 2023-07-30 14:16:07 Other \n", - "47 2023-07-30 14:26:16 Flag \n", - "48 2023-07-30 14:26:25 Flag \n", - "49 2023-07-30 14:26:26 Other \n", - "50 2023-07-30 14:28:26 Flag \n", - "51 2023-07-30 14:29:32 Flag \n", - "52 2023-07-30 14:32:31 Other \n", - "53 2023-07-30 14:32:31 Flag \n", - "\n", - " Message \\\n", - "0 CLEAR IN TRACK SECTOR 5 \n", - "1 DRS ENABLED IN ZONE 1 \n", - "2 GREEN LIGHT - PIT EXIT OPEN \n", - "3 PIT EXIT CLOSED \n", - "4 DOUBLE YELLOW IN TRACK SECTOR 16 \n", - "5 DOUBLE YELLOW IN TRACK SECTOR 15 \n", - "6 CLEAR IN TRACK SECTOR 15 \n", - "7 CLEAR IN TRACK SECTOR 16 \n", - "8 RISK OF RAIN FOR F1 RACE IS 40% \n", - "9 YELLOW IN TRACK SECTOR 20 \n", - "10 CLEAR IN TRACK SECTOR 20 \n", - "11 DRS DISABLED \n", - "12 GREEN LIGHT - PIT EXIT OPEN \n", - "13 YELLOW IN TRACK SECTOR 14 \n", - "14 DOUBLE YELLOW IN TRACK SECTOR 14 \n", - "15 YELLOW IN TRACK SECTOR 13 \n", - "16 DRS ENABLED \n", - "17 CLEAR IN TRACK SECTOR 13 \n", - "18 CLEAR IN TRACK SECTOR 14 \n", - "19 DOUBLE YELLOW IN TRACK SECTOR 2 \n", - "20 DRS DISABLED IN ZONE 2 \n", - "21 CLEAR IN TRACK SECTOR 2 \n", - "22 DRS ENABLED IN ZONE 2 \n", - "23 LAP 1 TURN 1 NOTED \n", - "24 FIA STEWARDS: LAP 1 TURN 1 REVIEWED NO FURTHER INVESTIGATION \n", - "25 CAR 20 (MAG) LAP DELETED - TRACK LIMITS AT TURN 11 LAP 5 15:12:39 (PIT) \n", - "26 CAR 2 (SAR) TIME 2:07.068 DELETED - TRACK LIMITS AT TURN 9 LAP 9 15:20:28 \n", - "27 CAR 27 (HUL) TIME 1:54.655 DELETED - TRACK LIMITS AT TURN 11 LAP 10 15:22:16 \n", - "28 CAR 55 (SAI) TIME 1:53.893 DELETED - TRACK LIMITS AT TURN 4 LAP 10 15:21:46 \n", - "29 BETWEEN TURN 4 AND 5 INCIDENT INVOLVING CAR 44 (HAM) NOTED - WEAVING ON STRAIGHT \n", - "30 FIA STEWARDS: BETWEEN TURN 4 AND 5 INCIDENT INVOLVING CAR 44 (HAM) REVIEWED NO FURTHER INVESTIGATION - WEAVING ON STRAIGHT \n", - "31 CAR 22 (TSU) TIME 1:52.504 DELETED - TRACK LIMITS AT TURN 9 LAP 13 15:27:51 \n", - "32 CAR 22 (TSU) TIME 1:52.963 DELETED - TRACK LIMITS AT TURN 9 LAP 14 15:29:44 \n", - "33 TRACK SURFACE SLIPPERY IN TRACK SECTOR 12 \n", - "34 CLEAR IN TRACK SECTOR 12 \n", - "35 CAR 1 (VER) TIME 1:54.915 DELETED - TRACK LIMITS AT TURN 4 LAP 21 15:41:55 \n", - "36 TRACK SURFACE SLIPPERY IN TRACK SECTOR 20 \n", - "37 CLEAR IN TRACK SECTOR 20 \n", - "38 CAR 55 (SAI) TIME 2:00.162 DELETED - TRACK LIMITS AT TURN 11 LAP 21 15:43:44 \n", - "39 CAR 11 (PER) TIME 1:56.286 DELETED - TRACK LIMITS AT TURN 11 LAP 22 15:44:37 \n", - "40 CAR 23 (ALB) TIME 1:52.076 DELETED - TRACK LIMITS AT TURN 9 LAP 28 15:56:43 \n", - "41 CAR 2 (SAR) TIME 1:53.556 DELETED - TRACK LIMITS AT TURN 4 LAP 33 16:05:43 \n", - "42 CAR 4 (NOR) TIME 1:52.433 DELETED - TRACK LIMITS AT TURN 4 LAP 36 16:10:59 \n", - "43 CAR 2 (SAR) TIME 1:50.236 DELETED - TRACK LIMITS AT TURN 4 LAP 36 16:11:39 \n", - "44 BLACK AND WHITE FLAG FOR CAR 2 (SAR) - TRACK LIMITS \n", - "45 CAR 44 (HAM) TIME 1:51.428 DELETED - TRACK LIMITS AT TURN 9 LAP 37 16:12:51 \n", - "46 CAR 3 (RIC) TIME 1:53.131 DELETED - TRACK LIMITS AT TURN 15 LAP 37 16:14:15 \n", - "47 CHEQUERED FLAG \n", - "48 YELLOW IN TRACK SECTOR 2 \n", - "49 DRS DISABLED IN ZONE 2 \n", - "50 DOUBLE YELLOW IN TRACK SECTOR 16 \n", - "51 CLEAR IN TRACK SECTOR 16 \n", - "52 DRS ENABLED IN ZONE 2 \n", - "53 CLEAR IN TRACK SECTOR 2 \n", - "\n", - " Status Flag Scope Sector RacingNumber Lap \n", - "0 None CLEAR Sector 5.0 None 1 \n", - "1 None None None NaN None 1 \n", - "2 None GREEN Track NaN None 1 \n", - "3 None None None NaN None 1 \n", - "4 None DOUBLE YELLOW Sector 16.0 None 1 \n", - "5 None DOUBLE YELLOW Sector 15.0 None 1 \n", - "6 None CLEAR Sector 15.0 None 1 \n", - "7 None CLEAR Sector 16.0 None 1 \n", - "8 None None None NaN None 1 \n", - "9 None YELLOW Sector 20.0 None 1 \n", - "10 None CLEAR Sector 20.0 None 1 \n", - "11 DISABLED None None NaN None 1 \n", - "12 None GREEN Track NaN None 1 \n", - "13 None YELLOW Sector 14.0 None 2 \n", - "14 None DOUBLE YELLOW Sector 14.0 None 2 \n", - "15 None YELLOW Sector 13.0 None 2 \n", - "16 ENABLED None None NaN None 2 \n", - "17 None CLEAR Sector 13.0 None 3 \n", - "18 None CLEAR Sector 14.0 None 3 \n", - "19 None DOUBLE YELLOW Sector 2.0 None 3 \n", - "20 None None None NaN None 3 \n", - "21 None CLEAR Sector 2.0 None 3 \n", - "22 None None None NaN None 3 \n", - "23 None None None NaN None 3 \n", - "24 None None None NaN None 4 \n", - "25 None None None NaN None 6 \n", - "26 None None None NaN None 10 \n", - "27 None None None NaN None 11 \n", - "28 None None None NaN None 12 \n", - "29 None None None NaN None 14 \n", - "30 None None None NaN None 15 \n", - "31 None None None NaN None 15 \n", - "32 None None None NaN None 16 \n", - "33 None None None NaN None 20 \n", - "34 None CLEAR Sector 12.0 None 20 \n", - "35 None None None NaN None 22 \n", - "36 None None None NaN None 22 \n", - "37 None CLEAR Sector 20.0 None 22 \n", - "38 None None None NaN None 22 \n", - "39 None None None NaN None 23 \n", - "40 None None None NaN None 29 \n", - "41 None None None NaN None 34 \n", - "42 None None None NaN None 37 \n", - "43 None None None NaN None 37 \n", - "44 None BLACK AND WHITE Driver NaN 2 37 \n", - "45 None None None NaN None 38 \n", - "46 None None None NaN None 39 \n", - "47 None CHEQUERED Track NaN None 44 \n", - "48 None YELLOW Sector 2.0 None 44 \n", - "49 None None None NaN None 44 \n", - "50 None DOUBLE YELLOW Sector 16.0 None 44 \n", - "51 None CLEAR Sector 16.0 None 44 \n", - "52 None None None NaN None 44 \n", - "53 None CLEAR Sector 2.0 None 44 " - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "race_event.race_control_messages" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "402643c3-e960-471d-adc7-a4a491900065", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
TimeAirTempHumidityPressureRainfallTrackTempWindDirectionWindSpeed
00 days 00:00:23.48400017.066.0966.5False26.3832.5
10 days 00:01:23.45200017.065.0966.5False26.52691.3
20 days 00:02:23.46700017.066.0966.5False26.6811.2
30 days 00:03:23.46700017.066.0966.5False26.6920.6
40 days 00:04:23.46600017.065.0966.4False27.12151.2
...........................
1450 days 02:25:23.91900018.961.0966.7False28.41863.2
1460 days 02:26:23.91800018.761.0966.7False28.31332.0
1470 days 02:27:23.91700018.761.0966.7False28.01043.5
1480 days 02:28:23.91700018.559.0966.7False27.91913.5
1490 days 02:29:23.91600018.561.0966.7False27.702.0
\n", - "

150 rows × 8 columns

\n", - "
" - ], - "text/plain": [ - " Time AirTemp Humidity Pressure Rainfall TrackTemp \\\n", - "0 0 days 00:00:23.484000 17.0 66.0 966.5 False 26.3 \n", - "1 0 days 00:01:23.452000 17.0 65.0 966.5 False 26.5 \n", - "2 0 days 00:02:23.467000 17.0 66.0 966.5 False 26.6 \n", - "3 0 days 00:03:23.467000 17.0 66.0 966.5 False 26.6 \n", - "4 0 days 00:04:23.466000 17.0 65.0 966.4 False 27.1 \n", - ".. ... ... ... ... ... ... \n", - "145 0 days 02:25:23.919000 18.9 61.0 966.7 False 28.4 \n", - "146 0 days 02:26:23.918000 18.7 61.0 966.7 False 28.3 \n", - "147 0 days 02:27:23.917000 18.7 61.0 966.7 False 28.0 \n", - "148 0 days 02:28:23.917000 18.5 59.0 966.7 False 27.9 \n", - "149 0 days 02:29:23.916000 18.5 61.0 966.7 False 27.7 \n", - "\n", - " WindDirection WindSpeed \n", - "0 83 2.5 \n", - "1 269 1.3 \n", - "2 81 1.2 \n", - "3 92 0.6 \n", - "4 215 1.2 \n", - ".. ... ... \n", - "145 186 3.2 \n", - "146 133 2.0 \n", - "147 104 3.5 \n", - "148 191 3.5 \n", - "149 0 2.0 \n", - "\n", - "[150 rows x 8 columns]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "race_event.weather_data" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "b0c6ab4f-3b89-4810-bae4-a42adb63b65c", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Timestamp('2023-03-05 18:00:00+0300', tz='UTC+03:00')" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "event_schedule_2023.iloc[1].Session5Date" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "5c77f746-5b9b-4302-9ae8-db1869c9bf74", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "datetime.timedelta(seconds=3764, microseconds=614000)" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "race_event.session_start_time" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "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": 13, - "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": 14, - "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": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "driver_standings_2023 = ergast.get_driver_standings(season=2023)\n", - "driver_standings_2023" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.12.1" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/poetry.lock b/poetry.lock index 6893ae7..7774de7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -31,17 +31,6 @@ doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphin test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] trio = ["trio (>=0.23)"] -[[package]] -name = "appnope" -version = "0.1.3" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = "*" -files = [ - {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, - {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, -] - [[package]] name = "argcomplete" version = "3.2.2" @@ -56,111 +45,6 @@ files = [ [package.extras] test = ["coverage", "mypy", "pexpect", "ruff", "wheel"] -[[package]] -name = "argon2-cffi" -version = "23.1.0" -description = "Argon2 for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, - {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, -] - -[package.dependencies] -argon2-cffi-bindings = "*" - -[package.extras] -dev = ["argon2-cffi[tests,typing]", "tox (>4)"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] -tests = ["hypothesis", "pytest"] -typing = ["mypy"] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -description = "Low-level CFFI bindings for Argon2" -optional = false -python-versions = ">=3.6" -files = [ - {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, - {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, -] - -[package.dependencies] -cffi = ">=1.0.1" - -[package.extras] -dev = ["cogapp", "pre-commit", "pytest", "wheel"] -tests = ["pytest"] - -[[package]] -name = "arrow" -version = "1.3.0" -description = "Better dates & times for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "arrow-1.3.0-py3-none-any.whl", hash = "sha256:c728b120ebc00eb84e01882a6f5e7927a53960aa990ce7dd2b10f39005a67f80"}, - {file = "arrow-1.3.0.tar.gz", hash = "sha256:d4540617648cb5f895730f1ad8c82a65f2dad0166f57b75f3ca54759c4d67a85"}, -] - -[package.dependencies] -python-dateutil = ">=2.7.0" -types-python-dateutil = ">=2.8.10" - -[package.extras] -doc = ["doc8", "sphinx (>=7.0.0)", "sphinx-autobuild", "sphinx-autodoc-typehints", "sphinx_rtd_theme (>=1.3.0)"] -test = ["dateparser (==1.*)", "pre-commit", "pytest", "pytest-cov", "pytest-mock", "pytz (==2021.1)", "simplejson (==3.*)"] - -[[package]] -name = "asttokens" -version = "2.4.1" -description = "Annotate AST trees with source code positions" -optional = false -python-versions = "*" -files = [ - {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, - {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, -] - -[package.dependencies] -six = ">=1.12.0" - -[package.extras] -astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] -test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] - -[[package]] -name = "async-lru" -version = "2.0.4" -description = "Simple LRU cache for asyncio" -optional = false -python-versions = ">=3.8" -files = [ - {file = "async-lru-2.0.4.tar.gz", hash = "sha256:b8a59a5df60805ff63220b2a0c5b5393da5521b113cd5465a44eb037d81a5627"}, - {file = "async_lru-2.0.4-py3-none-any.whl", hash = "sha256:ff02944ce3c288c5be660c42dbcca0742b32c3b279d6dceda655190240b99224"}, -] - [[package]] name = "attrs" version = "23.2.0" @@ -180,41 +64,6 @@ tests = ["attrs[tests-no-zope]", "zope-interface"] tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] -[[package]] -name = "babel" -version = "2.14.0" -description = "Internationalization utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "Babel-2.14.0-py3-none-any.whl", hash = "sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287"}, - {file = "Babel-2.14.0.tar.gz", hash = "sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363"}, -] - -[package.extras] -dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] - -[[package]] -name = "beautifulsoup4" -version = "4.12.3" -description = "Screen-scraping library" -optional = false -python-versions = ">=3.6.0" -files = [ - {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"] - [[package]] name = "black" version = "24.1.1" @@ -259,24 +108,6 @@ d = ["aiohttp (>=3.7.4)", "aiohttp (>=3.7.4,!=3.9.0)"] jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] uvloop = ["uvloop (>=0.15.2)"] -[[package]] -name = "bleach" -version = "6.1.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.8" -files = [ - {file = "bleach-6.1.0-py3-none-any.whl", hash = "sha256:3225f354cfc436b9789c66c4ee030194bee0568fbf9cbdad3bc8b5c26c5f12b6"}, - {file = "bleach-6.1.0.tar.gz", hash = "sha256:0a31f1837963c41d46bbf1331b8778e1308ea0791db03cc4e7357b97cf42a8fe"}, -] - -[package.dependencies] -six = ">=1.9.0" -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.3)"] - [[package]] name = "cattrs" version = "23.2.3" @@ -311,70 +142,6 @@ files = [ {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, ] -[[package]] -name = "cffi" -version = "1.16.0" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, - {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, - {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, - {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, - {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, - {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, - {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, - {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, - {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, - {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, - {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, - {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, - {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, - {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, - {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, -] - -[package.dependencies] -pycparser = "*" - [[package]] name = "cfgv" version = "3.4.0" @@ -510,23 +277,6 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] -[[package]] -name = "comm" -version = "0.2.1" -description = "Jupyter Python Comm implementation, for usage in ipykernel, xeus-python etc." -optional = false -python-versions = ">=3.8" -files = [ - {file = "comm-0.2.1-py3-none-any.whl", hash = "sha256:87928485c0dfc0e7976fd89fc1e187023cf587e7c353e4a9b417555b44adf021"}, - {file = "comm-0.2.1.tar.gz", hash = "sha256:0bc91edae1344d39d3661dcbc36937181fdaddb304790458f8b044dbc064b89a"}, -] - -[package.dependencies] -traitlets = ">=4" - -[package.extras] -test = ["pytest"] - [[package]] name = "commitizen" version = "3.14.1" @@ -629,33 +379,6 @@ files = [ docs = ["ipython", "matplotlib", "numpydoc", "sphinx"] tests = ["pytest", "pytest-cov", "pytest-xdist"] -[[package]] -name = "debugpy" -version = "1.8.0" -description = "An implementation of the Debug Adapter Protocol for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "debugpy-1.8.0-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:7fb95ca78f7ac43393cd0e0f2b6deda438ec7c5e47fa5d38553340897d2fbdfb"}, - {file = "debugpy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef9ab7df0b9a42ed9c878afd3eaaff471fce3fa73df96022e1f5c9f8f8c87ada"}, - {file = "debugpy-1.8.0-cp310-cp310-win32.whl", hash = "sha256:a8b7a2fd27cd9f3553ac112f356ad4ca93338feadd8910277aff71ab24d8775f"}, - {file = "debugpy-1.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:5d9de202f5d42e62f932507ee8b21e30d49aae7e46d5b1dd5c908db1d7068637"}, - {file = "debugpy-1.8.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:ef54404365fae8d45cf450d0544ee40cefbcb9cb85ea7afe89a963c27028261e"}, - {file = "debugpy-1.8.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60009b132c91951354f54363f8ebdf7457aeb150e84abba5ae251b8e9f29a8a6"}, - {file = "debugpy-1.8.0-cp311-cp311-win32.whl", hash = "sha256:8cd0197141eb9e8a4566794550cfdcdb8b3db0818bdf8c49a8e8f8053e56e38b"}, - {file = "debugpy-1.8.0-cp311-cp311-win_amd64.whl", hash = "sha256:a64093656c4c64dc6a438e11d59369875d200bd5abb8f9b26c1f5f723622e153"}, - {file = "debugpy-1.8.0-cp38-cp38-macosx_11_0_x86_64.whl", hash = "sha256:b05a6b503ed520ad58c8dc682749113d2fd9f41ffd45daec16e558ca884008cd"}, - {file = "debugpy-1.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c6fb41c98ec51dd010d7ed650accfd07a87fe5e93eca9d5f584d0578f28f35f"}, - {file = "debugpy-1.8.0-cp38-cp38-win32.whl", hash = "sha256:46ab6780159eeabb43c1495d9c84cf85d62975e48b6ec21ee10c95767c0590aa"}, - {file = "debugpy-1.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:bdc5ef99d14b9c0fcb35351b4fbfc06ac0ee576aeab6b2511702e5a648a2e595"}, - {file = "debugpy-1.8.0-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:61eab4a4c8b6125d41a34bad4e5fe3d2cc145caecd63c3fe953be4cc53e65bf8"}, - {file = "debugpy-1.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:125b9a637e013f9faac0a3d6a82bd17c8b5d2c875fb6b7e2772c5aba6d082332"}, - {file = "debugpy-1.8.0-cp39-cp39-win32.whl", hash = "sha256:57161629133113c97b387382045649a2b985a348f0c9366e22217c87b68b73c6"}, - {file = "debugpy-1.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:e3412f9faa9ade82aa64a50b602544efcba848c91384e9f93497a458767e6926"}, - {file = "debugpy-1.8.0-py2.py3-none-any.whl", hash = "sha256:9c9b0ac1ce2a42888199df1a1906e45e6f3c9555497643a85e0bf2406e3ffbc4"}, - {file = "debugpy-1.8.0.zip", hash = "sha256:12af2c55b419521e33d5fb21bd022df0b5eb267c3e178f1d374a63a2a6bdccd0"}, -] - [[package]] name = "decli" version = "0.6.1" @@ -667,28 +390,6 @@ files = [ {file = "decli-0.6.1.tar.gz", hash = "sha256:ed88ccb947701e8e5509b7945fda56e150e2ac74a69f25d47ac85ef30ab0c0f0"}, ] -[[package]] -name = "decorator" -version = "5.1.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.5" -files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - [[package]] name = "distlib" version = "0.3.8" @@ -700,20 +401,6 @@ files = [ {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, ] -[[package]] -name = "executing" -version = "2.0.1" -description = "Get the currently executing AST node of a frame, and other information" -optional = false -python-versions = ">=3.5" -files = [ - {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, - {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, -] - -[package.extras] -tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] - [[package]] name = "fastapi" version = "0.109.2" @@ -756,20 +443,6 @@ thefuzz = "*" timple = ">=0.1.6" websockets = ">=10.3" -[[package]] -name = "fastjsonschema" -version = "2.19.1" -description = "Fastest Python implementation of JSON schema" -optional = false -python-versions = "*" -files = [ - {file = "fastjsonschema-2.19.1-py3-none-any.whl", hash = "sha256:3672b47bc94178c9f23dbb654bf47440155d4db9df5f7bc47643315f9c405cd0"}, - {file = "fastjsonschema-2.19.1.tar.gz", hash = "sha256:e3126a94bdc4623d3de4485f8d468a12f02a67921315ddc87836d6e456dc789d"}, -] - -[package.extras] -devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benchmark", "pytest-cache", "validictory"] - [[package]] name = "filelock" version = "3.13.1" @@ -788,60 +461,60 @@ typing = ["typing-extensions (>=4.8)"] [[package]] name = "fonttools" -version = "4.47.2" +version = "4.48.1" description = "Tools to manipulate font files" optional = false python-versions = ">=3.8" files = [ - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3b629108351d25512d4ea1a8393a2dba325b7b7d7308116b605ea3f8e1be88df"}, - {file = "fonttools-4.47.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c19044256c44fe299d9a73456aabee4b4d06c6b930287be93b533b4737d70aa1"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b8be28c036b9f186e8c7eaf8a11b42373e7e4949f9e9f370202b9da4c4c3f56c"}, - {file = "fonttools-4.47.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f83a4daef6d2a202acb9bf572958f91cfde5b10c8ee7fb1d09a4c81e5d851fd8"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a5a5318ba5365d992666ac4fe35365f93004109d18858a3e18ae46f67907670"}, - {file = "fonttools-4.47.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8f57ecd742545362a0f7186774b2d1c53423ed9ece67689c93a1055b236f638c"}, - {file = "fonttools-4.47.2-cp310-cp310-win32.whl", hash = "sha256:a1c154bb85dc9a4cf145250c88d112d88eb414bad81d4cb524d06258dea1bdc0"}, - {file = "fonttools-4.47.2-cp310-cp310-win_amd64.whl", hash = "sha256:3e2b95dce2ead58fb12524d0ca7d63a63459dd489e7e5838c3cd53557f8933e1"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:29495d6d109cdbabe73cfb6f419ce67080c3ef9ea1e08d5750240fd4b0c4763b"}, - {file = "fonttools-4.47.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0a1d313a415eaaba2b35d6cd33536560deeebd2ed758b9bfb89ab5d97dc5deac"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90f898cdd67f52f18049250a6474185ef6544c91f27a7bee70d87d77a8daf89c"}, - {file = "fonttools-4.47.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3480eeb52770ff75140fe7d9a2ec33fb67b07efea0ab5129c7e0c6a639c40c70"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0255dbc128fee75fb9be364806b940ed450dd6838672a150d501ee86523ac61e"}, - {file = "fonttools-4.47.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:f791446ff297fd5f1e2247c188de53c1bfb9dd7f0549eba55b73a3c2087a2703"}, - {file = "fonttools-4.47.2-cp311-cp311-win32.whl", hash = "sha256:740947906590a878a4bde7dd748e85fefa4d470a268b964748403b3ab2aeed6c"}, - {file = "fonttools-4.47.2-cp311-cp311-win_amd64.whl", hash = "sha256:63fbed184979f09a65aa9c88b395ca539c94287ba3a364517698462e13e457c9"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4ec558c543609e71b2275c4894e93493f65d2f41c15fe1d089080c1d0bb4d635"}, - {file = "fonttools-4.47.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e040f905d542362e07e72e03612a6270c33d38281fd573160e1003e43718d68d"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dd58cc03016b281bd2c74c84cdaa6bd3ce54c5a7f47478b7657b930ac3ed8eb"}, - {file = "fonttools-4.47.2-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32ab2e9702dff0dd4510c7bb958f265a8d3dd5c0e2547e7b5f7a3df4979abb07"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3a808f3c1d1df1f5bf39be869b6e0c263570cdafb5bdb2df66087733f566ea71"}, - {file = "fonttools-4.47.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ac71e2e201df041a2891067dc36256755b1229ae167edbdc419b16da78732c2f"}, - {file = "fonttools-4.47.2-cp312-cp312-win32.whl", hash = "sha256:69731e8bea0578b3c28fdb43dbf95b9386e2d49a399e9a4ad736b8e479b08085"}, - {file = "fonttools-4.47.2-cp312-cp312-win_amd64.whl", hash = "sha256:b3e1304e5f19ca861d86a72218ecce68f391646d85c851742d265787f55457a4"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:254d9a6f7be00212bf0c3159e0a420eb19c63793b2c05e049eb337f3023c5ecc"}, - {file = "fonttools-4.47.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:eabae77a07c41ae0b35184894202305c3ad211a93b2eb53837c2a1143c8bc952"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a86a5ab2873ed2575d0fcdf1828143cfc6b977ac448e3dc616bb1e3d20efbafa"}, - {file = "fonttools-4.47.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13819db8445a0cec8c3ff5f243af6418ab19175072a9a92f6cc8ca7d1452754b"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:4e743935139aa485fe3253fc33fe467eab6ea42583fa681223ea3f1a93dd01e6"}, - {file = "fonttools-4.47.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d49ce3ea7b7173faebc5664872243b40cf88814ca3eb135c4a3cdff66af71946"}, - {file = "fonttools-4.47.2-cp38-cp38-win32.whl", hash = "sha256:94208ea750e3f96e267f394d5588579bb64cc628e321dbb1d4243ffbc291b18b"}, - {file = "fonttools-4.47.2-cp38-cp38-win_amd64.whl", hash = "sha256:0f750037e02beb8b3569fbff701a572e62a685d2a0e840d75816592280e5feae"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:3d71606c9321f6701642bd4746f99b6089e53d7e9817fc6b964e90d9c5f0ecc6"}, - {file = "fonttools-4.47.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:86e0427864c6c91cf77f16d1fb9bf1bbf7453e824589e8fb8461b6ee1144f506"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a00bd0e68e88987dcc047ea31c26d40a3c61185153b03457956a87e39d43c37"}, - {file = "fonttools-4.47.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5d77479fb885ef38a16a253a2f4096bc3d14e63a56d6246bfdb56365a12b20c"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5465df494f20a7d01712b072ae3ee9ad2887004701b95cb2cc6dcb9c2c97a899"}, - {file = "fonttools-4.47.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4c811d3c73b6abac275babb8aa439206288f56fdb2c6f8835e3d7b70de8937a7"}, - {file = "fonttools-4.47.2-cp39-cp39-win32.whl", hash = "sha256:5b60e3afa9635e3dfd3ace2757039593e3bd3cf128be0ddb7a1ff4ac45fa5a50"}, - {file = "fonttools-4.47.2-cp39-cp39-win_amd64.whl", hash = "sha256:7ee48bd9d6b7e8f66866c9090807e3a4a56cf43ffad48962725a190e0dd774c8"}, - {file = "fonttools-4.47.2-py3-none-any.whl", hash = "sha256:7eb7ad665258fba68fd22228a09f347469d95a97fb88198e133595947a20a184"}, - {file = "fonttools-4.47.2.tar.gz", hash = "sha256:7df26dd3650e98ca45f1e29883c96a0b9f5bb6af8d632a6a108bc744fa0bd9b3"}, -] - -[package.extras] -all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0,<5)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] + {file = "fonttools-4.48.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:702ae93058c81f46461dc4b2c79f11d3c3d8fd7296eaf8f75b4ba5bbf813cd5f"}, + {file = "fonttools-4.48.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:97f0a49fa6aa2d6205c6f72f4f98b74ef4b9bfdcb06fd78e6fe6c7af4989b63e"}, + {file = "fonttools-4.48.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3260db55f1843e57115256e91247ad9f68cb02a434b51262fe0019e95a98738"}, + {file = "fonttools-4.48.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e740a7602c2bb71e1091269b5dbe89549749a8817dc294b34628ffd8b2bf7124"}, + {file = "fonttools-4.48.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4108b1d247953dd7c90ec8f457a2dec5fceb373485973cc852b14200118a51ee"}, + {file = "fonttools-4.48.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:56339ec557f0c342bddd7c175f5e41c45fc21282bee58a86bd9aa322bec715f2"}, + {file = "fonttools-4.48.1-cp310-cp310-win32.whl", hash = "sha256:bff5b38d0e76eb18e0b8abbf35d384e60b3371be92f7be36128ee3e67483b3ec"}, + {file = "fonttools-4.48.1-cp310-cp310-win_amd64.whl", hash = "sha256:f7449493886da6a17472004d3818cc050ba3f4a0aa03fb47972e4fa5578e6703"}, + {file = "fonttools-4.48.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:18b35fd1a850ed7233a99bbd6774485271756f717dac8b594958224b54118b61"}, + {file = "fonttools-4.48.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cad5cfd044ea2e306fda44482b3dd32ee47830fa82dfa4679374b41baa294f5f"}, + {file = "fonttools-4.48.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f30e605c7565d0da6f0aec75a30ec372072d016957cd8fc4469721a36ea59b7"}, + {file = "fonttools-4.48.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aee76fd81a8571c68841d6ef0da750d5ff08ff2c5f025576473016f16ac3bcf7"}, + {file = "fonttools-4.48.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:5057ade278e67923000041e2b195c9ea53e87f227690d499b6a4edd3702f7f01"}, + {file = "fonttools-4.48.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b10633aafc5932995a391ec07eba5e79f52af0003a1735b2306b3dab8a056d48"}, + {file = "fonttools-4.48.1-cp311-cp311-win32.whl", hash = "sha256:0d533f89819f9b3ee2dbedf0fed3825c425850e32bdda24c558563c71be0064e"}, + {file = "fonttools-4.48.1-cp311-cp311-win_amd64.whl", hash = "sha256:d20588466367f05025bb1efdf4e5d498ca6d14bde07b6928b79199c588800f0a"}, + {file = "fonttools-4.48.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0a2417547462e468edf35b32e3dd06a6215ac26aa6316b41e03b8eeaf9f079ea"}, + {file = "fonttools-4.48.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cf5a0cd974f85a80b74785db2d5c3c1fd6cc09a2ba3c837359b2b5da629ee1b0"}, + {file = "fonttools-4.48.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0452fcbfbce752ba596737a7c5ec5cf76bc5f83847ce1781f4f90eab14ece252"}, + {file = "fonttools-4.48.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578c00f93868f64a4102ecc5aa600a03b49162c654676c3fadc33de2ddb88a81"}, + {file = "fonttools-4.48.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:63dc592a16cd08388d8c4c7502b59ac74190b23e16dfc863c69fe1ea74605b68"}, + {file = "fonttools-4.48.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9b58638d8a85e3a1b32ec0a91d9f8171a877b4b81c408d4cb3257d0dee63e092"}, + {file = "fonttools-4.48.1-cp312-cp312-win32.whl", hash = "sha256:d10979ef14a8beaaa32f613bb698743f7241d92f437a3b5e32356dfb9769c65d"}, + {file = "fonttools-4.48.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdfd7557d1bd294a200bd211aa665ca3b02998dcc18f8211a5532da5b8fad5c5"}, + {file = "fonttools-4.48.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3cdb9a92521b81bf717ebccf592bd0292e853244d84115bfb4db0c426de58348"}, + {file = "fonttools-4.48.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9b4ec6d42a7555f5ae35f3b805482f0aad0f1baeeef54859492ea3b782959d4a"}, + {file = "fonttools-4.48.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:902e9c4e9928301912f34a6638741b8ae0b64824112b42aaf240e06b735774b1"}, + {file = "fonttools-4.48.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8c8b54bd1420c184a995f980f1a8076f87363e2bb24239ef8c171a369d85a31"}, + {file = "fonttools-4.48.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:12ee86abca46193359ea69216b3a724e90c66ab05ab220d39e3fc068c1eb72ac"}, + {file = "fonttools-4.48.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6978bade7b6c0335095bdd0bd97f8f3d590d2877b370f17e03e0865241694eb5"}, + {file = "fonttools-4.48.1-cp38-cp38-win32.whl", hash = "sha256:bcd77f89fc1a6b18428e7a55dde8ef56dae95640293bfb8f4e929929eba5e2a2"}, + {file = "fonttools-4.48.1-cp38-cp38-win_amd64.whl", hash = "sha256:f40441437b039930428e04fb05ac3a132e77458fb57666c808d74a556779e784"}, + {file = "fonttools-4.48.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0d2b01428f7da26f229a5656defc824427b741e454b4e210ad2b25ed6ea2aed4"}, + {file = "fonttools-4.48.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:df48798f9a4fc4c315ab46e17873436c8746f5df6eddd02fad91299b2af7af95"}, + {file = "fonttools-4.48.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2eb4167bde04e172a93cf22c875d8b0cff76a2491f67f5eb069566215302d45d"}, + {file = "fonttools-4.48.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c900508c46274d32d308ae8e82335117f11aaee1f7d369ac16502c9a78930b0a"}, + {file = "fonttools-4.48.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:594206b31c95fcfa65f484385171fabb4ec69f7d2d7f56d27f17db26b7a31814"}, + {file = "fonttools-4.48.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:292922dc356d7f11f5063b4111a8b719efb8faea92a2a88ed296408d449d8c2e"}, + {file = "fonttools-4.48.1-cp39-cp39-win32.whl", hash = "sha256:4709c5bf123ba10eac210d2d5c9027d3f472591d9f1a04262122710fa3d23199"}, + {file = "fonttools-4.48.1-cp39-cp39-win_amd64.whl", hash = "sha256:63c73b9dd56a94a3cbd2f90544b5fca83666948a9e03370888994143b8d7c070"}, + {file = "fonttools-4.48.1-py3-none-any.whl", hash = "sha256:e3e33862fc5261d46d9aae3544acb36203b1a337d00bdb5d3753aae50dac860e"}, + {file = "fonttools-4.48.1.tar.gz", hash = "sha256:8b8a45254218679c7f1127812761e7854ed5c8e34349aebf581e8c9204e7495a"}, +] + +[package.extras] +all = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "fs (>=2.2.0,<3)", "lxml (>=4.0)", "lz4 (>=1.7.4.2)", "matplotlib", "munkres", "pycairo", "scipy", "skia-pathops (>=0.5.0)", "sympy", "uharfbuzz (>=0.23.0)", "unicodedata2 (>=15.1.0)", "xattr", "zopfli (>=0.1.4)"] graphite = ["lz4 (>=1.7.4.2)"] interpolatable = ["munkres", "pycairo", "scipy"] -lxml = ["lxml (>=4.0,<5)"] +lxml = ["lxml (>=4.0)"] pathops = ["skia-pathops (>=0.5.0)"] plot = ["matplotlib"] repacker = ["uharfbuzz (>=0.23.0)"] @@ -851,17 +524,6 @@ ufo = ["fs (>=2.2.0,<3)"] unicode = ["unicodedata2 (>=15.1.0)"] woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] -[[package]] -name = "fqdn" -version = "1.5.1" -description = "Validates fully-qualified domain names against RFC 1123, so that they are acceptable to modern bowsers" -optional = false -python-versions = ">=2.7, !=3.0, !=3.1, !=3.2, !=3.3, !=3.4, <4" -files = [ - {file = "fqdn-1.5.1-py3-none-any.whl", hash = "sha256:3a179af3761e4df6eb2e026ff9e1a3033d3587bf980a0b1b2e1e5d08d7358014"}, - {file = "fqdn-1.5.1.tar.gz", hash = "sha256:105ed3677e767fb5ca086a0c1f4bb66ebc3c100be518f0e0d755d9eae164d89f"}, -] - [[package]] name = "h11" version = "0.14.0" @@ -1021,88 +683,6 @@ files = [ {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, ] -[[package]] -name = "ipykernel" -version = "6.29.1" -description = "IPython Kernel for Jupyter" -optional = false -python-versions = ">=3.8" -files = [ - {file = "ipykernel-6.29.1-py3-none-any.whl", hash = "sha256:e5dfba210fc9da74a5dae8fa6c41f816e11bd18d10381b2517d9a0d57cc987c4"}, - {file = "ipykernel-6.29.1.tar.gz", hash = "sha256:1547352b32da95a2761011a8dac2af930c26a0703dfa07690d16b7d74dac0ba1"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "platform_system == \"Darwin\""} -comm = ">=0.1.1" -debugpy = ">=1.6.5" -ipython = ">=7.23.1" -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -matplotlib-inline = ">=0.1" -nest-asyncio = "*" -packaging = "*" -psutil = "*" -pyzmq = ">=24" -tornado = ">=6.1" -traitlets = ">=5.4.0" - -[package.extras] -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 (==0.23.4)", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "ipython" -version = "8.18.0" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.9" -files = [ - {file = "ipython-8.18.0-py3-none-any.whl", hash = "sha256:d538a7a98ad9b7e018926447a5f35856113a85d08fd68a165d7871ab5175f6e0"}, - {file = "ipython-8.18.0.tar.gz", hash = "sha256:4feb61210160f75e229ce932dbf8b719bff37af123c0b985fd038b14233daa16"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" -pygments = ">=2.4.0" -stack-data = "*" -traitlets = ">=5" - -[package.extras] -all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] -black = ["black"] -doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] - -[[package]] -name = "isoduration" -version = "20.11.0" -description = "Operations with ISO 8601 durations" -optional = false -python-versions = ">=3.7" -files = [ - {file = "isoduration-20.11.0-py3-none-any.whl", hash = "sha256:b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042"}, - {file = "isoduration-20.11.0.tar.gz", hash = "sha256:ac2f9015137935279eac671f94f89eb00584f940f5dc49462a0c4ee692ba1bd9"}, -] - -[package.dependencies] -arrow = ">=0.15.0" - [[package]] name = "isort" version = "5.13.2" @@ -1117,25 +697,6 @@ files = [ [package.extras] colors = ["colorama (>=0.4.6)"] -[[package]] -name = "jedi" -version = "0.19.1" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -files = [ - {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, - {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, -] - -[package.dependencies] -parso = ">=0.8.3,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] - [[package]] name = "jinja2" version = "3.1.3" @@ -1153,296 +714,6 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] -[[package]] -name = "json5" -version = "0.9.14" -description = "A Python implementation of the JSON5 data format." -optional = false -python-versions = "*" -files = [ - {file = "json5-0.9.14-py2.py3-none-any.whl", hash = "sha256:740c7f1b9e584a468dbb2939d8d458db3427f2c93ae2139d05f47e453eae964f"}, - {file = "json5-0.9.14.tar.gz", hash = "sha256:9ed66c3a6ca3510a976a9ef9b8c0787de24802724ab1860bc0153c7fdd589b02"}, -] - -[package.extras] -dev = ["hypothesis"] - -[[package]] -name = "jsonpointer" -version = "2.4" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, !=3.6.*" -files = [ - {file = "jsonpointer-2.4-py2.py3-none-any.whl", hash = "sha256:15d51bba20eea3165644553647711d150376234112651b4f1811022aecad7d7a"}, - {file = "jsonpointer-2.4.tar.gz", hash = "sha256:585cee82b70211fa9e6043b7bb89db6e1aa49524340dde8ad6b63206ea689d88"}, -] - -[[package]] -name = "jsonschema" -version = "4.21.1" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema-4.21.1-py3-none-any.whl", hash = "sha256:7996507afae316306f9e2290407761157c6f78002dcf7419acb99822143d1c6f"}, - {file = "jsonschema-4.21.1.tar.gz", hash = "sha256:85727c00279f5fa6bedbe6238d2aa6403bedd8b4864ab11207d07df3cc1b2ee5"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -fqdn = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -idna = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -isoduration = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -jsonpointer = {version = ">1.13", optional = true, markers = "extra == \"format-nongpl\""} -jsonschema-specifications = ">=2023.03.6" -referencing = ">=0.28.4" -rfc3339-validator = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -rfc3986-validator = {version = ">0.1.0", optional = true, markers = "extra == \"format-nongpl\""} -rpds-py = ">=0.7.1" -uri-template = {version = "*", optional = true, markers = "extra == \"format-nongpl\""} -webcolors = {version = ">=1.11", optional = true, markers = "extra == \"format-nongpl\""} - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "uri-template", "webcolors (>=1.11)"] - -[[package]] -name = "jsonschema-specifications" -version = "2023.12.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jsonschema_specifications-2023.12.1-py3-none-any.whl", hash = "sha256:87e4fdf3a94858b8a2ba2778d9ba57d8a9cafca7c7489c46ba0d30a8bc6a9c3c"}, - {file = "jsonschema_specifications-2023.12.1.tar.gz", hash = "sha256:48a76787b3e70f5ed53f1160d2b81f586e4ca6d1548c5de7085d1682674764cc"}, -] - -[package.dependencies] -referencing = ">=0.31.0" - -[[package]] -name = "jupyter-client" -version = "8.6.0" -description = "Jupyter protocol implementation and client libraries" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_client-8.6.0-py3-none-any.whl", hash = "sha256:909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99"}, - {file = "jupyter_client-8.6.0.tar.gz", hash = "sha256:0642244bb83b4764ae60d07e010e15f0e2d275ec4e918a8f7b80fbbef3ca60c7"}, -] - -[package.dependencies] -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -python-dateutil = ">=2.8.2" -pyzmq = ">=23.0" -tornado = ">=6.2" -traitlets = ">=5.3" - -[package.extras] -docs = ["ipykernel", "myst-parser", "pydata-sphinx-theme", "sphinx (>=4)", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["coverage", "ipykernel (>=6.14)", "mypy", "paramiko", "pre-commit", "pytest", "pytest-cov", "pytest-jupyter[client] (>=0.4.1)", "pytest-timeout"] - -[[package]] -name = "jupyter-core" -version = "5.7.1" -description = "Jupyter core package. A base package on which Jupyter projects rely." -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_core-5.7.1-py3-none-any.whl", hash = "sha256:c65c82126453a723a2804aa52409930434598fd9d35091d63dfb919d2b765bb7"}, - {file = "jupyter_core-5.7.1.tar.gz", hash = "sha256:de61a9d7fc71240f688b2fb5ab659fbb56979458dc66a71decd098e03c79e218"}, -] - -[package.dependencies] -platformdirs = ">=2.5" -pywin32 = {version = ">=300", markers = "sys_platform == \"win32\" and platform_python_implementation != \"PyPy\""} -traitlets = ">=5.3" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-spelling", "traitlets"] -test = ["ipykernel", "pre-commit", "pytest", "pytest-cov", "pytest-timeout"] - -[[package]] -name = "jupyter-events" -version = "0.9.0" -description = "Jupyter Event System library" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_events-0.9.0-py3-none-any.whl", hash = "sha256:d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf"}, - {file = "jupyter_events-0.9.0.tar.gz", hash = "sha256:81ad2e4bc710881ec274d31c6c50669d71bbaa5dd9d01e600b56faa85700d399"}, -] - -[package.dependencies] -jsonschema = {version = ">=4.18.0", extras = ["format-nongpl"]} -python-json-logger = ">=2.0.4" -pyyaml = ">=5.3" -referencing = "*" -rfc3339-validator = "*" -rfc3986-validator = ">=0.1.1" -traitlets = ">=5.3" - -[package.extras] -cli = ["click", "rich"] -docs = ["jupyterlite-sphinx", "myst-parser", "pydata-sphinx-theme", "sphinxcontrib-spelling"] -test = ["click", "pre-commit", "pytest (>=7.0)", "pytest-asyncio (>=0.19.0)", "pytest-console-scripts", "rich"] - -[[package]] -name = "jupyter-lsp" -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.2.tar.gz", hash = "sha256:256d24620542ae4bba04a50fc1f6ffe208093a07d8e697fea0a8d1b8ca1b7e5b"}, - {file = "jupyter_lsp-2.2.2-py3-none-any.whl", hash = "sha256:3b95229e4168355a8c91928057c1621ac3510ba98b2a925e82ebd77f078b1aa5"}, -] - -[package.dependencies] -jupyter-server = ">=1.1.2" - -[[package]] -name = "jupyter-server" -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.5-py3-none-any.whl", hash = "sha256:184a0f82809a8522777cfb6b760ab6f4b1bb398664c5860a27cec696cb884923"}, - {file = "jupyter_server-2.12.5.tar.gz", hash = "sha256:0edb626c94baa22809be1323f9770cf1c00a952b17097592e40d03e6a3951689"}, -] - -[package.dependencies] -anyio = ">=3.1.0" -argon2-cffi = "*" -jinja2 = "*" -jupyter-client = ">=7.4.4" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -jupyter-events = ">=0.9.0" -jupyter-server-terminals = "*" -nbconvert = ">=6.4.4" -nbformat = ">=5.3.0" -overrides = "*" -packaging = "*" -prometheus-client = "*" -pywinpty = {version = "*", markers = "os_name == \"nt\""} -pyzmq = ">=24" -send2trash = ">=1.8.2" -terminado = ">=0.8.3" -tornado = ">=6.2.0" -traitlets = ">=5.6.0" -websocket-client = "*" - -[package.extras] -docs = ["ipykernel", "jinja2", "jupyter-client", "jupyter-server", "myst-parser", "nbformat", "prometheus-client", "pydata-sphinx-theme", "send2trash", "sphinx-autodoc-typehints", "sphinxcontrib-github-alt", "sphinxcontrib-openapi (>=0.8.0)", "sphinxcontrib-spelling", "sphinxemoji", "tornado", "typing-extensions"] -test = ["flaky", "ipykernel", "pre-commit", "pytest (>=7.0)", "pytest-console-scripts", "pytest-jupyter[server] (>=0.4)", "pytest-timeout", "requests"] - -[[package]] -name = "jupyter-server-terminals" -version = "0.5.2" -description = "A Jupyter Server Extension Providing Terminals." -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyter_server_terminals-0.5.2-py3-none-any.whl", hash = "sha256:1b80c12765da979513c42c90215481bbc39bd8ae7c0350b4f85bc3eb58d0fa80"}, - {file = "jupyter_server_terminals-0.5.2.tar.gz", hash = "sha256:396b5ccc0881e550bf0ee7012c6ef1b53edbde69e67cab1d56e89711b46052e8"}, -] - -[package.dependencies] -pywinpty = {version = ">=2.0.3", markers = "os_name == \"nt\""} -terminado = ">=0.8.3" - -[package.extras] -docs = ["jinja2", "jupyter-server", "mistune (<4.0)", "myst-parser", "nbformat", "packaging", "pydata-sphinx-theme", "sphinxcontrib-github-alt", "sphinxcontrib-openapi", "sphinxcontrib-spelling", "sphinxemoji", "tornado"] -test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (>=0.5.3)", "pytest-timeout"] - -[[package]] -name = "jupyterlab" -version = "4.1.0" -description = "JupyterLab computational environment" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyterlab-4.1.0-py3-none-any.whl", hash = "sha256:5380e85fb4f11a227ed2db13103e513cfea274d1011f6210e62d611e92e0369d"}, - {file = "jupyterlab-4.1.0.tar.gz", hash = "sha256:92cdfd86c53e163fb9e91e14497901153536c5a889c9225dade270f6107a077f"}, -] - -[package.dependencies] -async-lru = ">=1.0.0" -httpx = ">=0.25.0" -ipykernel = "*" -jinja2 = ">=3.0.3" -jupyter-core = "*" -jupyter-lsp = ">=2.0.0" -jupyter-server = ">=2.4.0,<3" -jupyterlab-server = ">=2.19.0,<3" -notebook-shim = ">=0.2" -packaging = "*" -tornado = ">=6.2.0" -traitlets = "*" - -[package.extras] -dev = ["build", "bump2version", "coverage", "hatch", "pre-commit", "pytest-cov", "ruff (==0.1.15)"] -docs = ["jsx-lexer", "myst-parser", "pydata-sphinx-theme (>=0.13.0)", "pytest", "pytest-check-links", "pytest-jupyter", "sphinx (>=1.8,<7.3.0)", "sphinx-copybutton"] -docs-screenshots = ["altair (==5.2.0)", "ipython (==8.16.1)", "ipywidgets (==8.1.1)", "jupyterlab-geojson (==3.4.0)", "jupyterlab-language-pack-zh-cn (==4.0.post6)", "matplotlib (==3.8.2)", "nbconvert (>=7.0.0)", "pandas (==2.2.0)", "scipy (==1.12.0)", "vega-datasets (==0.9.0)"] -test = ["coverage", "pytest (>=7.0)", "pytest-check-links (>=0.7)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter (>=0.5.3)", "pytest-timeout", "pytest-tornasync", "requests", "requests-cache", "virtualenv"] - -[[package]] -name = "jupyterlab-code-formatter" -version = "2.2.1" -description = "A JupyterLab plugin to facilitate invocation of code formatters." -optional = false -python-versions = ">=3.7" -files = [ - {file = "jupyterlab_code_formatter-2.2.1-py3-none-any.whl", hash = "sha256:5f196ef80d1ae53028b04425a3f1cfb008fb211b46f942701af5fdd7557b5fe1"}, - {file = "jupyterlab_code_formatter-2.2.1.tar.gz", hash = "sha256:85322819da61f025ebc7c4a842979994fa812ad44c334fdb6ebb9ebad58dae08"}, -] - -[package.dependencies] -jupyter-server = ">=1.21,<3" -packaging = "*" - -[package.extras] -dev = ["autopep8", "black (==22.1.0)", "blue (==0.9.1)", "click (==8.0.2)", "isort", "jupyterlab (>=3.0.0)", "rpy2", "ruff", "yapf"] -test = ["black (==22.1.0)", "blue (==0.9.1)", "coverage", "importlib-metadata", "isort", "pytest", "pytest-asyncio", "pytest-cov", "pytest-jupyter[server] (>=0.6.0)", "yapf"] - -[[package]] -name = "jupyterlab-pygments" -version = "0.3.0" -description = "Pygments theme using JupyterLab CSS variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyterlab_pygments-0.3.0-py3-none-any.whl", hash = "sha256:841a89020971da1d8693f1a99997aefc5dc424bb1b251fd6322462a1b8842780"}, - {file = "jupyterlab_pygments-0.3.0.tar.gz", hash = "sha256:721aca4d9029252b11cfa9d185e5b5af4d54772bb8072f9b7036f4170054d35d"}, -] - -[[package]] -name = "jupyterlab-server" -version = "2.25.2" -description = "A set of server components for JupyterLab and JupyterLab like applications." -optional = false -python-versions = ">=3.8" -files = [ - {file = "jupyterlab_server-2.25.2-py3-none-any.whl", hash = "sha256:5b1798c9cc6a44f65c757de9f97fc06fc3d42535afbf47d2ace5e964ab447aaf"}, - {file = "jupyterlab_server-2.25.2.tar.gz", hash = "sha256:bd0ec7a99ebcedc8bcff939ef86e52c378e44c2707e053fcd81d046ce979ee63"}, -] - -[package.dependencies] -babel = ">=2.10" -jinja2 = ">=3.0.3" -json5 = ">=0.9.0" -jsonschema = ">=4.18.0" -jupyter-server = ">=1.21,<3" -packaging = ">=21.3" -requests = ">=2.31" - -[package.extras] -docs = ["autodoc-traits", "jinja2 (<3.2.0)", "mistune (<4)", "myst-parser", "pydata-sphinx-theme", "sphinx", "sphinx-copybutton", "sphinxcontrib-openapi (>0.8)"] -openapi = ["openapi-core (>=0.18.0,<0.19.0)", "ruamel-yaml"] -test = ["hatch", "ipykernel", "openapi-core (>=0.18.0,<0.19.0)", "openapi-spec-validator (>=0.6.0,<0.8.0)", "pytest (>=7.0)", "pytest-console-scripts", "pytest-cov", "pytest-jupyter[server] (>=0.6.2)", "pytest-timeout", "requests-mock", "ruamel-yaml", "sphinxcontrib-spelling", "strict-rfc3339", "werkzeug"] - [[package]] name = "kiwisolver" version = "1.4.5" @@ -1649,155 +920,39 @@ files = [ {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b0f3b8ea0e99e233a4bcc44590f01604840d833c280ebb8fe5554fd3e6cfe8d"}, {file = "matplotlib-3.8.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7b1704a530395aaf73912be741c04d181f82ca78084fbd80bc737be04848331"}, {file = "matplotlib-3.8.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:533b0e3b0c6768eef8cbe4b583731ce25a91ab54a22f830db2b031e83cca9213"}, - {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, - {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, - {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, - {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, - {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, - {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, - {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, -] - -[package.dependencies] -contourpy = ">=1.0.1" -cycler = ">=0.10" -fonttools = ">=4.22.0" -kiwisolver = ">=1.3.1" -numpy = ">=1.21,<2" -packaging = ">=20.0" -pillow = ">=8" -pyparsing = ">=2.3.1" -python-dateutil = ">=2.7" - -[[package]] -name = "matplotlib-inline" -version = "0.1.6" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.5" -files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, -] - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mistune" -version = "3.0.2" -description = "A sane and fast Markdown parser with useful plugins and renderers" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mistune-3.0.2-py3-none-any.whl", hash = "sha256:71481854c30fdbc938963d3605b72501f5c10a9320ecd412c121c163a1c7d205"}, - {file = "mistune-3.0.2.tar.gz", hash = "sha256:fc7f93ded930c92394ef2cb6f04a8aabab4117a91449e72dcc8dfa646a508be8"}, -] - -[[package]] -name = "mypy-extensions" -version = "1.0.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.5" -files = [ - {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, - {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, -] - -[[package]] -name = "nbclient" -version = "0.9.0" -description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "nbclient-0.9.0-py3-none-any.whl", hash = "sha256:a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15"}, - {file = "nbclient-0.9.0.tar.gz", hash = "sha256:4b28c207877cf33ef3a9838cdc7a54c5ceff981194a82eac59d558f05487295e"}, -] - -[package.dependencies] -jupyter-client = ">=6.1.12" -jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" -nbformat = ">=5.1" -traitlets = ">=5.4" - -[package.extras] -dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] -test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] - -[[package]] -name = "nbconvert" -version = "7.15.0" -description = "Converting Jupyter Notebooks" -optional = false -python-versions = ">=3.8" -files = [ - {file = "nbconvert-7.15.0-py3-none-any.whl", hash = "sha256:0efd3ca74fd1525560e0312cec235e57dfbf3c5c775c7e61e04c532b28f8da6f"}, - {file = "nbconvert-7.15.0.tar.gz", hash = "sha256:ff3f54a1a5e1e024beb9fde8946d05b6d0bf68cd14b5f2f9dc5b545c8bc71055"}, -] - -[package.dependencies] -beautifulsoup4 = "*" -bleach = "!=5.0.0" -defusedxml = "*" -jinja2 = ">=3.0" -jupyter-core = ">=4.7" -jupyterlab-pygments = "*" -markupsafe = ">=2.0" -mistune = ">=2.0.3,<4" -nbclient = ">=0.5.0" -nbformat = ">=5.7" -packaging = "*" -pandocfilters = ">=1.4.1" -pygments = ">=2.4.1" -tinycss2 = "*" -traitlets = ">=5.1" - -[package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] -docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] -qtpng = ["pyqtwebengine (>=5.15)"] -serve = ["tornado (>=6.1)"] -test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest"] -webpdf = ["playwright"] - -[[package]] -name = "nbformat" -version = "5.9.2" -description = "The Jupyter Notebook format" -optional = false -python-versions = ">=3.8" -files = [ - {file = "nbformat-5.9.2-py3-none-any.whl", hash = "sha256:1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9"}, - {file = "nbformat-5.9.2.tar.gz", hash = "sha256:5f98b5ba1997dff175e77e0c17d5c10a96eaed2cbd1de3533d1fc35d5e111192"}, + {file = "matplotlib-3.8.2-cp312-cp312-win_amd64.whl", hash = "sha256:0f4fc5d72b75e2c18e55eb32292659cf731d9d5b312a6eb036506304f4675630"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:deaed9ad4da0b1aea77fe0aa0cebb9ef611c70b3177be936a95e5d01fa05094f"}, + {file = "matplotlib-3.8.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:172f4d0fbac3383d39164c6caafd3255ce6fa58f08fc392513a0b1d3b89c4f89"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c7d36c2209d9136cd8e02fab1c0ddc185ce79bc914c45054a9f514e44c787917"}, + {file = "matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843"}, + {file = "matplotlib-3.8.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8345b48e95cee45ff25192ed1f4857273117917a4dcd48e3905619bcd9c9b8"}, + {file = "matplotlib-3.8.2-cp39-cp39-win_amd64.whl", hash = "sha256:7c48d9e221b637c017232e3760ed30b4e8d5dfd081daf327e829bf2a72c731b4"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa11b3c6928a1e496c1a79917d51d4cd5d04f8a2e75f21df4949eeefdf697f4b"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1095fecf99eeb7384dabad4bf44b965f929a5f6079654b681193edf7169ec20"}, + {file = "matplotlib-3.8.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bddfb1db89bfaa855912261c805bd0e10218923cc262b9159a49c29a7a1c1afa"}, + {file = "matplotlib-3.8.2.tar.gz", hash = "sha256:01a978b871b881ee76017152f1f1a0cbf6bd5f7b8ff8c96df0df1bd57d8755a1"}, ] [package.dependencies] -fastjsonschema = "*" -jsonschema = ">=2.6" -jupyter-core = "*" -traitlets = ">=5.1" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx", "sphinxcontrib-github-alt", "sphinxcontrib-spelling"] -test = ["pep440", "pre-commit", "pytest", "testpath"] +contourpy = ">=1.0.1" +cycler = ">=0.10" +fonttools = ">=4.22.0" +kiwisolver = ">=1.3.1" +numpy = ">=1.21,<2" +packaging = ">=20.0" +pillow = ">=8" +pyparsing = ">=2.3.1" +python-dateutil = ">=2.7" [[package]] -name = "nest-asyncio" -version = "1.6.0" -description = "Patch asyncio to allow nested event loops" +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." optional = false python-versions = ">=3.5" files = [ - {file = "nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c"}, - {file = "nest_asyncio-1.6.0.tar.gz", hash = "sha256:6f172d5449aca15afd6c646851f4e31e02c598d553a667e38cafa997cfec55fe"}, + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, ] [[package]] @@ -1814,23 +969,6 @@ files = [ [package.dependencies] setuptools = "*" -[[package]] -name = "notebook-shim" -version = "0.2.3" -description = "A shim layer for notebook traits and config" -optional = false -python-versions = ">=3.7" -files = [ - {file = "notebook_shim-0.2.3-py3-none-any.whl", hash = "sha256:a83496a43341c1674b093bfcebf0fe8e74cbe7eda5fd2bbc56f8e39e1486c0c7"}, - {file = "notebook_shim-0.2.3.tar.gz", hash = "sha256:f69388ac283ae008cd506dda10d0288b09a017d822d5e8c7129a152cbd3ce7e9"}, -] - -[package.dependencies] -jupyter-server = ">=1.8,<3" - -[package.extras] -test = ["pytest", "pytest-console-scripts", "pytest-jupyter", "pytest-tornasync"] - [[package]] name = "numpy" version = "1.26.4" @@ -1876,17 +1014,6 @@ files = [ {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, ] -[[package]] -name = "overrides" -version = "7.7.0" -description = "A decorator to automatically detect mismatch when overriding a method." -optional = false -python-versions = ">=3.6" -files = [ - {file = "overrides-7.7.0-py3-none-any.whl", hash = "sha256:c7ed9d062f78b8e4c1a7b70bd8796b35ead4d9f510227ef9c5dc7626c60d7e49"}, - {file = "overrides-7.7.0.tar.gz", hash = "sha256:55158fa3d93b98cc75299b1e67078ad9003ca27945c76162c1c0766d6f91820a"}, -] - [[package]] name = "packaging" version = "23.2" @@ -1966,32 +1093,6 @@ sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-d test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.9.2)"] -[[package]] -name = "pandocfilters" -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.1-py2.py3-none-any.whl", hash = "sha256:93be382804a9cdb0a7267585f157e5d1731bbe5545a85b268d6f5fe6232de2bc"}, - {file = "pandocfilters-1.5.1.tar.gz", hash = "sha256:002b4a555ee4ebc03f8b66307e287fa492e4a77b4ea14d3f934328297bb4939e"}, -] - -[[package]] -name = "parso" -version = "0.8.3" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, -] - -[package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] - [[package]] name = "pathspec" version = "0.12.1" @@ -2003,20 +1104,6 @@ files = [ {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, ] -[[package]] -name = "pexpect" -version = "4.9.0" -description = "Pexpect allows easy control of interactive console applications." -optional = false -python-versions = "*" -files = [ - {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, - {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, -] - -[package.dependencies] -ptyprocess = ">=0.5" - [[package]] name = "pillow" version = "10.2.0" @@ -2150,20 +1237,6 @@ nodeenv = ">=0.11.1" pyyaml = ">=5.1" virtualenv = ">=20.10.0" -[[package]] -name = "prometheus-client" -version = "0.19.0" -description = "Python client for the Prometheus monitoring system." -optional = false -python-versions = ">=3.8" -files = [ - {file = "prometheus_client-0.19.0-py3-none-any.whl", hash = "sha256:c88b1e6ecf6b41cd8fb5731c7ae919bf66df6ec6fafa555cd6c0e16ca169ae92"}, - {file = "prometheus_client-0.19.0.tar.gz", hash = "sha256:4585b0d1223148c27a225b10dbec5ae9bc4c81a99a3fa80774fa6209935324e1"}, -] - -[package.extras] -twisted = ["twisted"] - [[package]] name = "prompt-toolkit" version = "3.0.36" @@ -2178,70 +1251,6 @@ files = [ [package.dependencies] wcwidth = "*" -[[package]] -name = "psutil" -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.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] -test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] - -[[package]] -name = "pure-eval" -version = "0.2.2" -description = "Safely evaluate AST nodes without side effects" -optional = false -python-versions = "*" -files = [ - {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, - {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, -] - -[package.extras] -tests = ["pytest"] - -[[package]] -name = "pycparser" -version = "2.21" -description = "C parser in Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - [[package]] name = "pydantic" version = "2.6.1" @@ -2352,21 +1361,6 @@ files = [ [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" -[[package]] -name = "pygments" -version = "2.17.2" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, -] - -[package.extras] -plugins = ["importlib-metadata"] -windows-terminal = ["colorama (>=0.4.6)"] - [[package]] name = "pyparsing" version = "3.1.1" @@ -2429,17 +1423,6 @@ files = [ [package.extras] cli = ["click (>=5.0)"] -[[package]] -name = "python-json-logger" -version = "2.0.7" -description = "A python library adding a json log formatter" -optional = false -python-versions = ">=3.6" -files = [ - {file = "python-json-logger-2.0.7.tar.gz", hash = "sha256:23e7ec02d34237c5aa1e29a070193a4ea87583bb4e7f8fd06d3de8264c4b2e1c"}, - {file = "python_json_logger-2.0.7-py3-none-any.whl", hash = "sha256:f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd"}, -] - [[package]] name = "pytz" version = "2024.1" @@ -2451,44 +1434,6 @@ files = [ {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, ] -[[package]] -name = "pywin32" -version = "306" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - -[[package]] -name = "pywinpty" -version = "2.0.12" -description = "Pseudo terminal support for Windows from Python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pywinpty-2.0.12-cp310-none-win_amd64.whl", hash = "sha256:21319cd1d7c8844fb2c970fb3a55a3db5543f112ff9cfcd623746b9c47501575"}, - {file = "pywinpty-2.0.12-cp311-none-win_amd64.whl", hash = "sha256:853985a8f48f4731a716653170cd735da36ffbdc79dcb4c7b7140bce11d8c722"}, - {file = "pywinpty-2.0.12-cp312-none-win_amd64.whl", hash = "sha256:1617b729999eb6713590e17665052b1a6ae0ad76ee31e60b444147c5b6a35dca"}, - {file = "pywinpty-2.0.12-cp38-none-win_amd64.whl", hash = "sha256:189380469ca143d06e19e19ff3fba0fcefe8b4a8cc942140a6b863aed7eebb2d"}, - {file = "pywinpty-2.0.12-cp39-none-win_amd64.whl", hash = "sha256:7520575b6546db23e693cbd865db2764097bd6d4ef5dc18c92555904cd62c3d4"}, - {file = "pywinpty-2.0.12.tar.gz", hash = "sha256:8197de460ae8ebb7f5d1701dfa1b5df45b157bb832e92acba316305e18ca00dd"}, -] - [[package]] name = "pyyaml" version = "6.0.1" @@ -2548,111 +1493,6 @@ files = [ {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, ] -[[package]] -name = "pyzmq" -version = "25.1.2" -description = "Python bindings for 0MQ" -optional = false -python-versions = ">=3.6" -files = [ - {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_15_universal2.whl", hash = "sha256:e624c789359f1a16f83f35e2c705d07663ff2b4d4479bad35621178d8f0f6ea4"}, - {file = "pyzmq-25.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49151b0efece79f6a79d41a461d78535356136ee70084a1c22532fc6383f4ad0"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9a5f194cf730f2b24d6af1f833c14c10f41023da46a7f736f48b6d35061e76e"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:faf79a302f834d9e8304fafdc11d0d042266667ac45209afa57e5efc998e3872"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f51a7b4ead28d3fca8dda53216314a553b0f7a91ee8fc46a72b402a78c3e43d"}, - {file = "pyzmq-25.1.2-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:0ddd6d71d4ef17ba5a87becf7ddf01b371eaba553c603477679ae817a8d84d75"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:246747b88917e4867e2367b005fc8eefbb4a54b7db363d6c92f89d69abfff4b6"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:00c48ae2fd81e2a50c3485de1b9d5c7c57cd85dc8ec55683eac16846e57ac979"}, - {file = "pyzmq-25.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5a68d491fc20762b630e5db2191dd07ff89834086740f70e978bb2ef2668be08"}, - {file = "pyzmq-25.1.2-cp310-cp310-win32.whl", hash = "sha256:09dfe949e83087da88c4a76767df04b22304a682d6154de2c572625c62ad6886"}, - {file = "pyzmq-25.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:fa99973d2ed20417744fca0073390ad65ce225b546febb0580358e36aa90dba6"}, - {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_15_universal2.whl", hash = "sha256:82544e0e2d0c1811482d37eef297020a040c32e0687c1f6fc23a75b75db8062c"}, - {file = "pyzmq-25.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:01171fc48542348cd1a360a4b6c3e7d8f46cdcf53a8d40f84db6707a6768acc1"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc69c96735ab501419c432110016329bf0dea8898ce16fab97c6d9106dc0b348"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3e124e6b1dd3dfbeb695435dff0e383256655bb18082e094a8dd1f6293114642"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7598d2ba821caa37a0f9d54c25164a4fa351ce019d64d0b44b45540950458840"}, - {file = "pyzmq-25.1.2-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d1299d7e964c13607efd148ca1f07dcbf27c3ab9e125d1d0ae1d580a1682399d"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4e6f689880d5ad87918430957297c975203a082d9a036cc426648fcbedae769b"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cc69949484171cc961e6ecd4a8911b9ce7a0d1f738fcae717177c231bf77437b"}, - {file = "pyzmq-25.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9880078f683466b7f567b8624bfc16cad65077be046b6e8abb53bed4eeb82dd3"}, - {file = "pyzmq-25.1.2-cp311-cp311-win32.whl", hash = "sha256:4e5837af3e5aaa99a091302df5ee001149baff06ad22b722d34e30df5f0d9097"}, - {file = "pyzmq-25.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:25c2dbb97d38b5ac9fd15586e048ec5eb1e38f3d47fe7d92167b0c77bb3584e9"}, - {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_15_universal2.whl", hash = "sha256:11e70516688190e9c2db14fcf93c04192b02d457b582a1f6190b154691b4c93a"}, - {file = "pyzmq-25.1.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:313c3794d650d1fccaaab2df942af9f2c01d6217c846177cfcbc693c7410839e"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b3cbba2f47062b85fe0ef9de5b987612140a9ba3a9c6d2543c6dec9f7c2ab27"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc31baa0c32a2ca660784d5af3b9487e13b61b3032cb01a115fce6588e1bed30"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02c9087b109070c5ab0b383079fa1b5f797f8d43e9a66c07a4b8b8bdecfd88ee"}, - {file = "pyzmq-25.1.2-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:f8429b17cbb746c3e043cb986328da023657e79d5ed258b711c06a70c2ea7537"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5074adeacede5f810b7ef39607ee59d94e948b4fd954495bdb072f8c54558181"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7ae8f354b895cbd85212da245f1a5ad8159e7840e37d78b476bb4f4c3f32a9fe"}, - {file = "pyzmq-25.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b264bf2cc96b5bc43ce0e852be995e400376bd87ceb363822e2cb1964fcdc737"}, - {file = "pyzmq-25.1.2-cp312-cp312-win32.whl", hash = "sha256:02bbc1a87b76e04fd780b45e7f695471ae6de747769e540da909173d50ff8e2d"}, - {file = "pyzmq-25.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:ced111c2e81506abd1dc142e6cd7b68dd53747b3b7ae5edbea4578c5eeff96b7"}, - {file = "pyzmq-25.1.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:7b6d09a8962a91151f0976008eb7b29b433a560fde056ec7a3db9ec8f1075438"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:967668420f36878a3c9ecb5ab33c9d0ff8d054f9c0233d995a6d25b0e95e1b6b"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5edac3f57c7ddaacdb4d40f6ef2f9e299471fc38d112f4bc6d60ab9365445fb0"}, - {file = "pyzmq-25.1.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0dabfb10ef897f3b7e101cacba1437bd3a5032ee667b7ead32bbcdd1a8422fe7"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:2c6441e0398c2baacfe5ba30c937d274cfc2dc5b55e82e3749e333aabffde561"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:16b726c1f6c2e7625706549f9dbe9b06004dfbec30dbed4bf50cbdfc73e5b32a"}, - {file = "pyzmq-25.1.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a86c2dd76ef71a773e70551a07318b8e52379f58dafa7ae1e0a4be78efd1ff16"}, - {file = "pyzmq-25.1.2-cp36-cp36m-win32.whl", hash = "sha256:359f7f74b5d3c65dae137f33eb2bcfa7ad9ebefd1cab85c935f063f1dbb245cc"}, - {file = "pyzmq-25.1.2-cp36-cp36m-win_amd64.whl", hash = "sha256:55875492f820d0eb3417b51d96fea549cde77893ae3790fd25491c5754ea2f68"}, - {file = "pyzmq-25.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b8c8a419dfb02e91b453615c69568442e897aaf77561ee0064d789705ff37a92"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8807c87fa893527ae8a524c15fc505d9950d5e856f03dae5921b5e9aa3b8783b"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5e319ed7d6b8f5fad9b76daa0a68497bc6f129858ad956331a5835785761e003"}, - {file = "pyzmq-25.1.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:3c53687dde4d9d473c587ae80cc328e5b102b517447456184b485587ebd18b62"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9add2e5b33d2cd765ad96d5eb734a5e795a0755f7fc49aa04f76d7ddda73fd70"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:e690145a8c0c273c28d3b89d6fb32c45e0d9605b2293c10e650265bf5c11cfec"}, - {file = "pyzmq-25.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00a06faa7165634f0cac1abb27e54d7a0b3b44eb9994530b8ec73cf52e15353b"}, - {file = "pyzmq-25.1.2-cp37-cp37m-win32.whl", hash = "sha256:0f97bc2f1f13cb16905a5f3e1fbdf100e712d841482b2237484360f8bc4cb3d7"}, - {file = "pyzmq-25.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6cc0020b74b2e410287e5942e1e10886ff81ac77789eb20bec13f7ae681f0fdd"}, - {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_15_universal2.whl", hash = "sha256:bef02cfcbded83473bdd86dd8d3729cd82b2e569b75844fb4ea08fee3c26ae41"}, - {file = "pyzmq-25.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:e10a4b5a4b1192d74853cc71a5e9fd022594573926c2a3a4802020360aa719d8"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8c5f80e578427d4695adac6fdf4370c14a2feafdc8cb35549c219b90652536ae"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5dde6751e857910c1339890f3524de74007958557593b9e7e8c5f01cd919f8a7"}, - {file = "pyzmq-25.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ea1608dd169da230a0ad602d5b1ebd39807ac96cae1845c3ceed39af08a5c6df"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0f513130c4c361201da9bc69df25a086487250e16b5571ead521b31ff6b02220"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:019744b99da30330798bb37df33549d59d380c78e516e3bab9c9b84f87a9592f"}, - {file = "pyzmq-25.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2e2713ef44be5d52dd8b8e2023d706bf66cb22072e97fc71b168e01d25192755"}, - {file = "pyzmq-25.1.2-cp38-cp38-win32.whl", hash = "sha256:07cd61a20a535524906595e09344505a9bd46f1da7a07e504b315d41cd42eb07"}, - {file = "pyzmq-25.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb7e49a17fb8c77d3119d41a4523e432eb0c6932187c37deb6fbb00cc3028088"}, - {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_15_universal2.whl", hash = "sha256:94504ff66f278ab4b7e03e4cba7e7e400cb73bfa9d3d71f58d8972a8dc67e7a6"}, - {file = "pyzmq-25.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6dd0d50bbf9dca1d0bdea219ae6b40f713a3fb477c06ca3714f208fd69e16fd8"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:004ff469d21e86f0ef0369717351073e0e577428e514c47c8480770d5e24a565"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c0b5ca88a8928147b7b1e2dfa09f3b6c256bc1135a1338536cbc9ea13d3b7add"}, - {file = "pyzmq-25.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c9a79f1d2495b167119d02be7448bfba57fad2a4207c4f68abc0bab4b92925b"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:518efd91c3d8ac9f9b4f7dd0e2b7b8bf1a4fe82a308009016b07eaa48681af82"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1ec23bd7b3a893ae676d0e54ad47d18064e6c5ae1fadc2f195143fb27373f7f6"}, - {file = "pyzmq-25.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db36c27baed588a5a8346b971477b718fdc66cf5b80cbfbd914b4d6d355e44e2"}, - {file = "pyzmq-25.1.2-cp39-cp39-win32.whl", hash = "sha256:39b1067f13aba39d794a24761e385e2eddc26295826530a8c7b6c6c341584289"}, - {file = "pyzmq-25.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:8e9f3fabc445d0ce320ea2c59a75fe3ea591fdbdeebec5db6de530dd4b09412e"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a8c1d566344aee826b74e472e16edae0a02e2a044f14f7c24e123002dcff1c05"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:759cfd391a0996345ba94b6a5110fca9c557ad4166d86a6e81ea526c376a01e8"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7c61e346ac34b74028ede1c6b4bcecf649d69b707b3ff9dc0fab453821b04d1e"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cb8fc1f8d69b411b8ec0b5f1ffbcaf14c1db95b6bccea21d83610987435f1a4"}, - {file = "pyzmq-25.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3c00c9b7d1ca8165c610437ca0c92e7b5607b2f9076f4eb4b095c85d6e680a1d"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:df0c7a16ebb94452d2909b9a7b3337940e9a87a824c4fc1c7c36bb4404cb0cde"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:45999e7f7ed5c390f2e87ece7f6c56bf979fb213550229e711e45ecc7d42ccb8"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ac170e9e048b40c605358667aca3d94e98f604a18c44bdb4c102e67070f3ac9b"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d1b604734bec94f05f81b360a272fc824334267426ae9905ff32dc2be433ab96"}, - {file = "pyzmq-25.1.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:a793ac733e3d895d96f865f1806f160696422554e46d30105807fdc9841b9f7d"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0806175f2ae5ad4b835ecd87f5f85583316b69f17e97786f7443baaf54b9bb98"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ef12e259e7bc317c7597d4f6ef59b97b913e162d83b421dd0db3d6410f17a244"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea253b368eb41116011add00f8d5726762320b1bda892f744c91997b65754d73"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b9b1f2ad6498445a941d9a4fee096d387fee436e45cc660e72e768d3d8ee611"}, - {file = "pyzmq-25.1.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:8b14c75979ce932c53b79976a395cb2a8cd3aaf14aef75e8c2cb55a330b9b49d"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:889370d5174a741a62566c003ee8ddba4b04c3f09a97b8000092b7ca83ec9c49"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9a18fff090441a40ffda8a7f4f18f03dc56ae73f148f1832e109f9bffa85df15"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:99a6b36f95c98839ad98f8c553d8507644c880cf1e0a57fe5e3a3f3969040882"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4345c9a27f4310afbb9c01750e9461ff33d6fb74cd2456b107525bbeebcb5be3"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:3516e0b6224cf6e43e341d56da15fd33bdc37fa0c06af4f029f7d7dfceceabbc"}, - {file = "pyzmq-25.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:146b9b1f29ead41255387fb07be56dc29639262c0f7344f570eecdcd8d683314"}, - {file = "pyzmq-25.1.2.tar.gz", hash = "sha256:93f1aa311e8bb912e34f004cf186407a4e90eec4f0ecc0efd26056bf7eda0226"}, -] - -[package.dependencies] -cffi = {version = "*", markers = "implementation_name == \"pypy\""} - [[package]] name = "questionary" version = "2.0.1" @@ -2769,21 +1609,6 @@ files = [ [package.extras] full = ["numpy"] -[[package]] -name = "referencing" -version = "0.33.0" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "referencing-0.33.0-py3-none-any.whl", hash = "sha256:39240f2ecc770258f28b642dd47fd74bc8b02484de54e1882b74b35ebd779bd5"}, - {file = "referencing-0.33.0.tar.gz", hash = "sha256:c775fedf74bc0f9189c2a3be1c12fd03e8c23f4d371dce795df44e06c5b412f7"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" - [[package]] name = "requests" version = "2.31.0" @@ -2835,139 +1660,6 @@ redis = ["redis (>=3)"] security = ["itsdangerous (>=2.0)"] yaml = ["pyyaml (>=5.4)"] -[[package]] -name = "rfc3339-validator" -version = "0.1.4" -description = "A pure python RFC3339 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3339_validator-0.1.4-py2.py3-none-any.whl", hash = "sha256:24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa"}, - {file = "rfc3339_validator-0.1.4.tar.gz", hash = "sha256:138a2abdf93304ad60530167e51d2dfb9549521a836871b88d7f4695d0022f6b"}, -] - -[package.dependencies] -six = "*" - -[[package]] -name = "rfc3986-validator" -version = "0.1.1" -description = "Pure python rfc3986 validator" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "rfc3986_validator-0.1.1-py2.py3-none-any.whl", hash = "sha256:2f235c432ef459970b4306369336b9d5dbdda31b510ca1e327636e01f528bfa9"}, - {file = "rfc3986_validator-0.1.1.tar.gz", hash = "sha256:3d44bde7921b3b9ec3ae4e3adca370438eccebc676456449b145d533b240d055"}, -] - -[[package]] -name = "rpds-py" -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.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]] name = "scipy" version = "1.12.0" @@ -3010,22 +1702,6 @@ dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyl doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] -[[package]] -name = "send2trash" -version = "1.8.2" -description = "Send file to trash natively under Mac OS X, Windows and Linux" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -files = [ - {file = "Send2Trash-1.8.2-py3-none-any.whl", hash = "sha256:a384719d99c07ce1eefd6905d2decb6f8b7ed054025bb0e618919f945de4f679"}, - {file = "Send2Trash-1.8.2.tar.gz", hash = "sha256:c132d59fa44b9ca2b1699af5c86f57ce9f4c5eb56629d5d55fbb7a35f84e2312"}, -] - -[package.extras] -nativelib = ["pyobjc-framework-Cocoa", "pywin32"] -objc = ["pyobjc-framework-Cocoa"] -win32 = ["pywin32"] - [[package]] name = "setuptools" version = "69.0.3" @@ -3064,36 +1740,6 @@ files = [ {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, ] -[[package]] -name = "soupsieve" -version = "2.5" -description = "A modern CSS selector implementation for Beautiful Soup." -optional = false -python-versions = ">=3.8" -files = [ - {file = "soupsieve-2.5-py3-none-any.whl", hash = "sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7"}, - {file = "soupsieve-2.5.tar.gz", hash = "sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690"}, -] - -[[package]] -name = "stack-data" -version = "0.6.3" -description = "Extract data from python stack frames and tracebacks for informative displays" -optional = false -python-versions = "*" -files = [ - {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, - {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, -] - -[package.dependencies] -asttokens = ">=2.1.0" -executing = ">=1.2.0" -pure-eval = "*" - -[package.extras] -tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] - [[package]] name = "starlette" version = "0.36.3" @@ -3125,27 +1771,6 @@ files = [ [package.extras] tests = ["pytest", "pytest-cov"] -[[package]] -name = "terminado" -version = "0.18.0" -description = "Tornado websocket backend for the Xterm.js Javascript terminal emulator library." -optional = false -python-versions = ">=3.8" -files = [ - {file = "terminado-0.18.0-py3-none-any.whl", hash = "sha256:87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e"}, - {file = "terminado-0.18.0.tar.gz", hash = "sha256:1ea08a89b835dd1b8c0c900d92848147cef2537243361b2e3f4dc15df9b6fded"}, -] - -[package.dependencies] -ptyprocess = {version = "*", markers = "os_name != \"nt\""} -pywinpty = {version = ">=1.1.0", markers = "os_name == \"nt\""} -tornado = ">=6.1.0" - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["pre-commit", "pytest (>=7.0)", "pytest-timeout"] -typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] - [[package]] name = "thefuzz" version = "0.22.1" @@ -3175,24 +1800,6 @@ files = [ matplotlib = "*" numpy = "*" -[[package]] -name = "tinycss2" -version = "1.2.1" -description = "A tiny CSS parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tinycss2-1.2.1-py3-none-any.whl", hash = "sha256:2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847"}, - {file = "tinycss2-1.2.1.tar.gz", hash = "sha256:8cff3a8f066c2ec677c06dbc7b45619804a6938478d9d73c284b29d14ecb0627"}, -] - -[package.dependencies] -webencodings = ">=0.4" - -[package.extras] -doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "pytest"] - [[package]] name = "tomlkit" version = "0.12.3" @@ -3204,52 +1811,6 @@ files = [ {file = "tomlkit-0.12.3.tar.gz", hash = "sha256:75baf5012d06501f07bee5bf8e801b9f343e7aac5a92581f20f80ce632e6b5a4"}, ] -[[package]] -name = "tornado" -version = "6.4" -description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -optional = false -python-versions = ">= 3.8" -files = [ - {file = "tornado-6.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:02ccefc7d8211e5a7f9e8bc3f9e5b0ad6262ba2fbb683a6443ecc804e5224ce0"}, - {file = "tornado-6.4-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:27787de946a9cffd63ce5814c33f734c627a87072ec7eed71f7fc4417bb16263"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7894c581ecdcf91666a0912f18ce5e757213999e183ebfc2c3fdbf4d5bd764e"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e43bc2e5370a6a8e413e1e1cd0c91bedc5bd62a74a532371042a18ef19e10579"}, - {file = "tornado-6.4-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f0251554cdd50b4b44362f73ad5ba7126fc5b2c2895cc62b14a1c2d7ea32f212"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fd03192e287fbd0899dd8f81c6fb9cbbc69194d2074b38f384cb6fa72b80e9c2"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_i686.whl", hash = "sha256:88b84956273fbd73420e6d4b8d5ccbe913c65d31351b4c004ae362eba06e1f78"}, - {file = "tornado-6.4-cp38-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:71ddfc23a0e03ef2df1c1397d859868d158c8276a0603b96cf86892bff58149f"}, - {file = "tornado-6.4-cp38-abi3-win32.whl", hash = "sha256:6f8a6c77900f5ae93d8b4ae1196472d0ccc2775cc1dfdc9e7727889145c45052"}, - {file = "tornado-6.4-cp38-abi3-win_amd64.whl", hash = "sha256:10aeaa8006333433da48dec9fe417877f8bcc21f48dda8d661ae79da357b2a63"}, - {file = "tornado-6.4.tar.gz", hash = "sha256:72291fa6e6bc84e626589f1c29d90a5a6d593ef5ae68052ee2ef000dfd273dee"}, -] - -[[package]] -name = "traitlets" -version = "5.14.1" -description = "Traitlets Python configuration system" -optional = false -python-versions = ">=3.8" -files = [ - {file = "traitlets-5.14.1-py3-none-any.whl", hash = "sha256:2e5a030e6eff91737c643231bfcf04a65b0132078dad75e4936700b213652e74"}, - {file = "traitlets-5.14.1.tar.gz", hash = "sha256:8585105b371a04b8316a43d5ce29c098575c2e477850b62b848b964f1444527e"}, -] - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<7.5)", "pytest-mock", "pytest-mypy-testing"] - -[[package]] -name = "types-python-dateutil" -version = "2.8.19.20240106" -description = "Typing stubs for python-dateutil" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-python-dateutil-2.8.19.20240106.tar.gz", hash = "sha256:1f8db221c3b98e6ca02ea83a58371b22c374f42ae5bbdf186db9c9a76581459f"}, - {file = "types_python_dateutil-2.8.19.20240106-py3-none-any.whl", hash = "sha256:efbbdc54590d0f16152fa103c9879c7d4a00e82078f6e2cf01769042165acaa2"}, -] - [[package]] name = "typing-extensions" version = "4.9.0" @@ -3272,20 +1833,6 @@ files = [ {file = "tzdata-2023.4.tar.gz", hash = "sha256:dd54c94f294765522c77399649b4fefd95522479a664a0cec87f41bebc6148c9"}, ] -[[package]] -name = "uri-template" -version = "1.3.0" -description = "RFC 6570 URI Template Processor" -optional = false -python-versions = ">=3.7" -files = [ - {file = "uri-template-1.3.0.tar.gz", hash = "sha256:0e00f8eb65e18c7de20d595a14336e9f337ead580c70934141624b6d1ffdacc7"}, - {file = "uri_template-1.3.0-py3-none-any.whl", hash = "sha256:a44a133ea12d44a0c0f06d7d42a52d71282e77e2f937d8abd5655b8d56fc1363"}, -] - -[package.extras] -dev = ["flake8", "flake8-annotations", "flake8-bandit", "flake8-bugbear", "flake8-commas", "flake8-comprehensions", "flake8-continuation", "flake8-datetimez", "flake8-docstrings", "flake8-import-order", "flake8-literal", "flake8-modern-annotations", "flake8-noqa", "flake8-pyproject", "flake8-requirements", "flake8-typechecking-import", "flake8-use-fstring", "mypy", "pep8-naming", "types-PyYAML"] - [[package]] name = "url-normalize" version = "1.4.3" @@ -3504,48 +2051,6 @@ files = [ {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, ] -[[package]] -name = "webcolors" -version = "1.13" -description = "A library for working with the color formats defined by HTML and CSS." -optional = false -python-versions = ">=3.7" -files = [ - {file = "webcolors-1.13-py3-none-any.whl", hash = "sha256:29bc7e8752c0a1bd4a1f03c14d6e6a72e93d82193738fa860cbff59d0fcc11bf"}, - {file = "webcolors-1.13.tar.gz", hash = "sha256:c225b674c83fa923be93d235330ce0300373d02885cef23238813b0d5668304a"}, -] - -[package.extras] -docs = ["furo", "sphinx", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-notfound-page", "sphinxext-opengraph"] -tests = ["pytest", "pytest-cov"] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websocket-client" -version = "1.7.0" -description = "WebSocket client for Python with low level API options" -optional = false -python-versions = ">=3.8" -files = [ - {file = "websocket-client-1.7.0.tar.gz", hash = "sha256:10e511ea3a8c744631d3bd77e61eb17ed09304c413ad42cf6ddfa4c7787e8fe6"}, - {file = "websocket_client-1.7.0-py3-none-any.whl", hash = "sha256:f4c3d22fec12a2461427a29957ff07d35098ee2d976d3ba244e688b8b4057588"}, -] - -[package.extras] -docs = ["Sphinx (>=6.0)", "sphinx-rtd-theme (>=1.1.0)"] -optional = ["python-socks", "wsaccel"] -test = ["websockets"] - [[package]] name = "websockets" version = "12.0" @@ -3645,4 +2150,4 @@ testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "p [metadata] lock-version = "2.0" python-versions = "^3.12" -content-hash = "191d68f0820537e9c3ef1f1e8c0294142ef483846ffdd8d8c345c6b67e5db469" +content-hash = "548fa7e62713fd7282d22e9b1b7b8e262bb13a9892c2021d3a18a4aefb00a80e" diff --git a/pyproject.toml b/pyproject.toml index 891d017..cbe12b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -15,8 +15,6 @@ uvicorn = { extras = ["standard"], version = "^0.27.0.post1" } black = "^24.1.1" commitizen = "^3.14.1" isort = "^5.13.2" -jupyterlab = "^4.1.0" -jupyterlab-code-formatter = "^2.2.1" pre-commit = "^3.6.0" pytest = "^8.0.0" httpx = "^0.26.0" From ea2c996e97560fa2147dfcc83a7d0039c92711fc Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Wed, 7 Feb 2024 16:55:03 +0530 Subject: [PATCH 10/17] ci: fixed typo in Dockerfile.dev CMD --- Dockerfile.dev | 4 ++-- Dockerfile.prod | 2 +- Dockerfile.staging | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Dockerfile.dev b/Dockerfile.dev index 2c3e6a8..2fa7cc1 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -26,6 +26,6 @@ HEALTHCHECK --interval=5m --timeout=3s \ CMD curl -f http://localhost/health || exit 1 # Run the uvicorn command, telling it to use the app object imported from app.main. -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8081", "--reload", "--reload-exclude". "app/test_main.py"] +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8081", "--reload", "--reload-exclude", "app/test_main.py"] -# CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "8081" "--reload", "--reload-exclude". "app/test_main.py"] \ No newline at end of file +# CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "8081" "--reload", "--reload-exclude", "app/test_main.py"] diff --git a/Dockerfile.prod b/Dockerfile.prod index 42a2370..66ce3a2 100644 --- a/Dockerfile.prod +++ b/Dockerfile.prod @@ -46,4 +46,4 @@ HEALTHCHECK --interval=5m --timeout=3s \ # Run the uvicorn command, telling it to use the app object imported from app.main. CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] -# CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"] \ No newline at end of file +# CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"] diff --git a/Dockerfile.staging b/Dockerfile.staging index 42a2370..66ce3a2 100644 --- a/Dockerfile.staging +++ b/Dockerfile.staging @@ -46,4 +46,4 @@ HEALTHCHECK --interval=5m --timeout=3s \ # Run the uvicorn command, telling it to use the app object imported from app.main. CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "80"] -# CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"] \ No newline at end of file +# CMD ["uvicorn", "app.main:app", "--proxy-headers", "--host", "0.0.0.0", "--port", "80"] From e3498ad6ffc6841a264de1dba0bd4bb6d8cf0058 Mon Sep 17 00:00:00 2001 From: Pratik Borole Date: Thu, 8 Feb 2024 19:15:20 +0530 Subject: [PATCH 11/17] feat: BACK-26 supabase self-host initial setup --- .dockerignore | 5 +- .env.example | 104 +++++++++ .gitignore | 4 + .prettierignore | 2 + README.md | 24 +- compose.dev.yaml | 12 + supabase-selfhost.yaml | 388 +++++++++++++++++++++++++++++++ useful_commands.md | 85 ++++--- volumes/api/kong.yml | 223 ++++++++++++++++++ volumes/db/init/data.sql | 0 volumes/db/jwt.sql | 5 + volumes/db/logs.sql | 4 + volumes/db/realtime.sql | 4 + volumes/db/roles.sql | 8 + volumes/db/webhooks.sql | 208 +++++++++++++++++ volumes/functions/hello/index.ts | 15 ++ volumes/functions/main/index.ts | 94 ++++++++ volumes/logs/vector.yml | 232 ++++++++++++++++++ 18 files changed, 1382 insertions(+), 35 deletions(-) create mode 100644 .env.example create mode 100644 .prettierignore create mode 100644 compose.dev.yaml create mode 100644 supabase-selfhost.yaml create mode 100644 volumes/api/kong.yml create mode 100755 volumes/db/init/data.sql create mode 100644 volumes/db/jwt.sql create mode 100644 volumes/db/logs.sql create mode 100644 volumes/db/realtime.sql create mode 100644 volumes/db/roles.sql create mode 100644 volumes/db/webhooks.sql create mode 100644 volumes/functions/hello/index.ts create mode 100644 volumes/functions/main/index.ts create mode 100644 volumes/logs/vector.yml diff --git a/.dockerignore b/.dockerignore index 862c9fc..d27986a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -148,5 +148,8 @@ bazel-* # .dockerignore, Dockerfile and builder script themselves are not needed by # docker build. .dockerignore +Dockerfile.dev +Dockerfile.staging +Dockerfile.prod tfx/tools/docker/Dockerfile* -tfx/tools/docker/build_docker_image.sh \ No newline at end of file +tfx/tools/docker/build_docker_image.sh diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..cdc6a10 --- /dev/null +++ b/.env.example @@ -0,0 +1,104 @@ +############ +# Secrets +# YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION +############ + +POSTGRES_PASSWORD=your-super-secret-and-long-postgres-password +JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long +ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJhbm9uIiwKICAgICJpc3MiOiAic3VwYWJhc2UtZGVtbyIsCiAgICAiaWF0IjogMTY0MTc2OTIwMCwKICAgICJleHAiOiAxNzk5NTM1NjAwCn0.dc_X5iR_VP_qT0zsiyj_I_OZ2T9FtRU2BBNWN8Bu4GE +SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyAgCiAgICAicm9sZSI6ICJzZXJ2aWNlX3JvbGUiLAogICAgImlzcyI6ICJzdXBhYmFzZS1kZW1vIiwKICAgICJpYXQiOiAxNjQxNzY5MjAwLAogICAgImV4cCI6IDE3OTk1MzU2MDAKfQ.DaYlNEoUrrEn2Ig7tqibS-PHK5vgusbcbo7X36XVt4Q +DASHBOARD_USERNAME=supabase +DASHBOARD_PASSWORD=this_password_is_insecure_and_should_be_updated + +############ +# Database - You can change these to any PostgreSQL database that has logical replication enabled. +############ + +POSTGRES_HOST=db +POSTGRES_DB=postgres +POSTGRES_PORT=5432 +# default user is postgres + +############ +# API Proxy - Configuration for the Kong Reverse proxy. +############ + +KONG_HTTP_PORT=8000 +KONG_HTTPS_PORT=8443 + + +############ +# API - Configuration for PostgREST. +############ + +PGRST_DB_SCHEMAS=public,storage,graphql_public + + +############ +# Auth - Configuration for the GoTrue authentication server. +############ + +## General +SITE_URL=http://localhost:3000 +ADDITIONAL_REDIRECT_URLS= +JWT_EXPIRY=3600 +DISABLE_SIGNUP=false +API_EXTERNAL_URL=http://localhost:8000 + +## Mailer Config +MAILER_URLPATHS_CONFIRMATION="/auth/v1/verify" +MAILER_URLPATHS_INVITE="/auth/v1/verify" +MAILER_URLPATHS_RECOVERY="/auth/v1/verify" +MAILER_URLPATHS_EMAIL_CHANGE="/auth/v1/verify" + +## Email auth +ENABLE_EMAIL_SIGNUP=true +ENABLE_EMAIL_AUTOCONFIRM=false +SMTP_ADMIN_EMAIL=admin@example.com +SMTP_HOST=supabase-mail +SMTP_PORT=2500 +SMTP_USER=fake_mail_user +SMTP_PASS=fake_mail_password +SMTP_SENDER_NAME=fake_sender + +## Phone auth +ENABLE_PHONE_SIGNUP=true +ENABLE_PHONE_AUTOCONFIRM=true + + +############ +# Studio - Configuration for the Dashboard +############ + +STUDIO_DEFAULT_ORGANIZATION=Default Organization +STUDIO_DEFAULT_PROJECT=Default Project + +STUDIO_PORT=3000 +# replace if you intend to use Studio outside of localhost +SUPABASE_PUBLIC_URL=http://localhost:8000 + +# Enable webp support +IMGPROXY_ENABLE_WEBP_DETECTION=true + +############ +# Functions - Configuration for Functions +############ +# NOTE: VERIFY_JWT applies to all functions. Per-function VERIFY_JWT is not supported yet. +FUNCTIONS_VERIFY_JWT=false + +############ +# Logs - Configuration for Logflare +# Please refer to https://supabase.com/docs/reference/self-hosting-analytics/introduction +############ + +LOGFLARE_LOGGER_BACKEND_API_KEY=your-super-secret-and-long-logflare-key + +# Change vector.toml sinks to reflect this change +LOGFLARE_API_KEY=your-super-secret-and-long-logflare-key + +# Docker socket location - this value will differ depending on your OS +DOCKER_SOCKET_LOCATION=/var/run/docker.sock + +# Google Cloud Project details +GOOGLE_PROJECT_ID=GOOGLE_PROJECT_ID +GOOGLE_PROJECT_NUMBER=GOOGLE_PROJECT_NUMBER diff --git a/.gitignore b/.gitignore index 68bc17f..4db18ef 100644 --- a/.gitignore +++ b/.gitignore @@ -158,3 +158,7 @@ cython_debug/ # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. #.idea/ + +# Supabase self-host +volumes/db/data +volumes/storage diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..f083734 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +# required in order for supabase-kong to work +volumes/api/kong.yml diff --git a/README.md b/README.md index 7b4ab59..cd8650b 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,8 @@ Table of Contents: - [Installing git hooks](#installing-git-hooks) - [Running the project](#running-the-project) - [Docker](#docker) + - [App only](#app-only) + - [With Supabase](#with-supabase) - [Interactive API docs](#interactive-api-docs) - [Running tests](#running-tests) - [Contribution Guidelines](#contribution-guidelines) @@ -67,17 +69,31 @@ pre-commit install --hook-type commit-msg --hook-type pre-push --hook-type pre-c ### Docker +#### App only + - Build image ```sh docker build --file Dockerfile.dev --tag backend-dev . ``` - **Note**: The first build will take about 10 minutes. Please be patient. Subsequent builds should be quicker (given that the image has not been prunes). - Run container ```sh - docker run --detach --name backend-dev-container --publish 8081:8081 backend-dev + docker run --detach --name backend-dev --publish 8081:8081 backend-dev + ``` +- Open your browser at `http://127.0.0.1/8081`. + +#### With Supabase + +- Bring up the services + ```sh + docker compose --detach --file compose.dev.yaml up ``` -- Open your browser at http://127.0.0.1/8081. -- For other docker commands, see [useful_commands.md](./useful_commands.md) +- Open your browser at + - `http://127.0.0.1/8081` for app + - `http://127.0.0.1/8081` for supabase dashboard + - Username: `supabase` + - Password: `this_password_is_insecure_and_should_be_updated` + +For other docker commands, see [useful_commands.md](./useful_commands.md) ### Interactive API docs diff --git a/compose.dev.yaml b/compose.dev.yaml new file mode 100644 index 0000000..2fdb177 --- /dev/null +++ b/compose.dev.yaml @@ -0,0 +1,12 @@ +version: '3.8' + +include: + - supabase-selfhost.yaml +services: + app: + container_name: backend-dev + build: + context: . + dockerfile: Dockerfile.dev + ports: + - "8081:8081" diff --git a/supabase-selfhost.yaml b/supabase-selfhost.yaml new file mode 100644 index 0000000..8c29aee --- /dev/null +++ b/supabase-selfhost.yaml @@ -0,0 +1,388 @@ +version: "3.8" +services: + studio: + container_name: supabase-studio + image: supabase/studio:20240101-8e4a094 + restart: unless-stopped + healthcheck: + test: + [ + "CMD", + "node", + "-e", + "require('http').get('http://localhost:3000/api/profile', (r) => {if (r.statusCode !== 200) throw new Error(r.statusCode)})", + ] + timeout: 5s + interval: 5s + retries: 3 + depends_on: + analytics: + condition: service_healthy + environment: + STUDIO_PG_META_URL: http://meta:8080 + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + + DEFAULT_ORGANIZATION_NAME: ${STUDIO_DEFAULT_ORGANIZATION} + DEFAULT_PROJECT_NAME: ${STUDIO_DEFAULT_PROJECT} + + SUPABASE_URL: http://kong:8000 + SUPABASE_PUBLIC_URL: ${SUPABASE_PUBLIC_URL} + SUPABASE_ANON_KEY: ${ANON_KEY} + SUPABASE_SERVICE_KEY: ${SERVICE_ROLE_KEY} + + LOGFLARE_API_KEY: ${LOGFLARE_API_KEY} + LOGFLARE_URL: http://analytics:4000 + NEXT_PUBLIC_ENABLE_LOGS: true + # Comment to use Big Query backend for analytics + NEXT_ANALYTICS_BACKEND_PROVIDER: postgres + # Uncomment to use Big Query backend for analytics + # NEXT_ANALYTICS_BACKEND_PROVIDER: bigquery + + kong: + container_name: supabase-kong + image: kong:2.8.1 + restart: unless-stopped + # https://unix.stackexchange.com/a/294837 + entrypoint: bash -c 'eval "echo \"$$(cat ~/temp.yml)\"" > ~/kong.yml && /docker-entrypoint.sh kong docker-start' + ports: + - ${KONG_HTTP_PORT}:8000/tcp + - ${KONG_HTTPS_PORT}:8443/tcp + depends_on: + analytics: + condition: service_healthy + environment: + KONG_DATABASE: "off" + KONG_DECLARATIVE_CONFIG: /home/kong/kong.yml + # https://github.com/supabase/cli/issues/14 + KONG_DNS_ORDER: LAST,A,CNAME + KONG_PLUGINS: request-transformer,cors,key-auth,acl,basic-auth + KONG_NGINX_PROXY_PROXY_BUFFER_SIZE: 160k + KONG_NGINX_PROXY_PROXY_BUFFERS: 64 160k + SUPABASE_ANON_KEY: ${ANON_KEY} + SUPABASE_SERVICE_KEY: ${SERVICE_ROLE_KEY} + DASHBOARD_USERNAME: ${DASHBOARD_USERNAME} + DASHBOARD_PASSWORD: ${DASHBOARD_PASSWORD} + volumes: + # https://github.com/supabase/supabase/issues/12661 + - ./volumes/api/kong.yml:/home/kong/temp.yml:ro + + auth: + container_name: supabase-auth + image: supabase/gotrue:v2.132.3 + depends_on: + db: + # Disable this if you are using an external Postgres database + condition: service_healthy + analytics: + condition: service_healthy + healthcheck: + test: + [ + "CMD", + "wget", + "--no-verbose", + "--tries=1", + "--spider", + "http://localhost:9999/health", + ] + timeout: 5s + interval: 5s + retries: 3 + restart: unless-stopped + environment: + GOTRUE_API_HOST: 0.0.0.0 + GOTRUE_API_PORT: 9999 + API_EXTERNAL_URL: ${API_EXTERNAL_URL} + + GOTRUE_DB_DRIVER: postgres + GOTRUE_DB_DATABASE_URL: postgres://supabase_auth_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} + + GOTRUE_SITE_URL: ${SITE_URL} + GOTRUE_URI_ALLOW_LIST: ${ADDITIONAL_REDIRECT_URLS} + GOTRUE_DISABLE_SIGNUP: ${DISABLE_SIGNUP} + + GOTRUE_JWT_ADMIN_ROLES: service_role + GOTRUE_JWT_AUD: authenticated + GOTRUE_JWT_DEFAULT_GROUP_NAME: authenticated + GOTRUE_JWT_EXP: ${JWT_EXPIRY} + GOTRUE_JWT_SECRET: ${JWT_SECRET} + + GOTRUE_EXTERNAL_EMAIL_ENABLED: ${ENABLE_EMAIL_SIGNUP} + GOTRUE_MAILER_AUTOCONFIRM: ${ENABLE_EMAIL_AUTOCONFIRM} + # GOTRUE_MAILER_SECURE_EMAIL_CHANGE_ENABLED: true + # GOTRUE_SMTP_MAX_FREQUENCY: 1s + GOTRUE_SMTP_ADMIN_EMAIL: ${SMTP_ADMIN_EMAIL} + GOTRUE_SMTP_HOST: ${SMTP_HOST} + GOTRUE_SMTP_PORT: ${SMTP_PORT} + GOTRUE_SMTP_USER: ${SMTP_USER} + GOTRUE_SMTP_PASS: ${SMTP_PASS} + GOTRUE_SMTP_SENDER_NAME: ${SMTP_SENDER_NAME} + GOTRUE_MAILER_URLPATHS_INVITE: ${MAILER_URLPATHS_INVITE} + GOTRUE_MAILER_URLPATHS_CONFIRMATION: ${MAILER_URLPATHS_CONFIRMATION} + GOTRUE_MAILER_URLPATHS_RECOVERY: ${MAILER_URLPATHS_RECOVERY} + GOTRUE_MAILER_URLPATHS_EMAIL_CHANGE: ${MAILER_URLPATHS_EMAIL_CHANGE} + + GOTRUE_EXTERNAL_PHONE_ENABLED: ${ENABLE_PHONE_SIGNUP} + GOTRUE_SMS_AUTOCONFIRM: ${ENABLE_PHONE_AUTOCONFIRM} + + rest: + container_name: supabase-rest + image: postgrest/postgrest:v12.0.1 + depends_on: + db: + # Disable this if you are using an external Postgres database + condition: service_healthy + analytics: + condition: service_healthy + restart: unless-stopped + environment: + PGRST_DB_URI: postgres://authenticator:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} + PGRST_DB_SCHEMAS: ${PGRST_DB_SCHEMAS} + PGRST_DB_ANON_ROLE: anon + PGRST_JWT_SECRET: ${JWT_SECRET} + PGRST_DB_USE_LEGACY_GUCS: "false" + PGRST_APP_SETTINGS_JWT_SECRET: ${JWT_SECRET} + PGRST_APP_SETTINGS_JWT_EXP: ${JWT_EXPIRY} + command: "postgrest" + + realtime: + # This container name looks inconsistent but is correct because realtime constructs tenant id by parsing the subdomain + container_name: realtime-dev.supabase-realtime + image: supabase/realtime:v2.25.50 + depends_on: + db: + # Disable this if you are using an external Postgres database + condition: service_healthy + analytics: + condition: service_healthy + healthcheck: + test: ["CMD", "bash", "-c", "printf \\0 > /dev/tcp/localhost/4000"] + timeout: 5s + interval: 5s + retries: 3 + restart: unless-stopped + environment: + PORT: 4000 + DB_HOST: ${POSTGRES_HOST} + DB_PORT: ${POSTGRES_PORT} + DB_USER: supabase_admin + DB_PASSWORD: ${POSTGRES_PASSWORD} + DB_NAME: ${POSTGRES_DB} + DB_AFTER_CONNECT_QUERY: "SET search_path TO _realtime" + DB_ENC_KEY: supabaserealtime + API_JWT_SECRET: ${JWT_SECRET} + FLY_ALLOC_ID: fly123 + FLY_APP_NAME: realtime + SECRET_KEY_BASE: UpNVntn3cDxHJpq99YMc1T1AQgQpc8kfYTuRgBiYa15BLrx8etQoXz3gZv1/u2oq + ERL_AFLAGS: -proto_dist inet_tcp + ENABLE_TAILSCALE: "false" + DNS_NODES: "''" + command: > + sh -c "/app/bin/migrate && /app/bin/realtime eval 'Realtime.Release.seeds(Realtime.Repo)' && /app/bin/server" + + storage: + container_name: supabase-storage + image: supabase/storage-api:v0.46.4 + depends_on: + db: + # Disable this if you are using an external Postgres database + condition: service_healthy + rest: + condition: service_started + imgproxy: + condition: service_started + healthcheck: + test: + [ + "CMD", + "wget", + "--no-verbose", + "--tries=1", + "--spider", + "http://localhost:5000/status", + ] + timeout: 5s + interval: 5s + retries: 3 + restart: unless-stopped + environment: + ANON_KEY: ${ANON_KEY} + SERVICE_KEY: ${SERVICE_ROLE_KEY} + POSTGREST_URL: http://rest:3000 + PGRST_JWT_SECRET: ${JWT_SECRET} + DATABASE_URL: postgres://supabase_storage_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} + FILE_SIZE_LIMIT: 52428800 + STORAGE_BACKEND: file + FILE_STORAGE_BACKEND_PATH: /var/lib/storage + TENANT_ID: stub + # TODO: https://github.com/supabase/storage-api/issues/55 + REGION: stub + GLOBAL_S3_BUCKET: stub + ENABLE_IMAGE_TRANSFORMATION: "true" + IMGPROXY_URL: http://imgproxy:5001 + volumes: + - ./volumes/storage:/var/lib/storage:z + + imgproxy: + container_name: supabase-imgproxy + image: darthsim/imgproxy:v3.8.0 + healthcheck: + test: ["CMD", "imgproxy", "health"] + timeout: 5s + interval: 5s + retries: 3 + environment: + IMGPROXY_BIND: ":5001" + IMGPROXY_LOCAL_FILESYSTEM_ROOT: / + IMGPROXY_USE_ETAG: "true" + IMGPROXY_ENABLE_WEBP_DETECTION: ${IMGPROXY_ENABLE_WEBP_DETECTION} + volumes: + - ./volumes/storage:/var/lib/storage:z + + meta: + container_name: supabase-meta + image: supabase/postgres-meta:v0.75.0 + depends_on: + db: + # Disable this if you are using an external Postgres database + condition: service_healthy + analytics: + condition: service_healthy + restart: unless-stopped + environment: + PG_META_PORT: 8080 + PG_META_DB_HOST: ${POSTGRES_HOST} + PG_META_DB_PORT: ${POSTGRES_PORT} + PG_META_DB_NAME: ${POSTGRES_DB} + PG_META_DB_USER: supabase_admin + PG_META_DB_PASSWORD: ${POSTGRES_PASSWORD} + + functions: + container_name: supabase-edge-functions + image: supabase/edge-runtime:v1.33.5 + restart: unless-stopped + depends_on: + analytics: + condition: service_healthy + environment: + JWT_SECRET: ${JWT_SECRET} + SUPABASE_URL: http://kong:8000 + SUPABASE_ANON_KEY: ${ANON_KEY} + SUPABASE_SERVICE_ROLE_KEY: ${SERVICE_ROLE_KEY} + SUPABASE_DB_URL: postgresql://postgres:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} + # TODO: Allow configuring VERIFY_JWT per function. This PR might help: https://github.com/supabase/cli/pull/786 + VERIFY_JWT: "${FUNCTIONS_VERIFY_JWT}" + volumes: + - ./volumes/functions:/home/deno/functions:Z + command: + - start + - --main-service + - /home/deno/functions/main + + analytics: + container_name: supabase-analytics + image: supabase/logflare:1.4.0 + healthcheck: + test: ["CMD", "curl", "http://localhost:4000/health"] + timeout: 5s + interval: 5s + retries: 10 + restart: unless-stopped + depends_on: + db: + # Disable this if you are using an external Postgres database + condition: service_healthy + # Uncomment to use Big Query backend for analytics + # volumes: + # - type: bind + # source: ${PWD}/gcloud.json + # target: /opt/app/rel/logflare/bin/gcloud.json + # read_only: true + environment: + LOGFLARE_NODE_HOST: 127.0.0.1 + DB_USERNAME: supabase_admin + DB_DATABASE: ${POSTGRES_DB} + DB_HOSTNAME: ${POSTGRES_HOST} + DB_PORT: ${POSTGRES_PORT} + DB_PASSWORD: ${POSTGRES_PASSWORD} + DB_SCHEMA: _analytics + LOGFLARE_API_KEY: ${LOGFLARE_API_KEY} + LOGFLARE_SINGLE_TENANT: true + LOGFLARE_SUPABASE_MODE: true + + # Comment variables to use Big Query backend for analytics + POSTGRES_BACKEND_URL: postgresql://supabase_admin:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB} + POSTGRES_BACKEND_SCHEMA: _analytics + LOGFLARE_FEATURE_FLAG_OVERRIDE: multibackend=true + # Uncomment to use Big Query backend for analytics + # GOOGLE_PROJECT_ID: ${GOOGLE_PROJECT_ID} + # GOOGLE_PROJECT_NUMBER: ${GOOGLE_PROJECT_NUMBER} + ports: + - 4000:4000 + + # Comment out everything below this point if you are using an external Postgres database + db: + container_name: supabase-db + image: supabase/postgres:15.1.0.147 + healthcheck: + test: pg_isready -U postgres -h localhost + interval: 5s + timeout: 5s + retries: 10 + depends_on: + vector: + condition: service_healthy + command: + - postgres + - -c + - config_file=/etc/postgresql/postgresql.conf + - -c + - log_min_messages=fatal # prevents Realtime polling queries from appearing in logs + restart: unless-stopped + ports: + # Pass down internal port because it's set dynamically by other services + - ${POSTGRES_PORT}:${POSTGRES_PORT} + environment: + POSTGRES_HOST: /var/run/postgresql + PGPORT: ${POSTGRES_PORT} + POSTGRES_PORT: ${POSTGRES_PORT} + PGPASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + PGDATABASE: ${POSTGRES_DB} + POSTGRES_DB: ${POSTGRES_DB} + JWT_SECRET: ${JWT_SECRET} + JWT_EXP: ${JWT_EXPIRY} + volumes: + - ./volumes/db/realtime.sql:/docker-entrypoint-initdb.d/migrations/99-realtime.sql:Z + # Must be superuser to create event trigger + - ./volumes/db/webhooks.sql:/docker-entrypoint-initdb.d/init-scripts/98-webhooks.sql:Z + # Must be superuser to alter reserved role + - ./volumes/db/roles.sql:/docker-entrypoint-initdb.d/init-scripts/99-roles.sql:Z + # Initialize the database settings with JWT_SECRET and JWT_EXP + - ./volumes/db/jwt.sql:/docker-entrypoint-initdb.d/init-scripts/99-jwt.sql:Z + # PGDATA directory is persisted between restarts + - ./volumes/db/data:/var/lib/postgresql/data:Z + # Changes required for Analytics support + - ./volumes/db/logs.sql:/docker-entrypoint-initdb.d/migrations/99-logs.sql:Z + + vector: + container_name: supabase-vector + image: timberio/vector:0.28.1-alpine + healthcheck: + test: + [ + "CMD", + "wget", + "--no-verbose", + "--tries=1", + "--spider", + "http://vector:9001/health", + ] + timeout: 5s + interval: 5s + retries: 3 + volumes: + - ./volumes/logs/vector.yml:/etc/vector/vector.yml:ro + - ${DOCKER_SOCKET_LOCATION}:/var/run/docker.sock:ro + + command: ["--config", "etc/vector/vector.yml"] diff --git a/useful_commands.md b/useful_commands.md index 75f3fc1..158e69b 100644 --- a/useful_commands.md +++ b/useful_commands.md @@ -7,14 +7,18 @@ - [Git hooks](#git-hooks) - [Install git hooks](#install-git-hooks) - [Updating hooks automatically](#updating-hooks-automatically) -- [Jupyter Lab](#jupyter-lab) - - [Opening jupyter lab](#opening-jupyter-lab) - [Docker](#docker) - - [List all docker processes](#list-all-docker-processes) - - [Building the images](#building-the-images) - - [Starting the containers](#starting-the-containers) - - [Stopping the containers](#stopping-the-containers) - - [Restarting the containers](#restarting-the-containers) + - [Dockerfile](#dockerfile) + - [List all docker processes](#list-all-docker-processes) + - [Build the images](#build-the-images) + - [Start the containers](#start-the-containers) + - [Stop the containers](#stop-the-containers) + - [Restart the containers](#restart-the-containers) + - [Compose](#compose) + - [List all docker processes](#list-all-docker-processes-1) + - [Build the services](#build-the-services) + - [Bring up the services](#bring-up-the-services) + - [Build and bring up the services](#build-and-bring-up-the-services) ## Poetry @@ -50,23 +54,17 @@ pre-commit install --hook-type commit-msg --hook-type pre-push --hook-type pre-c pre-commit autoupdate ``` -## Jupyter Lab - -### Opening jupyter lab - -```sh -jupyter lab -``` - ## Docker -### List all docker processes +### Dockerfile + +#### List all docker processes ```sh docker ps ``` -### Building the images +#### Build the images ```sh docker build --file Dockerfile.dev --tag backend-dev . @@ -74,26 +72,53 @@ docker build --file Dockerfile.staging --tag backend-staging . docker build --file Dockerfile.prod --tag backend-prod . ``` -### Starting the containers +#### Start the containers ```sh -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 +docker run --detach --name backend-dev --publish 8081:8081 backend-dev +docker run --detach --name backend-staging --publish 80:80 backend-staging +docker run --detach --name backend-prod --publish 80:80 backend-prod ``` -### Stopping the containers +#### Stop the containers ```sh -docker stop backend-dev-container -docker stop backend-staging-container -docker stop backend-prod-container +docker stop backend-dev +docker stop backend-staging +docker stop backend-prod ``` -### Restarting the containers +#### Restart the containers ```sh -docker restart backend-dev-container -docker restart backend-staging-container -docker restart backend-prod-container -``` \ No newline at end of file +docker restart backend-dev +docker restart backend-staging +docker restart backend-prod +``` + +### Compose + +#### List all docker processes + +```sh +docker compose --file compose.dev.yaml ps +``` + +#### Build the services + +```sh +docker compose --file compose.dev.yaml build +``` + +#### Bring up the services + +```sh +docker compose --detach --file compose.dev.yaml up +``` + + +#### Build and bring up the services + +```sh +docker compose --detach --file compose.dev.yaml up --build +``` diff --git a/volumes/api/kong.yml b/volumes/api/kong.yml new file mode 100644 index 0000000..4a07995 --- /dev/null +++ b/volumes/api/kong.yml @@ -0,0 +1,223 @@ +_format_version: '2.1' +_transform: true + +### +### Consumers / Users +### +consumers: + - username: DASHBOARD + - username: anon + keyauth_credentials: + - key: $SUPABASE_ANON_KEY + - username: service_role + keyauth_credentials: + - key: $SUPABASE_SERVICE_KEY + +### +### Access Control List +### +acls: + - consumer: anon + group: anon + - consumer: service_role + group: admin + +### +### Dashboard credentials +### +basicauth_credentials: +- consumer: DASHBOARD + username: $DASHBOARD_USERNAME + password: $DASHBOARD_PASSWORD + + +### +### API Routes +### +services: + + ## Open Auth routes + - name: auth-v1-open + url: http://auth:9999/verify + routes: + - name: auth-v1-open + strip_path: true + paths: + - /auth/v1/verify + plugins: + - name: cors + - name: auth-v1-open-callback + url: http://auth:9999/callback + routes: + - name: auth-v1-open-callback + strip_path: true + paths: + - /auth/v1/callback + plugins: + - name: cors + - name: auth-v1-open-authorize + url: http://auth:9999/authorize + routes: + - name: auth-v1-open-authorize + strip_path: true + paths: + - /auth/v1/authorize + plugins: + - name: cors + + ## Secure Auth routes + - name: auth-v1 + _comment: 'GoTrue: /auth/v1/* -> http://auth:9999/*' + url: http://auth:9999/ + routes: + - name: auth-v1-all + strip_path: true + paths: + - /auth/v1/ + plugins: + - name: cors + - name: key-auth + config: + hide_credentials: false + - name: acl + config: + hide_groups_header: true + allow: + - admin + - anon + + ## Secure REST routes + - name: rest-v1 + _comment: 'PostgREST: /rest/v1/* -> http://rest:3000/*' + url: http://rest:3000/ + routes: + - name: rest-v1-all + strip_path: true + paths: + - /rest/v1/ + plugins: + - name: cors + - name: key-auth + config: + hide_credentials: true + - name: acl + config: + hide_groups_header: true + allow: + - admin + - anon + + ## Secure GraphQL routes + - name: graphql-v1 + _comment: 'PostgREST: /graphql/v1/* -> http://rest:3000/rpc/graphql' + url: http://rest:3000/rpc/graphql + routes: + - name: graphql-v1-all + strip_path: true + paths: + - /graphql/v1 + plugins: + - name: cors + - name: key-auth + config: + hide_credentials: true + - name: request-transformer + config: + add: + headers: + - Content-Profile:graphql_public + - name: acl + config: + hide_groups_header: true + allow: + - admin + - anon + + ## Secure Realtime routes + - name: realtime-v1 + _comment: 'Realtime: /realtime/v1/* -> ws://realtime:4000/socket/*' + url: http://realtime-dev.supabase-realtime:4000/socket/ + routes: + - name: realtime-v1-all + strip_path: true + paths: + - /realtime/v1/ + plugins: + - name: cors + - name: key-auth + config: + hide_credentials: false + - name: acl + config: + hide_groups_header: true + allow: + - admin + - anon + + ## Storage routes: the storage server manages its own auth + - name: storage-v1 + _comment: 'Storage: /storage/v1/* -> http://storage:5000/*' + url: http://storage:5000/ + routes: + - name: storage-v1-all + strip_path: true + paths: + - /storage/v1/ + plugins: + - name: cors + + ## Edge Functions routes + - name: functions-v1 + _comment: 'Edge Functions: /functions/v1/* -> http://functions:9000/*' + url: http://functions:9000/ + routes: + - name: functions-v1-all + strip_path: true + paths: + - /functions/v1/ + plugins: + - name: cors + + ## Analytics routes + - name: analytics-v1 + _comment: 'Analytics: /analytics/v1/* -> http://logflare:4000/*' + url: http://analytics:4000/ + routes: + - name: analytics-v1-all + strip_path: true + paths: + - /analytics/v1/ + + ## Secure Database routes + - name: meta + _comment: 'pg-meta: /pg/* -> http://pg-meta:8080/*' + url: http://meta:8080/ + routes: + - name: meta-all + strip_path: true + paths: + - /pg/ + plugins: + - name: key-auth + config: + hide_credentials: false + - name: acl + config: + hide_groups_header: true + allow: + - admin + + ## Protected Dashboard - catch all remaining routes + - name: dashboard + _comment: 'Studio: /* -> http://studio:3000/*' + url: http://studio:3000/ + routes: + - name: dashboard-all + strip_path: true + paths: + - / + plugins: + - name: cors + - name: basic-auth + config: + hide_credentials: true diff --git a/volumes/db/init/data.sql b/volumes/db/init/data.sql new file mode 100755 index 0000000..e69de29 diff --git a/volumes/db/jwt.sql b/volumes/db/jwt.sql new file mode 100644 index 0000000..cfd3b16 --- /dev/null +++ b/volumes/db/jwt.sql @@ -0,0 +1,5 @@ +\set jwt_secret `echo "$JWT_SECRET"` +\set jwt_exp `echo "$JWT_EXP"` + +ALTER DATABASE postgres SET "app.settings.jwt_secret" TO :'jwt_secret'; +ALTER DATABASE postgres SET "app.settings.jwt_exp" TO :'jwt_exp'; diff --git a/volumes/db/logs.sql b/volumes/db/logs.sql new file mode 100644 index 0000000..22fc247 --- /dev/null +++ b/volumes/db/logs.sql @@ -0,0 +1,4 @@ +\set pguser `echo "$POSTGRES_USER"` + +create schema if not exists _analytics; +alter schema _analytics owner to :pguser; diff --git a/volumes/db/realtime.sql b/volumes/db/realtime.sql new file mode 100644 index 0000000..4d4b9ff --- /dev/null +++ b/volumes/db/realtime.sql @@ -0,0 +1,4 @@ +\set pguser `echo "$POSTGRES_USER"` + +create schema if not exists _realtime; +alter schema _realtime owner to :pguser; diff --git a/volumes/db/roles.sql b/volumes/db/roles.sql new file mode 100644 index 0000000..8f7161a --- /dev/null +++ b/volumes/db/roles.sql @@ -0,0 +1,8 @@ +-- NOTE: change to your own passwords for production environments +\set pgpass `echo "$POSTGRES_PASSWORD"` + +ALTER USER authenticator WITH PASSWORD :'pgpass'; +ALTER USER pgbouncer WITH PASSWORD :'pgpass'; +ALTER USER supabase_auth_admin WITH PASSWORD :'pgpass'; +ALTER USER supabase_functions_admin WITH PASSWORD :'pgpass'; +ALTER USER supabase_storage_admin WITH PASSWORD :'pgpass'; diff --git a/volumes/db/webhooks.sql b/volumes/db/webhooks.sql new file mode 100644 index 0000000..5837b86 --- /dev/null +++ b/volumes/db/webhooks.sql @@ -0,0 +1,208 @@ +BEGIN; + -- Create pg_net extension + CREATE EXTENSION IF NOT EXISTS pg_net SCHEMA extensions; + -- Create supabase_functions schema + CREATE SCHEMA supabase_functions AUTHORIZATION supabase_admin; + GRANT USAGE ON SCHEMA supabase_functions TO postgres, anon, authenticated, service_role; + ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON TABLES TO postgres, anon, authenticated, service_role; + ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON FUNCTIONS TO postgres, anon, authenticated, service_role; + ALTER DEFAULT PRIVILEGES IN SCHEMA supabase_functions GRANT ALL ON SEQUENCES TO postgres, anon, authenticated, service_role; + -- supabase_functions.migrations definition + CREATE TABLE supabase_functions.migrations ( + version text PRIMARY KEY, + inserted_at timestamptz NOT NULL DEFAULT NOW() + ); + -- Initial supabase_functions migration + INSERT INTO supabase_functions.migrations (version) VALUES ('initial'); + -- supabase_functions.hooks definition + CREATE TABLE supabase_functions.hooks ( + id bigserial PRIMARY KEY, + hook_table_id integer NOT NULL, + hook_name text NOT NULL, + created_at timestamptz NOT NULL DEFAULT NOW(), + request_id bigint + ); + CREATE INDEX supabase_functions_hooks_request_id_idx ON supabase_functions.hooks USING btree (request_id); + CREATE INDEX supabase_functions_hooks_h_table_id_h_name_idx ON supabase_functions.hooks USING btree (hook_table_id, hook_name); + COMMENT ON TABLE supabase_functions.hooks IS 'Supabase Functions Hooks: Audit trail for triggered hooks.'; + CREATE FUNCTION supabase_functions.http_request() + RETURNS trigger + LANGUAGE plpgsql + AS $function$ + DECLARE + request_id bigint; + payload jsonb; + url text := TG_ARGV[0]::text; + method text := TG_ARGV[1]::text; + headers jsonb DEFAULT '{}'::jsonb; + params jsonb DEFAULT '{}'::jsonb; + timeout_ms integer DEFAULT 1000; + BEGIN + IF url IS NULL OR url = 'null' THEN + RAISE EXCEPTION 'url argument is missing'; + END IF; + + IF method IS NULL OR method = 'null' THEN + RAISE EXCEPTION 'method argument is missing'; + END IF; + + IF TG_ARGV[2] IS NULL OR TG_ARGV[2] = 'null' THEN + headers = '{"Content-Type": "application/json"}'::jsonb; + ELSE + headers = TG_ARGV[2]::jsonb; + END IF; + + IF TG_ARGV[3] IS NULL OR TG_ARGV[3] = 'null' THEN + params = '{}'::jsonb; + ELSE + params = TG_ARGV[3]::jsonb; + END IF; + + IF TG_ARGV[4] IS NULL OR TG_ARGV[4] = 'null' THEN + timeout_ms = 1000; + ELSE + timeout_ms = TG_ARGV[4]::integer; + END IF; + + CASE + WHEN method = 'GET' THEN + SELECT http_get INTO request_id FROM net.http_get( + url, + params, + headers, + timeout_ms + ); + WHEN method = 'POST' THEN + payload = jsonb_build_object( + 'old_record', OLD, + 'record', NEW, + 'type', TG_OP, + 'table', TG_TABLE_NAME, + 'schema', TG_TABLE_SCHEMA + ); + + SELECT http_post INTO request_id FROM net.http_post( + url, + payload, + params, + headers, + timeout_ms + ); + ELSE + RAISE EXCEPTION 'method argument % is invalid', method; + END CASE; + + INSERT INTO supabase_functions.hooks + (hook_table_id, hook_name, request_id) + VALUES + (TG_RELID, TG_NAME, request_id); + + RETURN NEW; + END + $function$; + -- Supabase super admin + DO + $$ + BEGIN + IF NOT EXISTS ( + SELECT 1 + FROM pg_roles + WHERE rolname = 'supabase_functions_admin' + ) + THEN + CREATE USER supabase_functions_admin NOINHERIT CREATEROLE LOGIN NOREPLICATION; + END IF; + END + $$; + GRANT ALL PRIVILEGES ON SCHEMA supabase_functions TO supabase_functions_admin; + GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA supabase_functions TO supabase_functions_admin; + GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA supabase_functions TO supabase_functions_admin; + ALTER USER supabase_functions_admin SET search_path = "supabase_functions"; + ALTER table "supabase_functions".migrations OWNER TO supabase_functions_admin; + ALTER table "supabase_functions".hooks OWNER TO supabase_functions_admin; + ALTER function "supabase_functions".http_request() OWNER TO supabase_functions_admin; + GRANT supabase_functions_admin TO postgres; + -- Remove unused supabase_pg_net_admin role + DO + $$ + BEGIN + IF EXISTS ( + SELECT 1 + FROM pg_roles + WHERE rolname = 'supabase_pg_net_admin' + ) + THEN + REASSIGN OWNED BY supabase_pg_net_admin TO supabase_admin; + DROP OWNED BY supabase_pg_net_admin; + DROP ROLE supabase_pg_net_admin; + END IF; + END + $$; + -- pg_net grants when extension is already enabled + DO + $$ + BEGIN + IF EXISTS ( + SELECT 1 + FROM pg_extension + WHERE extname = 'pg_net' + ) + THEN + GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role; + ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; + ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; + ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; + ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; + REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; + REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; + GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; + GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; + END IF; + END + $$; + -- Event trigger for pg_net + CREATE OR REPLACE FUNCTION extensions.grant_pg_net_access() + RETURNS event_trigger + LANGUAGE plpgsql + AS $$ + BEGIN + IF EXISTS ( + SELECT 1 + FROM pg_event_trigger_ddl_commands() AS ev + JOIN pg_extension AS ext + ON ev.objid = ext.oid + WHERE ext.extname = 'pg_net' + ) + THEN + GRANT USAGE ON SCHEMA net TO supabase_functions_admin, postgres, anon, authenticated, service_role; + ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; + ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SECURITY DEFINER; + ALTER function net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; + ALTER function net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) SET search_path = net; + REVOKE ALL ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; + REVOKE ALL ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) FROM PUBLIC; + GRANT EXECUTE ON FUNCTION net.http_get(url text, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; + GRANT EXECUTE ON FUNCTION net.http_post(url text, body jsonb, params jsonb, headers jsonb, timeout_milliseconds integer) TO supabase_functions_admin, postgres, anon, authenticated, service_role; + END IF; + END; + $$; + COMMENT ON FUNCTION extensions.grant_pg_net_access IS 'Grants access to pg_net'; + DO + $$ + BEGIN + IF NOT EXISTS ( + SELECT 1 + FROM pg_event_trigger + WHERE evtname = 'issue_pg_net_access' + ) THEN + CREATE EVENT TRIGGER issue_pg_net_access ON ddl_command_end WHEN TAG IN ('CREATE EXTENSION') + EXECUTE PROCEDURE extensions.grant_pg_net_access(); + END IF; + END + $$; + INSERT INTO supabase_functions.migrations (version) VALUES ('20210809183423_update_grants'); + ALTER function supabase_functions.http_request() SECURITY DEFINER; + ALTER function supabase_functions.http_request() SET search_path = supabase_functions; + REVOKE ALL ON FUNCTION supabase_functions.http_request() FROM PUBLIC; + GRANT EXECUTE ON FUNCTION supabase_functions.http_request() TO postgres, anon, authenticated, service_role; +COMMIT; diff --git a/volumes/functions/hello/index.ts b/volumes/functions/hello/index.ts new file mode 100644 index 0000000..0447d32 --- /dev/null +++ b/volumes/functions/hello/index.ts @@ -0,0 +1,15 @@ +// Follow this setup guide to integrate the Deno language server with your editor: +// https://deno.land/manual/getting_started/setup_your_environment +// This enables autocomplete, go to definition, etc. + +import { serve } from "https://deno.land/std@0.177.1/http/server.ts"; + +serve(async () => { + return new Response(`"Hello from Edge Functions!"`, { + headers: { "Content-Type": "application/json" }, + }); +}); + +// To invoke: +// curl 'http://localhost:/functions/v1/hello' \ +// --header 'Authorization: Bearer ' diff --git a/volumes/functions/main/index.ts b/volumes/functions/main/index.ts new file mode 100644 index 0000000..f406e21 --- /dev/null +++ b/volumes/functions/main/index.ts @@ -0,0 +1,94 @@ +import { serve } from "https://deno.land/std@0.131.0/http/server.ts"; +import * as jose from "https://deno.land/x/jose@v4.14.4/index.ts"; + +console.log("main function started"); + +const JWT_SECRET = Deno.env.get("JWT_SECRET"); +const VERIFY_JWT = Deno.env.get("VERIFY_JWT") === "true"; + +function getAuthToken(req: Request) { + const authHeader = req.headers.get("authorization"); + if (!authHeader) { + throw new Error("Missing authorization header"); + } + const [bearer, token] = authHeader.split(" "); + if (bearer !== "Bearer") { + throw new Error(`Auth header is not 'Bearer {token}'`); + } + return token; +} + +async function verifyJWT(jwt: string): Promise { + const encoder = new TextEncoder(); + const secretKey = encoder.encode(JWT_SECRET); + try { + await jose.jwtVerify(jwt, secretKey); + } catch (err) { + console.error(err); + return false; + } + return true; +} + +serve(async (req: Request) => { + if (req.method !== "OPTIONS" && VERIFY_JWT) { + try { + const token = getAuthToken(req); + const isValidJWT = await verifyJWT(token); + + if (!isValidJWT) { + return new Response(JSON.stringify({ msg: "Invalid JWT" }), { + status: 401, + headers: { "Content-Type": "application/json" }, + }); + } + } catch (e) { + console.error(e); + return new Response(JSON.stringify({ msg: e.toString() }), { + status: 401, + headers: { "Content-Type": "application/json" }, + }); + } + } + + const url = new URL(req.url); + const { pathname } = url; + const path_parts = pathname.split("/"); + const service_name = path_parts[1]; + + if (!service_name || service_name === "") { + const error = { msg: "missing function name in request" }; + return new Response(JSON.stringify(error), { + status: 400, + headers: { "Content-Type": "application/json" }, + }); + } + + const servicePath = `/home/deno/functions/${service_name}`; + console.error(`serving the request with ${servicePath}`); + + const memoryLimitMb = 150; + const workerTimeoutMs = 1 * 60 * 1000; + const noModuleCache = false; + const importMapPath = null; + const envVarsObj = Deno.env.toObject(); + const envVars = Object.keys(envVarsObj).map((k) => [k, envVarsObj[k]]); + + try { + const worker = await EdgeRuntime.userWorkers.create({ + servicePath, + memoryLimitMb, + workerTimeoutMs, + noModuleCache, + importMapPath, + envVars, + }); + return await worker.fetch(req); + } catch (e) { + const error = { msg: e.toString() }; + return new Response(JSON.stringify(error), { + status: 500, + headers: { "Content-Type": "application/json" }, + }); + } +}); diff --git a/volumes/logs/vector.yml b/volumes/logs/vector.yml new file mode 100644 index 0000000..ef5cdbe --- /dev/null +++ b/volumes/logs/vector.yml @@ -0,0 +1,232 @@ +api: + enabled: true + address: 0.0.0.0:9001 + +sources: + docker_host: + type: docker_logs + exclude_containers: + - supabase-vector + +transforms: + project_logs: + type: remap + inputs: + - docker_host + source: |- + .project = "default" + .event_message = del(.message) + .appname = del(.container_name) + del(.container_created_at) + del(.container_id) + del(.source_type) + del(.stream) + del(.label) + del(.image) + del(.host) + del(.stream) + router: + type: route + inputs: + - project_logs + route: + kong: '.appname == "supabase-kong"' + auth: '.appname == "supabase-auth"' + rest: '.appname == "supabase-rest"' + realtime: '.appname == "supabase-realtime"' + storage: '.appname == "supabase-storage"' + functions: '.appname == "supabase-functions"' + db: '.appname == "supabase-db"' + # Ignores non nginx errors since they are related with kong booting up + kong_logs: + type: remap + inputs: + - router.kong + source: |- + req, err = parse_nginx_log(.event_message, "combined") + if err == null { + .timestamp = req.timestamp + .metadata.request.headers.referer = req.referer + .metadata.request.headers.user_agent = req.agent + .metadata.request.headers.cf_connecting_ip = req.client + .metadata.request.method = req.method + .metadata.request.path = req.path + .metadata.request.protocol = req.protocol + .metadata.response.status_code = req.status + } + if err != null { + abort + } + # Ignores non nginx errors since they are related with kong booting up + kong_err: + type: remap + inputs: + - router.kong + source: |- + .metadata.request.method = "GET" + .metadata.response.status_code = 200 + parsed, err = parse_nginx_log(.event_message, "error") + if err == null { + .timestamp = parsed.timestamp + .severity = parsed.severity + .metadata.request.host = parsed.host + .metadata.request.headers.cf_connecting_ip = parsed.client + url, err = split(parsed.request, " ") + if err == null { + .metadata.request.method = url[0] + .metadata.request.path = url[1] + .metadata.request.protocol = url[2] + } + } + if err != null { + abort + } + # Gotrue logs are structured json strings which frontend parses directly. But we keep metadata for consistency. + auth_logs: + type: remap + inputs: + - router.auth + source: |- + parsed, err = parse_json(.event_message) + if err == null { + .metadata.timestamp = parsed.time + .metadata = merge!(.metadata, parsed) + } + # PostgREST logs are structured so we separate timestamp from message using regex + rest_logs: + type: remap + inputs: + - router.rest + source: |- + parsed, err = parse_regex(.event_message, r'^(?P