def test_convert_input_to_current_timezone(self): post_data = {'a': ['2013-09-24 00:00:00']} form = self.F(DummyPostData(post_data)) self.assertTrue(form.validate()) date = form.data['a'] assert date.tzinfo self.assertEqual( timezone._get_timezone_name(date.tzinfo), timezone._get_timezone_name(timezone.get_current_timezone()))
def test_convert_input_to_current_timezone(self): if not has_timezone: return post_data = {"a": ["2013-09-24 00:00:00"]} form = self.F(DummyPostData(post_data)) self.assertTrue(form.validate()) date = form.data["a"] assert date.tzinfo self.assertEquals( timezone._get_timezone_name(date.tzinfo), timezone._get_timezone_name(timezone.get_current_timezone()), )
def on_instance_bound(self): super().on_instance_bound() if not self.form: # wait for the form to be set, it will eventually be return localTZ = timezone.get_current_timezone() localTZName = timezone._get_timezone_name(localTZ) myTZ = getattr(self.instance, "tz", localTZ) myTZName = timezone._get_timezone_name(myTZ) if myTZName != localTZName: self.exceptionTZ = myTZName else: self.exceptionTZ = None
def test_get_timezone_name(self): """ The _get_timezone_name() helper must return the offset for fixed offset timezones, for usage with Trunc DB functions. The datetime.timezone examples show the current behavior. """ tests = [ # datetime.timezone, fixed offset with and without `name`. (datetime.timezone(datetime.timedelta(hours=10)), 'UTC+10:00'), (datetime.timezone(datetime.timedelta(hours=10), name='Etc/GMT-10'), 'Etc/GMT-10'), # pytz, named and fixed offset. (pytz.timezone('Europe/Madrid'), 'Europe/Madrid'), (pytz.timezone('Etc/GMT-10'), '+10'), ] if HAS_ZONEINFO: tests += [ # zoneinfo, named and fixed offset. (zoneinfo.ZoneInfo('Europe/Madrid'), 'Europe/Madrid'), (zoneinfo.ZoneInfo('Etc/GMT-10'), '+10'), ] for tz, expected in tests: with self.subTest(tz=tz, expected=expected): self.assertEqual(timezone._get_timezone_name(tz), expected)
def on_instance_bound(self): super().on_instance_bound() widget = self.bound_field.field.widget widget.overrides_repeat = self.instance.overrides_repeat tz = timezone._get_timezone_name(self.instance.tz) if tz != timezone.get_current_timezone_name(): self.exceptionTZ = tz else: self.exceptionTZ = None
def __init__(self, lookup, lookup_type, tzinfo): super(DateTime, self).__init__(output_field=fields.DateTimeField()) self.lookup = lookup self.col = None self.lookup_type = lookup_type if tzinfo is None: self.tzname = None else: self.tzname = timezone._get_timezone_name(tzinfo) self.tzinfo = tzinfo
def get_tzname(self): # Timezone conversions must happen to the input datetime *before* # applying a function. 2015-12-31 23:00:00 -02:00 is stored in the # database as 2016-01-01 01:00:00 +00:00. Any results should be # based on the input datetime not the stored datetime. tzname = None if settings.USE_TZ: if self.tzinfo is None: tzname = timezone.get_current_timezone_name() else: tzname = timezone._get_timezone_name(self.tzinfo) return tzname
def on_instance_bound(self): super().on_instance_bound() if not self.form: # wait for the form to be set, it will eventually be return if not self.instance.overrides: return widget = self.form[self.field_name].field.widget widget.overrides_repeat = self.instance.overrides_repeat tz = timezone._get_timezone_name(self.instance.tz) if tz != timezone.get_current_timezone_name(): self.exceptionTZ = tz else: self.exceptionTZ = None
def _get_select(self, col, lookup_type): if self.tzinfo is None: tzname = None else: tzname = timezone._get_timezone_name(self.tzinfo) return DateTime(col, lookup_type, tzname)
class TimezoneMixin: tzinfo = None def get_tzname(self): # Timezone conversions must happen to the input datetime *before* # applying a function. 2015-12-31 23:00:00 -02:00 is stored in the # database as 2016-01-01 01:00:00 +00:00. Any results should be # based on the input datetime not the stored datetime. tzname = None if settings.USE_TZ: if self.tzinfo is None: tzname = timezone.get_current_timezone_name() else: tzname = timezone._get_timezone_name(self.tzinfo) return tzname class Extract(TimezoneMixin, Transform): lookup_name = None output_field = IntegerField() def __init__(self, expression, lookup_name=None, tzinfo=None, **extra): if self.lookup_name is None: self.lookup_name = lookup_name if self.lookup_name is None: raise ValueError('lookup_name must be provided') self.tzinfo = tzinfo super().__init__(expression, **extra)