Source code for roocs_utils.parameter.time_parameter

import datetime

from dateutil import parser as date_parser

from roocs_utils.exceptions import InvalidParameterValue
from roocs_utils.parameter.base_parameter import _BaseParameter


[docs]class TimeParameter(_BaseParameter): """ Class for time parameter used in subsetting operation. | Time can be input as: | A string of slash separated values: "2085-01-01T12:00:00Z/2120-12-30T12:00:00Z" | A sequence of strings: e.g. ("2085-01-01T12:00:00Z", "2120-12-30T12:00:00Z") A time input must be 2 values. If using a string input a trailing slash indicates you want to use the earliest/ latest time of the dataset. e.g. "2085-01-01T12:00:00Z/" will subset from 01/01/2085 to the final time in the dataset. Validates the times input and parses the values into isoformat. """ parse_method = "_parse_range" def _validate(self): try: self._parse_times() except (date_parser._parser.ParserError, TypeError): raise InvalidParameterValue("Unable to parse the time values entered") def _parse_times(self): # should this default to the start and end time of the data? start, end = self._result if start is not None: start = date_parser.parse( start, default=datetime.datetime(datetime.MINYEAR, 1, 1) ).isoformat() if end is not None: end = date_parser.parse( end, default=datetime.datetime(datetime.MAXYEAR, 12, 30) ).isoformat() return start, end @property def tuple(self): """Returns a tuple of the time values""" if self._parse_times() is not (None, None): return self._parse_times()
[docs] def asdict(self): """Returns a dictionary of the time values""" if self.tuple is not None: return {"start_time": self.tuple[0], "end_time": self.tuple[1]}
def __str__(self): return ( f"Time period to subset over" f"\n start time: {self.tuple[0]}" f"\n end time: {self.tuple[1]}" )