from dataclasses import dataclass, field from datetime import datetime import json @dataclass(frozen=True, slots=True) class Result: submission_name: str submission_time: datetime submission_score: float submission_id: str user_id: str user_name: str rank: int @classmethod def from_dict(cls, data: dict) -> "Result": return cls( submission_name=data["submission_name"], submission_time=datetime.fromisoformat( data["submission_time"].replace("Z", "+00:00") ), submission_score=data["submission_score"], submission_id=data["submission_id"], user_id=data["user_id"], rank=data["rank"], user_name=data["user_name"], ) @classmethod def from_json(cls, json_path: str) -> "Result": with open(json_path, "r") as f: data = json.load(f) return cls.from_dict(data) def to_dict(self) -> dict: return { "submission_name": self.submission_name, "submission_time": self.submission_time.isoformat(), "submission_score": self.submission_score, "submission_id": self.submission_id, "user_id": self.user_id, "user_name": self.user_name, "rank": self.rank, } @dataclass class LbData: name: str gpu: str results: list[Result] = field(default_factory=list) def add_result(self, result: Result): self.results.append(result)