From 252179ee80ebfe8b04cbded1dc9501830ec262f2 Mon Sep 17 00:00:00 2001 From: Moonlit Jolteon Date: Tue, 15 Apr 2025 10:47:01 -0400 Subject: [PATCH] Added ISA DataSource --- app.py | 0 data_sources/isa.py | 69 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 69 insertions(+) delete mode 100644 app.py create mode 100644 data_sources/isa.py diff --git a/app.py b/app.py deleted file mode 100644 index e69de29..0000000 diff --git a/data_sources/isa.py b/data_sources/isa.py new file mode 100644 index 0000000..0fc5f3d --- /dev/null +++ b/data_sources/isa.py @@ -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