From 106b87b96e7de6dcb3d75d53e6f31f9bb5b17e8e Mon Sep 17 00:00:00 2001 From: richard-dds Date: Tue, 31 Jul 2018 15:16:04 -0400 Subject: [PATCH] Allow for multiple date formats --- atst/forms/fields.py | 12 +++++++++++- tests/forms/test_fields.py | 25 +++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 tests/forms/test_fields.py diff --git a/atst/forms/fields.py b/atst/forms/fields.py index 3e9de703..6f733bd1 100644 --- a/atst/forms/fields.py +++ b/atst/forms/fields.py @@ -7,7 +7,17 @@ import pendulum class DateField(DateField): def _value(self): if self.data: - return pendulum.parse(self.data).date() + date_formats = [ + "YYYY-MM-DD", + "MM/DD/YYYY" + ] + for _format in date_formats: + try: + return pendulum.from_format(self.data, _format).date() + except (ValueError, pendulum.parsing.exceptions.ParserError): + pass + + raise ValueError("Unable to parse string {}".format(self.data)) else: return None diff --git a/tests/forms/test_fields.py b/tests/forms/test_fields.py new file mode 100644 index 00000000..ceece7c5 --- /dev/null +++ b/tests/forms/test_fields.py @@ -0,0 +1,25 @@ +import pytest +from wtforms import Form +import pendulum + +from atst.forms.fields import DateField + + +class MyForm(Form): + date = DateField() + + +def test_date_ie_format(): + form = MyForm(data={"date": "12/24/2018"}) + assert form.date._value() == pendulum.date(2018, 12, 24) + + +def test_date_sane_format(): + form = MyForm(data={"date": "2018-12-24"}) + assert form.date._value() == pendulum.date(2018, 12, 24) + + +def test_date_insane_format(): + form = MyForm(data={"date": "hello"}) + with pytest.raises(ValueError): + form.date._value()