Commit 39f6f113 by Tom Christie Committed by GitHub

Merge pull request #5261 from encode/validation-error-on-invalid-timezone-parsing

Raise validation error on invalid timezone parsing.
parents fbb34909 41901185
...@@ -1137,18 +1137,16 @@ class DateTimeField(Field): ...@@ -1137,18 +1137,16 @@ class DateTimeField(Field):
if input_format.lower() == ISO_8601: if input_format.lower() == ISO_8601:
try: try:
parsed = parse_datetime(value) parsed = parse_datetime(value)
except (ValueError, TypeError):
pass
else:
if parsed is not None: if parsed is not None:
return self.enforce_timezone(parsed) return self.enforce_timezone(parsed)
except (ValueError, TypeError):
pass
else: else:
try: try:
parsed = self.datetime_parser(value, input_format) parsed = self.datetime_parser(value, input_format)
return self.enforce_timezone(parsed)
except (ValueError, TypeError): except (ValueError, TypeError):
pass pass
else:
return self.enforce_timezone(parsed)
humanized_format = humanize_datetime.datetime_formats(input_formats) humanized_format = humanize_datetime.datetime_formats(input_formats)
self.fail('invalid', format=humanized_format) self.fail('invalid', format=humanized_format)
......
...@@ -5,6 +5,7 @@ import unittest ...@@ -5,6 +5,7 @@ import unittest
import uuid import uuid
from decimal import Decimal from decimal import Decimal
import django
import pytest import pytest
from django.http import QueryDict from django.http import QueryDict
from django.test import TestCase, override_settings from django.test import TestCase, override_settings
...@@ -1150,6 +1151,7 @@ class TestDateTimeField(FieldValues): ...@@ -1150,6 +1151,7 @@ class TestDateTimeField(FieldValues):
invalid_inputs = { invalid_inputs = {
'abc': ['Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z].'], 'abc': ['Datetime has wrong format. Use one of these formats instead: YYYY-MM-DDThh:mm[:ss[.uuuuuu]][+HH:MM|-HH:MM|Z].'],
'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].'], '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].'],
'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].'],
datetime.date(2001, 1, 1): ['Expected a datetime but got a date.'], datetime.date(2001, 1, 1): ['Expected a datetime but got a date.'],
} }
outputs = { outputs = {
...@@ -1163,6 +1165,11 @@ class TestDateTimeField(FieldValues): ...@@ -1163,6 +1165,11 @@ class TestDateTimeField(FieldValues):
field = serializers.DateTimeField(default_timezone=utc) field = serializers.DateTimeField(default_timezone=utc)
if django.VERSION[:2] <= (1, 8):
# Doesn't raise an error on earlier versions of Django
TestDateTimeField.invalid_inputs.pop('2018-08-16 22:00-24:00')
class TestCustomInputFormatDateTimeField(FieldValues): class TestCustomInputFormatDateTimeField(FieldValues):
""" """
Valid and invalid values for `DateTimeField` with a custom input format. Valid and invalid values for `DateTimeField` with a custom input format.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment