Source code for ace.core.functions

from dateutil import parser
from datetime import date, datetime
from typing import List, TypeVar
from dateutil.relativedelta import relativedelta

T = TypeVar("T")


# =================================================================================================================
# =================================== UTILITY functions for data processing =======================================
[docs] def get_updated_old_int(element, default=None): return int(element.get("old")) if element.get("old") else default
[docs] def get_updated_new_int(element, default=None): return int(element.get("new")) if element.get("new") else default
[docs] def get_updated_old_float(element, default=None): return float(element.get("old")) if element.get("old") else default
[docs] def get_updated_new_float(element, default=None): return float(element.get("new")) if element.get("new") else default
[docs] def get_updated_old_date(element, default=None): return parser.parse(element.get("old")).date() if element.get("old") else default
[docs] def get_updated_new_date(element, default=None): return parser.parse(element.get("new")).date() if element.get("new") else default
[docs] def get_updated_old_datetime(element, default=None): return parser.parse(element.get("old")) if element.get("old") else default
[docs] def get_updated_new_datetime(element, default=None): return parser.parse(element.get("new")) if element.get("new") else default
[docs] def add_days_to_date(start_date: date, days: int) -> date: return start_date + relativedelta(days=days)
[docs] def add_weeks_to_date(start_date: date, days: int) -> date: return start_date + relativedelta(days=days)
[docs] def add_days_to_date_str(start_date: date, days: int) -> str: return (start_date + relativedelta(days=days)).strftime('%Y-%m-%d')
# ================================================================================================================= # =================================== UTILITY functions for data processing =======================================
[docs] def get_utc_now_iso(): return datetime.utcnow().isoformat("T", "milliseconds") + "Z"
[docs] def get_utc_today_iso(): return transform_date_to_utc_iso(date.today())
[docs] def get_current_date() -> date: return date.today()
[docs] def get_current_date_str() -> str: return transform_date_to_utc_iso(date.today())
[docs] def get_local_now_iso(): return datetime.utcnow().isoformat("T", "milliseconds")
[docs] def get_local_today_iso(): return transform_date_to_local_iso(date.today())
[docs] def transform_date_to_datetime(date_value: date): return datetime.combine(date_value, datetime.min.time())
[docs] def transform_datetime_to_utc_iso(datetime_value: datetime): return datetime_value.isoformat("T", "milliseconds") + "Z"
[docs] def transform_datetime_to_local_iso(datetime_value: datetime): return datetime_value.isoformat("T", "milliseconds")
[docs] def transform_date_to_utc_iso(date_value: date): return transform_date_to_datetime(date_value).isoformat("T", "milliseconds") + "Z"
[docs] def transform_date_to_local_iso(date_value: date): return transform_date_to_datetime(date_value).isoformat("T", "milliseconds")
[docs] def transform_date_to_local_iso_with_order(date_value: date, order: int): return datetime( year=date_value.year, month=date_value.month, day=date_value.day, hour=5, minute=order, ).isoformat("T", "milliseconds")
[docs] def transform_date_to_local_iso_time_now(date_value: date): return datetime.combine(date_value, datetime.utcnow().time())
[docs] def transform_str_to_date(string_date: str): return datetime.strptime(string_date, "%Y-%m-%d").date()