Skip to content

Commit

Permalink
supports Django 4.2 (does not rely on pytz anymore)
Browse files Browse the repository at this point in the history
  • Loading branch information
smirolo committed Jul 29, 2024
1 parent 85542f9 commit 8cd53e5
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 14 deletions.
47 changes: 46 additions & 1 deletion signup/compat.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (c) 2022, Djaodjin Inc.
# Copyright (c) 2024, Djaodjin Inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
Expand Down Expand Up @@ -30,6 +30,51 @@
#pylint:disable=no-name-in-module,import-error
from six.moves.urllib.parse import urlparse, urlunparse

#pylint:disable=ungrouped-imports
try:
from datetime import timezone
import zoneinfo

def timezone_or_utc(tzone=None):
if tzone:
if issubclass(type(tzone), zoneinfo.ZoneInfo):
return tzone
try:
return zoneinfo.ZoneInfo(tzone)
except zoneinfo.ZoneInfoNotFoundError:
pass
return timezone.utc

except ImportError:
try:
from datetime import timezone
from backports import zoneinfo

def timezone_or_utc(tzone=None):
if tzone:
if issubclass(type(tzone), zoneinfo.ZoneInfo):
return tzone
try:
return zoneinfo.ZoneInfo(tzone)
except zoneinfo.ZoneInfoNotFoundError:
pass
return timezone.utc

except ImportError:
import pytz
from pytz.tzinfo import DstTzInfo

def timezone_or_utc(tzone=None):
if tzone:
if issubclass(type(tzone), DstTzInfo):
return tzone
try:
return pytz.timezone(tzone)
except pytz.UnknownTimeZoneError:
pass
return pytz.utc


try:
from django.urls import NoReverseMatch, reverse, reverse_lazy
except ImportError: # <= Django 1.10, Python<3.6
Expand Down
36 changes: 24 additions & 12 deletions signup/helpers.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Copyright (c) 2023, DjaoDjin inc.
# Copyright (c) 2024, DjaoDjin inc.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
Expand All @@ -24,28 +24,40 @@

import datetime

from dateutil.parser import parse
from django.utils.timezone import utc
from django.utils.dateparse import parse_date, parse_datetime

# Implementation Note: We cannot import `signup.settings` here otherwise
# EXTRA_MIXIN is not setup properly (i.e. it uses the default one).
from .compat import six
from .compat import six, timezone_or_utc

def as_timestamp(dtime_at=None):
if not dtime_at:
dtime_at = datetime_or_now()
return int((
dtime_at - datetime.datetime(1970, 1, 1, tzinfo=utc)).total_seconds())
dtime_at - datetime.datetime(1970, 1, 1,
tzinfo=timezone_or_utc())).total_seconds())


def datetime_or_now(dtime_at=None):
if not dtime_at:
return datetime.datetime.utcnow().replace(tzinfo=utc)
def datetime_or_now(dtime_at=None, tzinfo=None):
tzinfo = timezone_or_utc(tzinfo)
as_datetime = dtime_at
if isinstance(dtime_at, six.string_types):
dtime_at = parse(dtime_at)
if dtime_at.tzinfo is None:
dtime_at = dtime_at.replace(tzinfo=utc)
return dtime_at
as_datetime = parse_datetime(dtime_at)
if not as_datetime:
as_date = parse_date(dtime_at)
if as_date:
as_datetime = datetime.datetime.combine(
as_date, datetime.time.min)
elif (not isinstance(dtime_at, datetime.datetime) and
isinstance(dtime_at, datetime.date)):
as_datetime = datetime.datetime.combine(
dtime_at, datetime.time.min)
if not as_datetime:
as_datetime = datetime.datetime.now(tz=tzinfo)
if (as_datetime.tzinfo is None or
as_datetime.tzinfo.utcoffset(as_datetime) is None):
as_datetime = as_datetime.replace(tzinfo=tzinfo)
return as_datetime


def full_name_natural_split(full_name, middle_initials=True):
Expand Down
2 changes: 1 addition & 1 deletion signup/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@
if django.VERSION[0] >= 4:
_DEFAULT_ENCRYPTED_FIELD = None
sys.stderr.write("warning: encrypted fields disabled"\
" because django-fernet==0.6 is incompatible with Django4+")
" because django-fernet==0.6 is incompatible with Django4+\n")

_SETTINGS = {
'ACCOUNT_ACTIVATION_DAYS': getattr(settings, 'ACCOUNT_ACTIVATION_DAYS', 2),
Expand Down

0 comments on commit 8cd53e5

Please sign in to comment.