|
1 | 1 | import inspect |
2 | 2 | import json |
3 | | -import re |
4 | 3 | import typing |
5 | 4 | from abc import ABC, abstractmethod |
6 | 5 | from datetime import timedelta |
@@ -245,7 +244,7 @@ def _to_object(self, s: object, t: object) -> object: |
245 | 244 | return s |
246 | 245 | if issubclass(t, timedelta): |
247 | 246 | assert isinstance(s, str) |
248 | | - return self._to_timedelta(s) |
| 247 | + return JobAttributes.parse_walltime(s) |
249 | 248 | else: |
250 | 249 | if t == Union[str, Path] or t == Optional[Union[str, Path]]: |
251 | 250 | assert isinstance(s, str) |
@@ -273,40 +272,6 @@ def _to_dict(self, d: Dict[str, object]) -> Dict[str, object]: |
273 | 272 | def _to_list(self, lst: List[object]) -> List[object]: |
274 | 273 | return [self._to_object(v, type(v)) for v in lst] |
275 | 274 |
|
276 | | - _TIMEDELTA_FMT_ERROR = 'Unknown time interval format: %s. Accepted formats are hh:mm:ss, ' \ |
277 | | - 'hh:mm, mm, or n\\s*[h|m|s].' |
278 | | - |
279 | | - def _to_timedelta(self, s: str) -> timedelta: |
280 | | - # we accept multiple formats here: |
281 | | - # hh:mm:ss |
282 | | - # hh:mm |
283 | | - # mm |
284 | | - # n\s*[y|M|d|h|m\s] |
285 | | - |
286 | | - if ':' in s: |
287 | | - parts = s.split(':') |
288 | | - seconds = 0 |
289 | | - if len(parts) == 3: |
290 | | - seconds = int(parts[2]) |
291 | | - if len(parts) <= 3: |
292 | | - return timedelta(hours=int(parts[0]), minutes=int(parts[1]), seconds=seconds) |
293 | | - else: |
294 | | - raise ValueError(Serializer._TIMEDELTA_FMT_ERROR % s) |
295 | | - if s.isdigit(): |
296 | | - return timedelta(minutes=int(s)) |
297 | | - m = re.search(r'(\d+)\s*([hms])', s) |
298 | | - if m: |
299 | | - digits = m.group(1) |
300 | | - unit = m.group(2) |
301 | | - val = int(digits) |
302 | | - if unit == 'h': |
303 | | - return timedelta(hours=val) |
304 | | - elif unit == 'm': |
305 | | - return timedelta(minutes=val) |
306 | | - elif unit == 's': |
307 | | - return timedelta(seconds=val) |
308 | | - raise ValueError(Serializer._TIMEDELTA_FMT_ERROR % s) |
309 | | - |
310 | 275 |
|
311 | 276 | class JSONSerializer(Serializer): |
312 | 277 | """A JSON serializer.""" |
|
0 commit comments