@@ -24,6 +24,13 @@ class PythonTaskData:
2424 main : str
2525
2626
27+ @dataclasses .dataclass
28+ class MilestoneData :
29+ name : str
30+ code : str
31+ description : str = ""
32+
33+
2734TestCaseType = Dict [str , Union [int , str ]]
2835
2936
@@ -104,6 +111,7 @@ class LeaderboardDefinition:
104111 task : LeaderboardTask
105112 description : str = ""
106113 templates : dict [str , str ] = dataclasses .field (default_factory = dict )
114+ milestones : list [MilestoneData ] = dataclasses .field (default_factory = list )
107115
108116
109117def make_task_definition (yaml_file : str | Path ) -> LeaderboardDefinition :
@@ -131,6 +139,12 @@ def make_task_definition(yaml_file: str | Path) -> LeaderboardDefinition:
131139 else :
132140 file_dict [name ] = (root / source ).read_text ()
133141
142+ milestones = []
143+ for milestone in raw .get ("milestones" , []):
144+ milestone ["code" ] = (root / milestone ["source" ]).read_text ()
145+ del milestone ["source" ]
146+ milestones .append (MilestoneData (** milestone ))
147+
134148 raw ["files" ] = file_dict
135149
136150 # load template files
@@ -140,10 +154,14 @@ def make_task_definition(yaml_file: str | Path) -> LeaderboardDefinition:
140154 templates [lang ] = (root / source ).read_text ()
141155
142156 del raw ["templates" ]
157+ del raw ["milestones" ]
143158 description = raw ["description" ]
144159 del raw ["description" ]
145160 task = LeaderboardTask .from_dict (raw )
146- return LeaderboardDefinition (task = task , templates = templates , description = description )
161+
162+ return LeaderboardDefinition (
163+ task = task , templates = templates , milestones = milestones , description = description
164+ )
147165
148166
149167def build_task_config (
0 commit comments