예제 #1
0
def relativize_datestamps(task_def):
    """
    Given a task definition as received from the queue, convert all datestamps
    to {relative_datestamp: ..} format, with the task creation time as "now".
    The result is useful for handing to ``create_task``.
    """
    base = parse_time(task_def['created'])
    # borrowed from https://github.com/epoberezkin/ajv/blob/master/lib/compile/formats.js
    ts_pattern = re.compile(
        r'^\d\d\d\d-[0-1]\d-[0-3]\d[t\s]'
        r'(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?'
        r'(?:z|[+-]\d\d:\d\d)$', re.I)

    def recurse(value):
        if isinstance(value, text_type):
            if ts_pattern.match(value):
                value = parse_time(value)
                diff = value - base
                return {
                    'relative-datestamp':
                    '{} seconds'.format(int(diff.total_seconds()))
                }
        if isinstance(value, list):
            return [recurse(e) for e in value]
        if isinstance(value, dict):
            return {k: recurse(v) for k, v in value.items()}
        return value

    return recurse(task_def)
예제 #2
0
 def recurse(value):
     if isinstance(value, basestring):
         if ts_pattern.match(value):
             value = parse_time(value)
             diff = value - base
             return {'relative-datestamp': '{} seconds'.format(int(diff.total_seconds()))}
     if isinstance(value, list):
         return [recurse(e) for e in value]
     if isinstance(value, dict):
         return {k: recurse(v) for k, v in value.items()}
     return value
예제 #3
0
 def recurse(value):
     if isinstance(value, str):
         if ts_pattern.match(value):
             value = parse_time(value)
             diff = value - base
             return {"relative-datestamp": f"{int(diff.total_seconds())} seconds"}
     if isinstance(value, list):
         return [recurse(e) for e in value]
     if isinstance(value, dict):
         return {k: recurse(v) for k, v in value.items()}
     return value
예제 #4
0
 def test_parse_time(self):
     exp = datetime.datetime(2018, 10, 10, 18, 33, 3, 463000)
     assert parse_time('2018-10-10T18:33:03.463Z') == exp