NewsBlur/vendor/timezones/forms.py
2024-04-24 09:50:42 -04:00

33 lines
1.1 KiB
Python
Executable file

import pytz
from django import forms
from django.conf import settings
from vendor.timezones import zones
from vendor.timezones.utilities import (
adjust_datetime_to_timezone,
coerce_timezone_value,
)
class TimeZoneField(forms.TypedChoiceField):
def __init__(self, *args, **kwargs):
if not "choices" in kwargs:
kwargs["choices"] = zones.PRETTY_TIMEZONE_CHOICES
kwargs["coerce"] = coerce_timezone_value
super(TimeZoneField, self).__init__(*args, **kwargs)
class LocalizedDateTimeField(forms.DateTimeField):
"""
Converts the datetime from the user timezone to settings.TIME_ZONE.
"""
def __init__(self, timezone=None, *args, **kwargs):
super(LocalizedDateTimeField, self).__init__(*args, **kwargs)
self.timezone = timezone or settings.TIME_ZONE
def clean(self, value):
value = super(LocalizedDateTimeField, self).clean(value)
if value is None: # field was likely not required
return None
return adjust_datetime_to_timezone(value, from_tz=self.timezone)