mirror of
https://github.com/encode/django-rest-framework.git
synced 2024-11-22 09:36:49 +03:00
Catch OverflowError for "out of range" datetimes (#5546)
* Add test for #5545 * Catch OverflowError for "out of range" datetimes
This commit is contained in:
parent
4249245123
commit
93e75ec138
|
@ -1131,7 +1131,8 @@ class DateTimeField(Field):
|
||||||
default_error_messages = {
|
default_error_messages = {
|
||||||
'invalid': _('Datetime has wrong format. Use one of these formats instead: {format}.'),
|
'invalid': _('Datetime has wrong format. Use one of these formats instead: {format}.'),
|
||||||
'date': _('Expected a datetime but got a date.'),
|
'date': _('Expected a datetime but got a date.'),
|
||||||
'make_aware': _('Invalid datetime for the timezone "{timezone}".')
|
'make_aware': _('Invalid datetime for the timezone "{timezone}".'),
|
||||||
|
'overflow': _('Datetime value out of range.')
|
||||||
}
|
}
|
||||||
datetime_parser = datetime.datetime.strptime
|
datetime_parser = datetime.datetime.strptime
|
||||||
|
|
||||||
|
@ -1153,7 +1154,10 @@ class DateTimeField(Field):
|
||||||
|
|
||||||
if field_timezone is not None:
|
if field_timezone is not None:
|
||||||
if timezone.is_aware(value):
|
if timezone.is_aware(value):
|
||||||
return value.astimezone(field_timezone)
|
try:
|
||||||
|
return value.astimezone(field_timezone)
|
||||||
|
except OverflowError:
|
||||||
|
self.fail('overflow')
|
||||||
try:
|
try:
|
||||||
return timezone.make_aware(value, field_timezone)
|
return timezone.make_aware(value, field_timezone)
|
||||||
except InvalidTimeError:
|
except InvalidTimeError:
|
||||||
|
|
|
@ -1171,6 +1171,7 @@ class TestDateTimeField(FieldValues):
|
||||||
'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].'],
|
'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.'],
|
||||||
|
'9999-12-31T21:59:59.99990-03:00': ['Datetime value out of range.'],
|
||||||
}
|
}
|
||||||
outputs = {
|
outputs = {
|
||||||
datetime.datetime(2001, 1, 1, 13, 00): '2001-01-01T13:00:00Z',
|
datetime.datetime(2001, 1, 1, 13, 00): '2001-01-01T13:00:00Z',
|
||||||
|
|
Loading…
Reference in New Issue
Block a user