Added ISA DataSource

This commit is contained in:
2025-04-15 10:47:01 -04:00
parent 9854b84947
commit 252179ee80
2 changed files with 69 additions and 0 deletions

0
app.py
View File

69
data_sources/isa.py Normal file
View File

@ -0,0 +1,69 @@
import requests
from data_sources.base import DataSource, DataSourceStatus
from datetime import datetime
class IndianaScoutingAllianceConnector(DataSource):
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://isa2025-api.liujip2020.workers.dev/public/REPLACEME/json?"
)
self.__headers = {"Authorization": f"Bearer {self.__api_token}"}
def __build_ISA_robot_url(
self, include_flags: str, teams: list = [], event_key: str = ""
):
url = f"{self.__base_url}&include={include_flags}"
if not teams == None:
url += f"&team={','.join(teams)}"
if not event_key == None:
url += f"&event={event_key}"
url = url.replace("REPLACEME", "robots")
return url
def __build_ISA_human_url(
self, include_flags: str, teams: list = [], event_key: str = ""
):
url = f"{self.__base_url}&include={include_flags}"
if len(teams):
url += f"&team={','.join(teams)}"
if len(event_key):
url += f"&event={event_key}"
url = url.replace("REPLACEME", "humans")
return url
def get_status(self):
url = self.__build_ISA_human_url("100000000000000")
response = requests.get(url, headers=self.__headers)
if response.status_code == 200:
return (DataSourceStatus.CONNECTED, {"extra_info": {}})
if response.status_code == 401:
return (DataSourceStatus.UNAUTHENTICATED, {})
def get_event_matches(self, event_code, team_number=None):
human_url = self.__build_ISA_robot_url(
"111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
[str(team_number)] if not team_number == None else None,
event_code,
)
response = requests.get(human_url, headers=self.__headers)
if response.status_code == 200:
return response.json()
def get_team_info(self, team_number):
pass
def get_team_performance_metrics(self, team_number, event_code=None):
pass