@@ -104,7 +104,12 @@ def __init__(
104
104
105
105
106
106
class ProblemSettings :
107
- def __init__ (self , yamldata : dict [str , Any ], legacy_time_limit : Optional [float ] = None ):
107
+ def __init__ (
108
+ self ,
109
+ yamldata : dict [str , Any ],
110
+ problem : "Problem" ,
111
+ legacy_time_limit : Optional [float ] = None ,
112
+ ):
108
113
assert isinstance (yamldata , dict )
109
114
110
115
if "name" in yamldata and isinstance (yamldata ["name" ], str ):
@@ -122,13 +127,25 @@ def __init__(self, yamldata: dict[str, Any], legacy_time_limit: Optional[float]
122
127
fatal (f"problem_format_version { self .problem_format_version } not supported" )
123
128
124
129
if self .is_legacy ():
125
- self . validation : str = parse_setting (yamldata , "validation" , "default" )
130
+ mode = parse_validation ( parse_setting (yamldata , "validation" , "default" ) )
126
131
else :
127
- self .type = parse_setting (yamldata , "type" , "pass-fail" )
128
132
if "validation" in yamldata :
129
133
warn (
130
134
"problem.yaml: 'validation' is removed in 2023-07-draft, please use 'type' instead"
131
135
)
136
+ mode = set (parse_setting (yamldata , "type" , "pass-fail" ).split (" " ))
137
+ self .interactive : bool = "interactive" in mode
138
+ self .multi_pass : bool = "multi-pass" in mode
139
+ self .custom_output : bool = (
140
+ self .interactive
141
+ or self .multi_pass
142
+ or (
143
+ "custom" in mode
144
+ if self .is_legacy ()
145
+ # TODO: output_validator should be singular, but DOMjudge does not support this yet, so this should be fixed during export.
146
+ else (problem .path / "output_validators" ).exists ()
147
+ )
148
+ )
132
149
133
150
self .name : dict [str , str ] = parse_setting (yamldata , "name" , {"en" : "" })
134
151
self .uuid : str = parse_setting (yamldata , "uuid" , "" )
@@ -287,27 +304,13 @@ def _read_settings(self):
287
304
yaml_path .write_text (raw )
288
305
log ("Added new UUID to problem.yaml" )
289
306
290
- self .settings = ProblemSettings (yaml_data , self ._get_legacy_time_limit (yaml_data ))
291
- self .limits = self .settings .limits
307
+ self .settings = ProblemSettings (yaml_data , self , self ._get_legacy_time_limit (yaml_data ))
292
308
293
- # TODO: Move these checks to ProblemSettings, but do keep the alias-fields in Problem.
294
- mode = (
295
- parse_validation (self .settings .validation )
296
- if self .settings .is_legacy ()
297
- else set (self .settings .type .split (" " ))
298
- )
299
- self .interactive = "interactive" in mode
300
- self .multipass = "multi-pass" in mode
301
- self .custom_output = (
302
- self .interactive
303
- or self .multipass
304
- or (
305
- "custom" in mode
306
- if self .settings .is_legacy ()
307
- # TODO: output_validator should be singular, but DOMjudge does not support this yet, so this should be fixed during export.
308
- else (self .path / "output_validators" ).exists ()
309
- )
310
- )
309
+ # Aliasing fields makes life easier for us 😛
310
+ self .limits : ProblemLimits = self .settings .limits
311
+ self .interactive : bool = self .settings .interactive
312
+ self .multipass : bool = self .settings .multi_pass
313
+ self .custom_output : bool = self .settings .custom_output
311
314
312
315
# Handle dependencies...
313
316
has_validation_passes = self .limits .validation_passes is not None
0 commit comments