diff --git a/zmon_worker_monitor/builtins/plugins/time_.py b/zmon_worker_monitor/builtins/plugins/time_.py index 94e99d7a..f083934e 100644 --- a/zmon_worker_monitor/builtins/plugins/time_.py +++ b/zmon_worker_monitor/builtins/plugins/time_.py @@ -36,13 +36,18 @@ def __init__(self, spec='now', utc=False): if isinstance(spec, Number): self.time = datetime.utcfromtimestamp(spec) if utc else datetime.fromtimestamp(spec) else: - delta = parse_timedelta(spec) - if delta: - self.time = now + delta - elif spec == 'now': + if spec == 'now': self.time = now else: - self.time = parse_datetime(spec) + delta = None + try: + delta = parse_timedelta(spec) + except Exception: + pass + if delta: + self.time = now + delta + else: + self.time = parse_datetime(spec) def __sub__(self, other): ''' diff --git a/zmon_worker_monitor/zmon_worker/common/time_.py b/zmon_worker_monitor/zmon_worker/common/time_.py index 34053655..686c787e 100644 --- a/zmon_worker_monitor/zmon_worker/common/time_.py +++ b/zmon_worker_monitor/zmon_worker/common/time_.py @@ -19,10 +19,14 @@ def parse_timedelta(s): ''' >>> parse_timedelta('bla') - + Traceback (most recent call last): + ... + ValueError: invalid literal for int() with base 10: 'bl' >>> parse_timedelta('1k') - + Traceback (most recent call last): + ... + ValueError: invalid time unit: k >>> parse_timedelta('1s').total_seconds() 1.0 @@ -42,21 +46,23 @@ def parse_timedelta(s): factor = -1 else: factor = 1 - try: - v = int(s[:-1]) - u = s[-1] - except Exception: - return None + v = int(s[:-1]) + u = s[-1] + + if u not in TIME_UNITS: + raise ValueError('invalid time unit: {}'.format(u)) arg = TIME_UNITS.get(u) if arg: return factor * timedelta(**{arg: v}) - return None def parse_datetime(s): ''' >>> parse_datetime('foobar') + Traceback (most recent call last): + ... + ValueError: invalid datetime foobar >>> parse_datetime('1983-10-12T23:30').isoformat(' ') '1983-10-12 23:30:00' @@ -91,4 +97,4 @@ def parse_datetime(s): return datetime.strptime(s, fmt) - timezone_timedelta except Exception: pass - return None + raise ValueError('invalid datetime {}'.format(s))