mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-06-08 15:43:32 +03:00
Merge pull request #5261 from encode/validation-error-on-invalid-timezone-parsing
Raise validation error on invalid timezone parsing.
This commit is contained in:
commit
39f6f1137c
|
@ -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
|
||||||
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):
|
||||||
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):
|
||||||
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.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user