|
| 1 | +from collections import namedtuple |
| 2 | +from .errors import DateParserException |
| 3 | +from .core_datetime_formats import DateTimeFormats |
| 4 | + |
| 5 | + |
| 6 | +class DateTimeParser: |
| 7 | + """ |
| 8 | + DateTime Adaptor class for DateParser |
| 9 | + """ |
| 10 | + |
| 11 | + def __init__(self, text, start_year, end_year, datetime_format=None): |
| 12 | + self.text = text |
| 13 | + self.start_year = start_year |
| 14 | + self.end_year = end_year |
| 15 | + self._datetime_format = datetime_format |
| 16 | + if self._datetime_format == None: |
| 17 | + self._datetime_format = DateTimeFormats.FORMATS |
| 18 | + self._dateparser_formatter = self._format_datetime |
| 19 | + self.datetime = self._parser(self.text, self.start_year, self.end_year, |
| 20 | + self._datetime_format, self._dateparser_formatter) |
| 21 | + |
| 22 | + def __repr__(self): |
| 23 | + return f"DateTimeParser(start={self.start_year}, end={self.end_year}, format={self._datetime_format})" |
| 24 | + |
| 25 | + @staticmethod |
| 26 | + def _parser(text, start_year, end_year, datetime_format, formatter): |
| 27 | + DP = DateParser(datetime_format, start_year=start_year, |
| 28 | + end_year=end_year) |
| 29 | + try: |
| 30 | + dt = DP.parse_string(text) |
| 31 | + _dt = [formatter(i) for i in dt] |
| 32 | + return _dt |
| 33 | + except DateParserException: |
| 34 | + return None |
| 35 | + |
| 36 | + @staticmethod |
| 37 | + def _format_datetime(datetime_object): |
| 38 | + _datetime = namedtuple( |
| 39 | + "datetime", ["date", "token_span", "token_index", "format"]) |
| 40 | + return _datetime(datetime_object[0], |
| 41 | + (datetime_object[1], datetime_object[2]), |
| 42 | + (datetime_object[4], datetime_object[5]), datetime_object[3]) |
0 commit comments