Skip to content

Commit 39f6f11

Browse files
Merge pull request #5261 from encode/validation-error-on-invalid-timezone-parsing
Raise validation error on invalid timezone parsing.
2 parents fbb3490 + 4190118 commit 39f6f11

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

rest_framework/fields.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,18 +1137,16 @@ def to_internal_value(self, value):
11371137
if input_format.lower() == ISO_8601:
11381138
try:
11391139
parsed = parse_datetime(value)
1140-
except (ValueError, TypeError):
1141-
pass
1142-
else:
11431140
if parsed is not None:
11441141
return self.enforce_timezone(parsed)
1142+
except (ValueError, TypeError):
1143+
pass
11451144
else:
11461145
try:
11471146
parsed = self.datetime_parser(value, input_format)
1147+
return self.enforce_timezone(parsed)
11481148
except (ValueError, TypeError):
11491149
pass
1150-
else:
1151-
return self.enforce_timezone(parsed)
11521150

11531151
humanized_format = humanize_datetime.datetime_formats(input_formats)
11541152
self.fail('invalid', format=humanized_format)

tests/test_fields.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import uuid
66
from decimal import Decimal
77

8+
import django
89
import pytest
910
from django.http import QueryDict
1011
from django.test import TestCase, override_settings
@@ -1150,6 +1151,7 @@ class TestDateTimeField(FieldValues):
11501151
invalid_inputs = {
11511152
'abc': ['Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z].'],
11521153
'2001-99-99T99:00': ['Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z].'],
1154+
'2018-08-16 22:00-24:00': ['Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z].'],
11531155
datetime.date(2001, 1, 1): ['Expected a datetime but got a date.'],
11541156
}
11551157
outputs = {
@@ -1163,6 +1165,11 @@ class TestDateTimeField(FieldValues):
11631165
field = serializers.DateTimeField(default_timezone=utc)
11641166

11651167

1168+
if django.VERSION[:2] <= (1, 8):
1169+
# Doesn't raise an error on earlier versions of Django
1170+
TestDateTimeField.invalid_inputs.pop('2018-08-16 22:00-24:00')
1171+
1172+
11661173
class TestCustomInputFormatDateTimeField(FieldValues):
11671174
"""
11681175
Valid and invalid values for `DateTimeField` with a custom input format.

0 commit comments

Comments
 (0)