1+ import attr
2+ from .loggers import logger
13from collections import namedtuple
24from .errors import DateParserException
35from .core_date_parser import DateParser
4- from .loggers import logger
56from .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 )
811class 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