challenge-template / utils.py
Emma Scharfmann
add template for challenge
e1ce262
Raw
History Blame Contribute Delete
2.43 kB
"""Helpers to load from and push rows to a HuggingFace dataset."""
from datetime import datetime, timezone
import pandas as pd
from datasets import Dataset, load_dataset
from config import HF_DATASET_PATH, REGISTRATION_COLUMNS, SUBMISSION_COLUMNS, TOKEN
# ── Internal helpers ──────────────────────────────────────────────────────────
def _load_subset(subset: str) -> pd.DataFrame:
"""Load one config/subset of the HF dataset as a DataFrame.
Returns an empty DataFrame (with the right columns) if nothing exists yet.
"""
columns = REGISTRATION_COLUMNS if subset == "registrations" else SUBMISSION_COLUMNS
try:
ds = load_dataset(HF_DATASET_PATH, subset, split="train", token=TOKEN)
return ds.to_pandas()
except Exception:
return pd.DataFrame(columns=columns)
def _push_subset(df: pd.DataFrame, subset: str) -> None:
"""Push a DataFrame back to HF as a dataset config."""
ds = Dataset.from_pandas(df, preserve_index=False)
ds.push_to_hub(HF_DATASET_PATH, config_name=subset, split="train", token=TOKEN)
# ── Public API ────────────────────────────────────────────────────────────────
def load_registrations() -> pd.DataFrame:
return _load_subset("registrations")
def add_registration(name: str, email: str, affiliation: str, team_name: str) -> None:
df = load_registrations()
new_row = {
"timestamp": datetime.now(timezone.utc).isoformat(),
"name": name,
"email": email,
"affiliation": affiliation,
"team_name": team_name,
}
df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)
_push_subset(df, "registrations")
def load_submissions() -> pd.DataFrame:
return _load_subset("submissions")
def add_submission(team_name: str, method: str, score: float, file_name: str) -> None:
df = load_submissions()
new_row = {
"timestamp": datetime.now(timezone.utc).isoformat(),
"team_name": team_name,
"method": method,
"score": score,
"file_name": file_name,
}
df = pd.concat([df, pd.DataFrame([new_row])], ignore_index=True)
_push_subset(df, "submissions")