in pbspro/src/pbspro/resource.py [0:0]
def parse(self, expr: str) -> Any:
"""
Duration
A period of time, expressed either as
An integer whose units are seconds
or
[[hours:]minutes:]seconds[.milliseconds]
in the form:
[[HH:]MM:]SS[.milliseconds]
Milliseconds are rounded to the nearest second.
"""
try:
return int(expr)
except ValueError:
pass
def _parse_int(e: str) -> int:
try:
return int(e)
except ValueError:
raise ResourceParsingError("Could not parse {} as an int".format(e))
toks = expr.split(":")
# I'll just always add a milliseconds here
if "." in toks[-1]:
toks = toks[:-1] + toks[-1].split(".")
else:
toks = toks + ["0"]
if len(toks) > 4:
raise ResourceParsingError(
"Too many fields ({} > 4): Could not parse duration '{}': expected [[hours:]minutes:]seconds[.milliseconds]".format(
len(toks), expr
)
)
# weird... I guess I'll handle rounding myself
# >>> round(.5)
# 0
rounded_ms = 1 if _parse_int(toks[-1][0]) >= 5 else 0
seconds = _parse_int(toks[-2]) + rounded_ms
if len(toks) >= 3:
seconds += _parse_int(toks[-3]) * 60
if len(toks) == 4:
seconds += _parse_int(toks[-4]) * 60 * 60
return seconds