From b1e6e5bfe6665e8a3ca1f446ed4b30fd2c4026ee Mon Sep 17 00:00:00 2001 From: Kyle Altendorf Date: Mon, 13 May 2019 18:01:01 -0400 Subject: [PATCH 1/2] Reject text after matching string in from_format() --- pendulum/formatting/formatter.py | 2 +- tests/datetime/test_from_format.py | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/pendulum/formatting/formatter.py b/pendulum/formatting/formatter.py index c6ed389a..ad743fc7 100644 --- a/pendulum/formatting/formatter.py +++ b/pendulum/formatting/formatter.py @@ -403,7 +403,7 @@ def parse( lambda m: self._replace_tokens(m.group(0), locale), escaped_fmt ) - if not re.match(pattern, time): + if not re.search("^" + pattern + "$", time): raise ValueError("String does not match format {}".format(fmt)) re.sub(pattern, lambda m: self._get_parsed_values(m, parsed, locale, now), time) diff --git a/tests/datetime/test_from_format.py b/tests/datetime/test_from_format.py index c5aeaa27..ea4f2035 100644 --- a/tests/datetime/test_from_format.py +++ b/tests/datetime/test_from_format.py @@ -13,6 +13,14 @@ def test_from_format_returns_datetime(): assert "UTC" == d.timezone_name +def test_from_format_rejects_extra_text(): + with pytest.raises(ValueError): + pendulum.from_format( + "1975-05-21 22:32:11 extra text", + "YYYY-MM-DD HH:mm:ss", + ) + + def test_from_format_with_timezone_string(): d = pendulum.from_format( "1975-05-21 22:32:11", "YYYY-MM-DD HH:mm:ss", tz="Europe/London" From 743077a55758c865412df77c6ba902e020ec21e4 Mon Sep 17 00:00:00 2001 From: Kyle Altendorf Date: Mon, 13 May 2019 18:10:44 -0400 Subject: [PATCH 2/2] Let black have its way --- tests/datetime/test_from_format.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/tests/datetime/test_from_format.py b/tests/datetime/test_from_format.py index ea4f2035..06404548 100644 --- a/tests/datetime/test_from_format.py +++ b/tests/datetime/test_from_format.py @@ -15,10 +15,7 @@ def test_from_format_returns_datetime(): def test_from_format_rejects_extra_text(): with pytest.raises(ValueError): - pendulum.from_format( - "1975-05-21 22:32:11 extra text", - "YYYY-MM-DD HH:mm:ss", - ) + pendulum.from_format("1975-05-21 22:32:11 extra text", "YYYY-MM-DD HH:mm:ss") def test_from_format_with_timezone_string():