Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

create DateData class #778

Merged
merged 16 commits into from
Oct 29, 2020
Prev Previous commit
Next Next commit
improve is_valid_date_data
  • Loading branch information
marc authored and marc committed Oct 29, 2020
commit 836743448da96013b3c3f9b1f3d7f88636817c5a
16 changes: 9 additions & 7 deletions dateparser/date.py
Original file line number Diff line number Diff line change
Expand Up @@ -179,9 +179,9 @@ def parse(cls, locale, date_string, date_formats=None, settings=None):

def _parse(self):
for parser_name in self._settings.PARSERS:
date_obj = self._parsers[parser_name]()
if self._is_valid_date_obj(date_obj):
return date_obj
date_data = self._parsers[parser_name]()
if self._is_valid_date_data(date_data):
return date_data
else:
return None

Expand Down Expand Up @@ -241,12 +241,14 @@ def _get_translated_date_with_formatting(self):
self.date_string, keep_formatting=True, settings=self._settings)
return self._translated_date_with_formatting

def _is_valid_date_obj(self, date_obj):
if not isinstance(date_obj, DateData):
def _is_valid_date_data(self, date_data):
if not isinstance(date_data, DateData):
return False
if not date_obj['date_obj'] or not date_obj['period']:
if not date_data['date_obj'] or not date_data['period']:
return False
if date_obj['period'] not in ('time', 'day', 'week', 'month', 'year'):
if date_data['date_obj'] and not isinstance(date_data['date_obj'], datetime):
return False
if date_data['period'] not in ('time', 'day', 'week', 'month', 'year'):
return False
return True

Expand Down
22 changes: 11 additions & 11 deletions tests/test_date.py
Original file line number Diff line number Diff line change
Expand Up @@ -671,25 +671,25 @@ def setUp(self):
super().setUp()

@parameterized.expand([
param(date_obj=DateData(date_obj=datetime(1999, 10, 1, 0, 0))),
param(date_obj=DateData(period='day')),
param(date_obj={'date': datetime(2007, 1, 22, 0, 0), 'period': 'day'}),
param(date_obj=DateData(date_obj=datetime(2020, 10, 29, 0, 0), period='hour')),
param(date_obj=[datetime(2007, 1, 22, 0, 0), 'day']),
param(date_obj=DateData(date_obj=None, period='day')),
param(date_obj={'date': datetime(2018, 1, 10, 2, 0), 'period': 'time'}),
param(date_data=DateData(date_obj=datetime(1999, 10, 1, 0, 0))), # missing period
param(date_data=DateData(period='day')), # missing date_obj
param(date_data={'date': datetime(2007, 1, 22, 0, 0), 'period': 'day'}), # wrong format (dict)
param(date_data=DateData(date_obj=datetime(2020, 10, 29, 0, 0), period='hour')), # wrong period
param(date_data=[datetime(2007, 1, 22, 0, 0), 'day']), # wrong format (list)
param(date_data=DateData(date_obj=None, period='day')), # date_obj is None
param(date_data=DateData(date_obj='29/05/1994', period='day')), # wrong date_obj format
])
def test_is_valid_date_obj(self, date_obj):
def test_is_valid_date_data(self, date_data):
self.given_parser(language=['en'], date_string='10 jan 2000',
date_formats=None, settings=settings)
self.when_date_object_is_validated(date_obj)
self.when_date_object_is_validated(date_data)
self.then_date_object_is_invalid()

def given_parser(self, language, date_string, date_formats, settings):
self.parser = date._DateLocaleParser(language, date_string, date_formats, settings)

def when_date_object_is_validated(self, date_obj):
self.is_valid_date_obj = self.parser._is_valid_date_obj(date_obj)
def when_date_object_is_validated(self, date_data):
self.is_valid_date_obj = self.parser._is_valid_date_data(date_data)

def then_date_object_is_invalid(self):
self.assertFalse(self.is_valid_date_obj)
Expand Down