azure-kusto-data/azure/kusto/data/_converters.py (20 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
import re
from datetime import timedelta
from dateutil import parser
# Regex for TimeSpan
_TIMESPAN_PATTERN = re.compile(r"(-?)((?P<d>[0-9]*).)?(?P<h>[0-9]{2}):(?P<m>[0-9]{2}):(?P<s>[0-9]{2}(\.[0-9]+)?$)")
def to_datetime(value):
"""Converts a string to a datetime."""
if isinstance(value, int):
return parser.parse(value)
return parser.isoparse(value)
def to_timedelta(value):
"""Converts a string to a timedelta."""
if isinstance(value, (int, float)):
return timedelta(microseconds=(float(value) / 10))
match = _TIMESPAN_PATTERN.match(value)
if match:
if match.group(1) == "-":
factor = -1
else:
factor = 1
return factor * timedelta(days=int(match.group("d") or 0), hours=int(match.group("h")), minutes=int(match.group("m")), seconds=float(match.group("s")))
else:
raise ValueError("Timespan value '{}' cannot be decoded".format(value))