Commit d4726dab by Sergey Petrunin

Fix bug for not existent or ambiguous datetime during native to aware conversion…

Fix bug for not existent or ambiguous datetime during native to aware conversion in timezone with DST.
Ref: #4986
parent 1ee54fb8
...@@ -1085,6 +1085,7 @@ class DateTimeField(Field): ...@@ -1085,6 +1085,7 @@ 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': _('Datetime can not be represented in timezone "{timezone}".')
} }
datetime_parser = datetime.datetime.strptime datetime_parser = datetime.datetime.strptime
...@@ -1105,7 +1106,10 @@ class DateTimeField(Field): ...@@ -1105,7 +1106,10 @@ class DateTimeField(Field):
field_timezone = getattr(self, 'timezone', self.default_timezone()) field_timezone = getattr(self, 'timezone', self.default_timezone())
if (field_timezone is not None) and not timezone.is_aware(value): if (field_timezone is not None) and not timezone.is_aware(value):
return timezone.make_aware(value, field_timezone) try:
return timezone.make_aware(value, field_timezone)
except Exception:
self.fail('make_aware', timezone=field_timezone)
elif (field_timezone is None) and timezone.is_aware(value): elif (field_timezone is None) and timezone.is_aware(value):
return timezone.make_naive(value, utc) return timezone.make_naive(value, utc)
return value return value
......
...@@ -9,7 +9,7 @@ import pytest ...@@ -9,7 +9,7 @@ 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
from django.utils import six from django.utils import six
from django.utils.timezone import utc, pytz from django.utils.timezone import pytz, utc
import rest_framework import rest_framework
from rest_framework import serializers from rest_framework import serializers
...@@ -1213,10 +1213,8 @@ class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues): ...@@ -1213,10 +1213,8 @@ class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues):
""" """
valid_inputs = {} valid_inputs = {}
invalid_inputs = { invalid_inputs = {
'2017-03-12T02:30:00': [ '2017-03-12T02:30:00': ['Datetime can not be represented in timezone "America/New_York".'],
'Datetime can not be converted to server timezone due to NonExistentTimeError.'], '2017-11-05T01:30:00': ['Datetime can not be represented in timezone "America/New_York".']
'2017-11-05T01:30:00': [
'Datetime can not be converted to server timezone due to AmbiguousTimeError.']
} }
outputs = {} outputs = {}
field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York')) field = serializers.DateTimeField(default_timezone=pytz.timezone('America/New_York'))
......
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