mirror of
				https://github.com/encode/django-rest-framework.git
				synced 2025-11-04 09:57:55 +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 = {
 | 
			
		||||
        'invalid': _('Datetime has wrong format. Use one of these formats instead: {format}.'),
 | 
			
		||||
        '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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1153,7 +1154,10 @@ class DateTimeField(Field):
 | 
			
		|||
 | 
			
		||||
        if field_timezone is not None:
 | 
			
		||||
            if timezone.is_aware(value):
 | 
			
		||||
                return value.astimezone(field_timezone)
 | 
			
		||||
                try:
 | 
			
		||||
                    return value.astimezone(field_timezone)
 | 
			
		||||
                except OverflowError:
 | 
			
		||||
                    self.fail('overflow')
 | 
			
		||||
            try:
 | 
			
		||||
                return timezone.make_aware(value, field_timezone)
 | 
			
		||||
            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].'],
 | 
			
		||||
        '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.'],
 | 
			
		||||
        '9999-12-31T21:59:59.99990-03:00': ['Datetime value out of range.'],
 | 
			
		||||
    }
 | 
			
		||||
    outputs = {
 | 
			
		||||
        datetime.datetime(2001, 1, 1, 13, 00): '2001-01-01T13:00:00Z',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user