Skip to content

Commit 376a5cb

Browse files
author
Mathieu Dupuy
authored
remove dependency on pytz (encode#8984)
* remove pytz * Revert "remove pytz" This reverts commit 393609d. * remove pytz, more subtly
1 parent 03e2ecc commit 376a5cb

File tree

3 files changed

+24
-12
lines changed

3 files changed

+24
-12
lines changed

rest_framework/fields.py

+9-3
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@
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
32+
33+
try:
34+
import pytz
35+
except ImportError:
36+
pytz = None
3337

3438
from rest_framework import ISO_8601
3539
from rest_framework.exceptions import ErrorDetail, ValidationError
@@ -1148,8 +1152,10 @@ def enforce_timezone(self, value):
11481152
if not valid_datetime(dt):
11491153
self.fail('make_aware', timezone=field_timezone)
11501154
return dt
1151-
except InvalidTimeError:
1152-
self.fail('make_aware', timezone=field_timezone)
1155+
except Exception as e:
1156+
if pytz and isinstance(e, pytz.exceptions.InvalidTimeError):
1157+
self.fail('make_aware', timezone=field_timezone)
1158+
raise e
11531159
elif (field_timezone is None) and timezone.is_aware(value):
11541160
return timezone.make_naive(value, datetime.timezone.utc)
11551161
return value

setup.py

+1-1
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

+14-8
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@
99
from unittest.mock import patch
1010

1111
import pytest
12-
import pytz
12+
13+
try:
14+
import pytz
15+
except ImportError:
16+
pytz = None
17+
1318
from django.core.exceptions import ValidationError as DjangoValidationError
1419
from django.db.models import IntegerChoices, TextChoices
1520
from django.http import QueryDict
@@ -1604,15 +1609,16 @@ class TestPytzNaiveDayLightSavingTimeTimeZoneDateTimeField(FieldValues):
16041609
}
16051610
outputs = {}
16061611

1607-
class MockTimezone(pytz.BaseTzInfo):
1608-
@staticmethod
1609-
def localize(value, is_dst):
1610-
raise pytz.InvalidTimeError()
1612+
if pytz:
1613+
class MockTimezone(pytz.BaseTzInfo):
1614+
@staticmethod
1615+
def localize(value, is_dst):
1616+
raise pytz.InvalidTimeError()
16111617

1612-
def __str__(self):
1613-
return 'America/New_York'
1618+
def __str__(self):
1619+
return 'America/New_York'
16141620

1615-
field = serializers.DateTimeField(default_timezone=MockTimezone())
1621+
field = serializers.DateTimeField(default_timezone=MockTimezone())
16161622

16171623

16181624
@patch('rest_framework.utils.timezone.datetime_ambiguous', return_value=True)

0 commit comments

Comments
 (0)