Skip to content

Commit 93e75ec

Browse files
sbchisholmcarltongibson
authored andcommitted
Catch OverflowError for "out of range" datetimes (#5546)
* Add test for #5545 * Catch OverflowError for "out of range" datetimes
1 parent 4249245 commit 93e75ec

File tree

2 files changed

+7
-2
lines changed

2 files changed

+7
-2
lines changed

rest_framework/fields.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1131,7 +1131,8 @@ class DateTimeField(Field):
11311131
default_error_messages = {
11321132
'invalid': _('Datetime has wrong format. Use one of these formats instead: {format}.'),
11331133
'date': _('Expected a datetime but got a date.'),
1134-
'make_aware': _('Invalid datetime for the timezone "{timezone}".')
1134+
'make_aware': _('Invalid datetime for the timezone "{timezone}".'),
1135+
'overflow': _('Datetime value out of range.')
11351136
}
11361137
datetime_parser = datetime.datetime.strptime
11371138

@@ -1153,7 +1154,10 @@ def enforce_timezone(self, value):
11531154

11541155
if field_timezone is not None:
11551156
if timezone.is_aware(value):
1156-
return value.astimezone(field_timezone)
1157+
try:
1158+
return value.astimezone(field_timezone)
1159+
except OverflowError:
1160+
self.fail('overflow')
11571161
try:
11581162
return timezone.make_aware(value, field_timezone)
11591163
except InvalidTimeError:

tests/test_fields.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,7 @@ class TestDateTimeField(FieldValues):
11711171
'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].'],
11721172
'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].'],
11731173
datetime.date(2001, 1, 1): ['Expected a datetime but got a date.'],
1174+
'9999-12-31T21:59:59.99990-03:00': ['Datetime value out of range.'],
11741175
}
11751176
outputs = {
11761177
datetime.datetime(2001, 1, 1, 13, 00): '2001-01-01T13:00:00Z',

0 commit comments

Comments
 (0)