"""Time utilities""" import datetime from typing import Optional from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ ALLOWED_KEYS = ( "days", "seconds", "microseconds", "milliseconds", "minutes", "hours", "weeks", ) def timedelta_string_validator(value: str): """Validator for Django that checks if value can be parsed with `timedelta_from_string`""" try: timedelta_from_string(value) except ValueError as exc: raise ValidationError( _("%(value)s is not in the correct format of 'hours=3;minutes=1'."), params={"value": value}, ) from exc def timedelta_from_string(expr: str) -> datetime.timedelta: """Convert a string with the format of 'hours=1;minute=3;seconds=5' to a `datetime.timedelta` Object with hours = 1, minutes = 3, seconds = 5""" kwargs = {} for duration_pair in expr.split(";"): key, value = duration_pair.split("=") if key.lower() not in ALLOWED_KEYS: continue kwargs[key.lower()] = float(value) return datetime.timedelta(**kwargs) def get_time_string(delta: Optional[datetime.timedelta] = None) -> str: """Get Data formatted in SAML format""" if delta is None: delta = datetime.timedelta() now = datetime.datetime.now() final = now + delta return final.strftime("%Y-%m-%dT%H:%M:%SZ")