Skip to content

Commit f810211

Browse files
committed
datetime parser for humans
1 parent 6ba5765 commit f810211

1 file changed

Lines changed: 32 additions & 25 deletions

File tree

dateandtimeparser/datetime_parser.py

Lines changed: 32 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,46 @@
1+
import attr
2+
from .loggers import logger
13
from collections import namedtuple
24
from .errors import DateParserException
35
from .core_date_parser import DateParser
4-
from .loggers import logger
56
from .core_datetime_formats import DateTimeFormats
7+
from ._validators import _datetime_format_type_validator, _end_year_validator, _mode_type_validator
68

79

10+
@attr.s(slots=True)
811
class DateTimeParser:
912
"""
10-
DateTime Adaptor class for DateParser
13+
Adaptor class for CoreDateParser
1114
"""
15+
text = attr.ib(validator=attr.validators.instance_of(str))
16+
start_year = attr.ib(validator=attr.validators.instance_of(int))
17+
end_year = attr.ib(validator=attr.validators.instance_of(int))
18+
mode = attr.ib(default="date", validator=[
19+
_mode_type_validator, attr.validators.instance_of(str)])
20+
datetime_format = attr.ib(
21+
default=None, validator=_datetime_format_type_validator)
1222

13-
def __init__(self, text, start_year, end_year, datetime_format=None):
14-
self.text = text
15-
self.start_year = start_year
16-
self.end_year = end_year
17-
self._datetime_format = datetime_format
18-
if self._datetime_format == None:
19-
self._datetime_format = DateTimeFormats.FORMATS
23+
def __attrs_post_init__(self):
24+
object.__setattr__(self, "datetime_format",
25+
self.datetime_format_handler(self.datetime_format))
26+
object.__setattr__(self, "_dateparser_formatter",
27+
self._format_datetime)
28+
object.__setattr__(self, "datetime", self._parser(
29+
self.text, self.start_year, self.end_year, self.datetime_format, self._dateparser_formatter))
30+
31+
@staticmethod
32+
def datetime_format_handler(datetime_format):
33+
if datetime_format == None:
34+
return DateTimeFormats.FORMATS
2035
else:
21-
self._datetime_format = DateTimeFormats.FORMATS+self._datetime_format
22-
self._dateparser_formatter = self._format_datetime
23-
self.datetime = self._parser(self.text, self.start_year, self.end_year,
24-
self._datetime_format, self._dateparser_formatter)
36+
return DateTimeFormats.FORMATS+datetime_format
2537

26-
def __repr__(self):
27-
return f"DateTimeParser(start={self.start_year}, end={self.end_year}, format={self._datetime_format})"
38+
@staticmethod
39+
def _format_datetime(datetime_object):
40+
_datetime = namedtuple(
41+
"datetime", ["date", "token_span", "token_index", "format"])
42+
return _datetime(datetime_object[0], (datetime_object[1], datetime_object[2]),
43+
(datetime_object[4], datetime_object[5]), datetime_object[3])
2844

2945
@staticmethod
3046
def _parser(text, start_year, end_year, datetime_format, formatter):
@@ -35,14 +51,5 @@ def _parser(text, start_year, end_year, datetime_format, formatter):
3551
dt = DP.parse_string(text)
3652
_dt = [formatter(i) for i in dt]
3753
return _dt
38-
except DateParserException as DPEX:
39-
logger.info(f"ERROR: {DPEX}")
54+
except DateParserException:
4055
return None
41-
42-
@staticmethod
43-
def _format_datetime(datetime_object):
44-
_datetime = namedtuple(
45-
"datetime", ["date", "token_span", "token_index", "format"])
46-
return _datetime(datetime_object[0],
47-
(datetime_object[1], datetime_object[2]),
48-
(datetime_object[4], datetime_object[5]), datetime_object[3])

0 commit comments

Comments
 (0)