Compare commits

...

2 Commits

Author SHA1 Message Date
94084084f3 I need to remember to commit more 2025-04-23 11:07:51 -04:00
252179ee80 Added ISA DataSource 2025-04-15 10:47:01 -04:00
3 changed files with 81 additions and 1 deletions

0
app.py
View File

View File

@ -1,5 +1,6 @@
{
"TBA_TOKEN": "Get your read API token here: https://www.thebluealliance.com/account",
"USE_ISA_DATA": false,
"ISA_TOKEN": "If you are a member of the Indiana Scouting Alliance, put your token here. Reach out to the discord if you don't know how to get it"
"ISA_TOKEN": "If you are a member of the Indiana Scouting Alliance, put your token here. Reach out to the discord if you don't know how to get it",
"OLLAMA_MODEL": "dolphin-mixtral:latest"
}

79
data_sources/isa.py Normal file
View File

@ -0,0 +1,79 @@
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_robot_notes(self, team_number, event_code=None):
notes_url = self.__build_ISA_robot_url(
"0011000000000000000000000000010000000000000000000000000000000000000000000000000000000000000",
[str(team_number)],
event_code,
)
response = requests.get(notes_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