Skip to content

Commit

Permalink
Support active timezone (#750)
Browse files Browse the repository at this point in the history
* Support active timezone

* Add pytz to 3rd-parties
  • Loading branch information
Surgo authored and Carlton Gibson committed Oct 17, 2017
1 parent 978e9ef commit 9262d6c
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 3 deletions.
2 changes: 1 addition & 1 deletion django_filters/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ def resolve_field(model_field, lookup_expr):

def handle_timezone(value, is_dst=None):
if settings.USE_TZ and timezone.is_naive(value):
return make_aware(value, timezone.get_default_timezone(), is_dst)
return make_aware(value, timezone.get_current_timezone(), is_dst)
elif not settings.USE_TZ and timezone.is_aware(value):
return timezone.make_naive(value, timezone.utc)
return value
Expand Down
2 changes: 1 addition & 1 deletion setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -9,5 +9,5 @@ skip=.tox
atomic=true
multi_line_output=3
known_standard_library=mock
known_third_party=django,rest_framework
known_third_party=django,pytz,rest_framework
known_first_party=django_filters
28 changes: 27 additions & 1 deletion tests/test_fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,16 @@
import decimal
from datetime import datetime, time, timedelta, tzinfo

import pytz
from django import forms
from django.test import TestCase, override_settings
from django.utils.timezone import get_default_timezone, make_aware
from django.utils.timezone import (
activate,
deactivate,
get_current_timezone,
get_default_timezone,
make_aware
)

from django_filters.fields import (
BaseCSVField,
Expand Down Expand Up @@ -169,6 +176,25 @@ def test_datetime_timezone_awareness(self):
self.assertTrue(isinstance(d.tzinfo, tzinfo))
self.assertEqual(d, r)

def test_datetime_timezone_with_current_timezone(self):
z = pytz.timezone('Asia/Tokyo') # Central European Time +01:00

f = IsoDateTimeField()
r = make_aware(self.reference_dt, get_default_timezone())

activate(z)
d = f.strptime(self.reference_str + "+01:00", IsoDateTimeField.ISO_8601)
deactivate()
self.assertTrue(isinstance(d.tzinfo, tzinfo))
self.assertEqual(d, r + r.utcoffset() - d.utcoffset())

activate(z)
d = f.strptime(self.reference_str + "", IsoDateTimeField.ISO_8601)
deactivate()
self.assertTrue(isinstance(d.tzinfo, tzinfo))
self.assertEqual(z.zone, d.tzinfo.zone)
self.assertEqual(d, r + r.utcoffset() - d.utcoffset())

@override_settings(USE_TZ=False)
def test_datetime_timezone_naivety(self):
# parsed datetimes should obey USE_TZ
Expand Down

0 comments on commit 9262d6c

Please sign in to comment.