|
27 | 27 | import os |
28 | 28 | import os.path |
29 | 29 | import sys |
30 | | -from datetime import timedelta |
| 30 | +from datetime import datetime, timedelta, timezone |
31 | 31 | from copy import deepcopy |
32 | 32 |
|
33 | 33 | import yaml |
|
40 | 40 | from cmscommon.constants import \ |
41 | 41 | SCORE_MODE_MAX, SCORE_MODE_MAX_SUBTASK, SCORE_MODE_MAX_TOKENED_LAST |
42 | 42 | from cmscommon.crypto import build_password |
43 | | -from cmscommon.datetime import make_datetime |
44 | 43 | from cmscontrib import touch |
45 | 44 | from .base_loader import ContestLoader, TaskLoader, UserLoader, TeamLoader, LANGUAGE_MAP |
46 | 45 |
|
@@ -125,6 +124,12 @@ def load(src, dst, src_name, dst_name=None, conv=lambda i: i): |
125 | 124 | return conv(res) |
126 | 125 |
|
127 | 126 |
|
| 127 | +def parse_datetime(val): |
| 128 | + if isinstance(val, (int, float)): |
| 129 | + return datetime.fromtimestamp(val, timezone.utc) |
| 130 | + return datetime.fromisoformat(val) |
| 131 | + |
| 132 | + |
128 | 133 | def make_timedelta(t): |
129 | 134 | return timedelta(seconds=t) |
130 | 135 |
|
@@ -214,8 +219,8 @@ def get_contest(self): |
214 | 219 | if args["token_gen_interval"].total_seconds() == 0: |
215 | 220 | args["token_gen_interval"] = timedelta(minutes=1) |
216 | 221 |
|
217 | | - load(conf, args, ["start", "inizio"], conv=make_datetime) |
218 | | - load(conf, args, ["stop", "fine"], conv=make_datetime) |
| 222 | + load(conf, args, ["start", "inizio"], conv=parse_datetime) |
| 223 | + load(conf, args, ["stop", "fine"], conv=parse_datetime) |
219 | 224 | load(conf, args, ["per_user_time"], conv=make_timedelta) |
220 | 225 | load(conf, args, ["timezone"]) |
221 | 226 |
|
|
0 commit comments