File size: 1,539 Bytes
0339ef7
 
 
 
 
 
 
 
 
 
6493bef
0339ef7
75f9ceb
0339ef7
 
 
 
 
 
37414f0
 
 
4c7e2d6
6493bef
0339ef7
 
75f9ceb
0339ef7
 
 
 
 
 
 
 
 
 
6493bef
 
 
 
 
75f9ceb
6493bef
0339ef7
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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)