mirror of
https://github.com/MoonlitJolteon/frc-stat-predictor.git
synced 2025-11-02 14:05:01 +00:00
Added abstract data_source class and tba datasource
This commit is contained in:
52
data_sources/base.py
Normal file
52
data_sources/base.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
from abc import ABC, abstractmethod
|
||||||
|
from enum import Enum
|
||||||
|
|
||||||
|
|
||||||
|
class DataSourceStatus(Enum):
|
||||||
|
CONNECTED = 1
|
||||||
|
UNAUTHENTICATED = 2
|
||||||
|
NOT_FOUND = 3
|
||||||
|
|
||||||
|
|
||||||
|
class DataSource(ABC):
|
||||||
|
"""Abstract base class for all data sources"""
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_status(self) -> tuple[DataSourceStatus, dict]:
|
||||||
|
"""
|
||||||
|
Retrieves the status of the data source along with any additional information.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
-------
|
||||||
|
tuple[DataSourceStatus, dict]
|
||||||
|
A tuple containing the data source status and a dictionary.
|
||||||
|
The dictionary may include extra information under the keys "errors" and "extra_info".
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
-----
|
||||||
|
The errors and extra_info may be missing if there is nothing to be sent in them.
|
||||||
|
"""
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_team_data(self, team_number: int):
|
||||||
|
"""Retrieve data for a specific team
|
||||||
|
team_number: int
|
||||||
|
The team you want to retrieve data for
|
||||||
|
"""
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_event_matches(self, event_code: str):
|
||||||
|
"""Retrieve matches for a specific event
|
||||||
|
event_code: str
|
||||||
|
The eventcode for the event you want to retrieve match data from
|
||||||
|
"""
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def get_team_performance_metrics(self, team_number, event_code=None):
|
||||||
|
"""Get performance metrics for a team, optionally at a specific event
|
||||||
|
|
||||||
|
team_number: int
|
||||||
|
The team you want to retrieve data for
|
||||||
|
|
||||||
|
(Optional) event_code: str | None
|
||||||
|
The eventcode for the event you want to retrieve match data from"""
|
||||||
35
data_sources/tba.py
Normal file
35
data_sources/tba.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import requests
|
||||||
|
from data_sources.base import DataSource, DataSourceStatus
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
|
class TheBlueAllianceConnector(DataSource):
|
||||||
|
"""Data source to handle pulling data from TheBlueAlliance.com"""
|
||||||
|
|
||||||
|
def __init__(self, api_token: str, year=datetime.now().year):
|
||||||
|
"""
|
||||||
|
Initializes the class instance with an API token and a specific year.
|
||||||
|
|
||||||
|
Args
|
||||||
|
-----
|
||||||
|
api_token : str
|
||||||
|
The authentication token required for API access.
|
||||||
|
year : int, optional
|
||||||
|
The year for which data will be retrieved. Defaults to the current year.
|
||||||
|
"""
|
||||||
|
self.__api_token = api_token
|
||||||
|
self.__observed_year = year
|
||||||
|
self.__base_url = "https://www.thebluealliance.com/api/v3"
|
||||||
|
self._headers = {"X-TBA-Auth-Key": self.__api_token}
|
||||||
|
|
||||||
|
def get_status(self) -> tuple[DataSourceStatus, dict]:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_team_data(self, team_number: int):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_event_matches(self, event_code: str):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def get_team_performance_metrics(self, team_number, event_code=None):
|
||||||
|
pass
|
||||||
Reference in New Issue
Block a user