Skip to content

Commit 393609d

Browse files
author
Mathieu Dupuy
committed
remove pytz
1 parent 001d6ec commit 393609d

File tree

3 files changed

+6
-36
lines changed

3 files changed

+6
-36
lines changed

rest_framework/fields.py

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
from django.utils.formats import localize_input, sanitize_separators
3030
from django.utils.ipv6 import clean_ipv6_address
3131
from django.utils.translation import gettext_lazy as _
32-
from pytz.exceptions import InvalidTimeError
3332

3433
from rest_framework import ISO_8601
3534
from rest_framework.exceptions import ErrorDetail, ValidationError
@@ -1162,15 +1161,12 @@ def enforce_timezone(self, value):
11621161
return value.astimezone(field_timezone)
11631162
except OverflowError:
11641163
self.fail('overflow')
1165-
try:
1166-
dt = timezone.make_aware(value, field_timezone)
1167-
# When the resulting datetime is a ZoneInfo instance, it won't necessarily
1168-
# throw given an invalid datetime, so we need to specifically check.
1169-
if not valid_datetime(dt):
1170-
self.fail('make_aware', timezone=field_timezone)
1171-
return dt
1172-
except InvalidTimeError:
1164+
dt = timezone.make_aware(value, field_timezone)
1165+
# When the resulting datetime is a ZoneInfo instance, it won't necessarily
1166+
# throw given an invalid datetime, so we need to specifically check.
1167+
if not valid_datetime(dt):
11731168
self.fail('make_aware', timezone=field_timezone)
1169+
return dt
11741170
elif (field_timezone is None) and timezone.is_aware(value):
11751171
return timezone.make_naive(value, datetime.timezone.utc)
11761172
return value

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ def get_version(package):
8383
author_email='[email protected]', # SEE NOTE BELOW (*)
8484
packages=find_packages(exclude=['tests*']),
8585
include_package_data=True,
86-
install_requires=["django>=3.0", "pytz", 'backports.zoneinfo;python_version<"3.9"'],
86+
install_requires=["django>=3.0", 'backports.zoneinfo;python_version<"3.9"'],
8787
python_requires=">=3.6",
8888
zip_safe=False,
8989
classifiers=[

tests/test_fields.py

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
from unittest.mock import patch
1010

1111
import pytest
12-
import pytz
1312
from django.core.exceptions import ValidationError as DjangoValidationError
1413
from django.db.models import IntegerChoices, TextChoices
1514
from django.http import QueryDict
@@ -1590,31 +1589,6 @@ def test_should_render_date_time_in_default_timezone(self):
15901589
assert rendered_date == rendered_date_in_timezone
15911590

15921591

1593-
@pytest.mark.skipif(pytz is None, reason="As Django 4.0 has deprecated pytz, this test should eventually be able to get removed.")
1594-
class TestPytzNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues):
1595-
"""
1596-
Invalid values for `DateTimeField` with datetime in DST shift (non-existing or ambiguous) and timezone with DST.
1597-
Timezone America/New_York has DST shift from 2017-03-12T02:00:00 to 2017-03-12T03:00:00 and
1598-
from 2017-11-05T02:00:00 to 2017-11-05T01:00:00 in 2017.
1599-
"""
1600-
valid_inputs = {}
1601-
invalid_inputs = {
1602-
'2017-03-12T02:30:00': ['Invalid datetime for the timezone "America/New_York".'],
1603-
'2017-11-05T01:30:00': ['Invalid datetime for the timezone "America/New_York".']
1604-
}
1605-
outputs = {}
1606-
1607-
class MockTimezone(pytz.BaseTzInfo):
1608-
@staticmethod
1609-
def localize(value, is_dst):
1610-
raise pytz.InvalidTimeError()
1611-
1612-
def __str__(self):
1613-
return 'America/New_York'
1614-
1615-
field = serializers.DateTimeField(default_timezone=MockTimezone())
1616-
1617-
16181592
@patch('rest_framework.utils.timezone.datetime_ambiguous', return_value=True)
16191593
class TestNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues):
16201594
"""

0 commit comments

Comments
 (0)