Source code for task_script_utils.datetime_parser.datetime_config

from typing import Optional

from .utils.manipulation import map_offset_to_seconds


[docs] class DatetimeConfig: """DatetimeConfig provides complementary information on how to mark parsed digits as day, month or year. It also provides an option to handle abbreviated time zones and fold for parsing ambiguous timestamps during daylight saving transitions. Ideally, DatetimeConfig should be constructed from pipeline configuration passed to task scripts. """ # pylint: disable=W0102,R0913 def __init__( self, day_first: Optional[bool] = None, year_first: Optional[bool] = None, tz_dict: dict = {}, fold: Optional[int] = None, require_unambiguous_formats: bool = False, ): """DatetimeConfig constructor. Args: day_first (Optional[bool], optional): Whether to interpret the first value in an ambiguous 3-integer date (e.g. 01/05/09) as the day `True` or month `False`. Defaults to `None`. year_first (Optional[bool], optional): Whether to interpret the first value in an ambiguous 3-integer date (e.g. 01/05/09) as the year. When the year has four digits, then whether `year_first` is `True` or `False`, is decided by regex parsing done by `DatetimeInfo` class. If both `year_first` and `day_first` are true, then `year_first` will take priority and resulting date format will be as YDM. Defaults to `None`. tz_dict (dict, optional): A python dict that maps abbreviated timezone names to their corresponding offset. Defaults to {}. fold (Optional[int], optional): 0 or 1. It is required during the 2 hour window when clocks are set back in a timezone which keeps track of daylight savings (such as IANA timezones like `Europe/London`). Defaults to `None`. require_unambiguous_formats (bool, optional): Whether require datetime formats to be unambiguous. Defaults to `False`. """ self.day_first = day_first self.year_first = year_first self.tz_dict = tz_dict self.tz_dict_seconds = map_offset_to_seconds(tz_dict) self.fold = fold self.require_unambiguous_formats = require_unambiguous_formats def __str__(self): return ( f"day_first={self.day_first}, " f"year_first={self.year_first}, " f"fold={self.fold}, " f"tz_dict={self.tz_dict}, " f"require_unambiguous_formats={self.require_unambiguous_formats}" )
DEFAULT_DATETIME_CONFIG = DatetimeConfig()