From abeb97b3856f580cc0d729e268a67fe566ae4e4f Mon Sep 17 00:00:00 2001 From: marcos ppca Date: Thu, 6 Nov 2025 07:36:42 -0300 Subject: [PATCH 1/4] refactor: replace if/elif with match/case --- kitsune/sumo/templatetags/jinja_helpers.py | 64 ++++++++++++---------- 1 file changed, 36 insertions(+), 28 deletions(-) diff --git a/kitsune/sumo/templatetags/jinja_helpers.py b/kitsune/sumo/templatetags/jinja_helpers.py index ce003a01d95..9cf2e110999 100644 --- a/kitsune/sumo/templatetags/jinja_helpers.py +++ b/kitsune/sumo/templatetags/jinja_helpers.py @@ -278,34 +278,42 @@ def datetimeformat(context, value, format="shortdatetime", use_naturaltime=False if use_naturaltime and (django_now().astimezone(convert_tzinfo) - convert_value).days < 30: return naturaltime(convert_value) - if format == "shortdatetime" or format == "shortdate": - # Check if the date is today - today = datetime.datetime.now(tz=convert_tzinfo).toordinal() - kwargs = {"format": "short", "tzinfo": convert_tzinfo, "locale": locale} - if convert_value.toordinal() == today: - formatted = _lazy("Today at %s") % format_time(convert_value, **kwargs) - elif format == "shortdatetime": - formatted = format_datetime(convert_value, **kwargs) - else: - del kwargs["tzinfo"] - formatted = format_date(convert_value, **kwargs) - elif format == "longdatetime": - formatted = format_datetime( - convert_value, format="long", tzinfo=convert_tzinfo, locale=locale - ) - elif format == "date": - formatted = format_date(convert_value, locale=locale) - elif format == "time": - formatted = format_time(convert_value, tzinfo=convert_tzinfo, locale=locale) - elif format == "datetime": - formatted = format_datetime(convert_value, tzinfo=convert_tzinfo, locale=locale) - elif format == "year": - formatted = format_datetime( - convert_value, format="yyyy", tzinfo=convert_tzinfo, locale=locale - ) - else: - # Unknown format - raise DateTimeFormatError + match format: + case "shortdatetime" | "shortdate": + # Check if the date is today + today = datetime.datetime.now(tz=convert_tzinfo).toordinal() + kwargs = {"format": "short", "tzinfo": convert_tzinfo, "locale": locale} + if convert_value.toordinal() == today: + formatted = _lazy("Today at %s") % format_time(convert_value, **kwargs) + elif format == "shortdatetime": + formatted = format_datetime(convert_value, **kwargs) + else: + del kwargs["tzinfo"] + formatted = format_date(convert_value, **kwargs) + + case "longdatetime": + formatted = format_datetime( + convert_value, format="long", tzinfo=convert_tzinfo, locale=locale + ) + + case "date": + formatted = format_date(convert_value, locale=locale) + + case "time": + formatted = format_time(convert_value, tzinfo=convert_tzinfo, locale=locale) + + case "datetime": + formatted = format_datetime(convert_value, tzinfo=convert_tzinfo, locale=locale) + + case "year": + formatted = format_datetime( + convert_value, format="yyyy", tzinfo=convert_tzinfo, locale=locale + ) + + case _: + # Unknown format + raise DateTimeFormatError + return Markup(''.format(convert_value.isoformat(), formatted)) From 8145333175fea635dfdab5c3002bba879d4173a5 Mon Sep 17 00:00:00 2001 From: marcos ppca Date: Thu, 6 Nov 2025 07:41:54 -0300 Subject: [PATCH 2/4] refactor: replace if/elif with match/case --- kitsune/sumo/templatetags/jinja_helpers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/kitsune/sumo/templatetags/jinja_helpers.py b/kitsune/sumo/templatetags/jinja_helpers.py index 9cf2e110999..da8fff320c1 100644 --- a/kitsune/sumo/templatetags/jinja_helpers.py +++ b/kitsune/sumo/templatetags/jinja_helpers.py @@ -309,7 +309,6 @@ def datetimeformat(context, value, format="shortdatetime", use_naturaltime=False formatted = format_datetime( convert_value, format="yyyy", tzinfo=convert_tzinfo, locale=locale ) - case _: # Unknown format raise DateTimeFormatError From a8d57e22ae2117cbe641fce4209916022c6c53f1 Mon Sep 17 00:00:00 2001 From: marcos ppca Date: Fri, 7 Nov 2025 08:21:46 -0300 Subject: [PATCH 3/4] style: remove extra blank line for consistency --- kitsune/sumo/templatetags/jinja_helpers.py | 7 ------- 1 file changed, 7 deletions(-) diff --git a/kitsune/sumo/templatetags/jinja_helpers.py b/kitsune/sumo/templatetags/jinja_helpers.py index da8fff320c1..e2c15e302db 100644 --- a/kitsune/sumo/templatetags/jinja_helpers.py +++ b/kitsune/sumo/templatetags/jinja_helpers.py @@ -290,21 +290,16 @@ def datetimeformat(context, value, format="shortdatetime", use_naturaltime=False else: del kwargs["tzinfo"] formatted = format_date(convert_value, **kwargs) - case "longdatetime": formatted = format_datetime( convert_value, format="long", tzinfo=convert_tzinfo, locale=locale ) - case "date": formatted = format_date(convert_value, locale=locale) - case "time": formatted = format_time(convert_value, tzinfo=convert_tzinfo, locale=locale) - case "datetime": formatted = format_datetime(convert_value, tzinfo=convert_tzinfo, locale=locale) - case "year": formatted = format_datetime( convert_value, format="yyyy", tzinfo=convert_tzinfo, locale=locale @@ -312,8 +307,6 @@ def datetimeformat(context, value, format="shortdatetime", use_naturaltime=False case _: # Unknown format raise DateTimeFormatError - - return Markup(''.format(convert_value.isoformat(), formatted)) From aa6c5cdb2b44491f660d47c8601bee6aa2154736 Mon Sep 17 00:00:00 2001 From: marcos ppca Date: Fri, 7 Nov 2025 11:52:49 -0300 Subject: [PATCH 4/4] fix: adjust datetimeformat logic for CI validation - if for match --- kitsune/sumo/templatetags/jinja_helpers.py | 29 ++++++++++++++-------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/kitsune/sumo/templatetags/jinja_helpers.py b/kitsune/sumo/templatetags/jinja_helpers.py index e2c15e302db..b6ff4a7557e 100644 --- a/kitsune/sumo/templatetags/jinja_helpers.py +++ b/kitsune/sumo/templatetags/jinja_helpers.py @@ -280,16 +280,26 @@ def datetimeformat(context, value, format="shortdatetime", use_naturaltime=False match format: case "shortdatetime" | "shortdate": - # Check if the date is today - today = datetime.datetime.now(tz=convert_tzinfo).toordinal() - kwargs = {"format": "short", "tzinfo": convert_tzinfo, "locale": locale} - if convert_value.toordinal() == today: - formatted = _lazy("Today at %s") % format_time(convert_value, **kwargs) + today_date = datetime.datetime.now(tz=convert_tzinfo).date() + + def _as_date_in_tz(v, tz): + import datetime as _dt + if isinstance(v, _dt.date) and not isinstance(v, _dt.datetime): + return v + if tz is None: + return v.date() + if v.tzinfo is None: + return v.replace(tzinfo=tz).date() + return v.astimezone(tz).date() + + value_date = _as_date_in_tz(convert_value, convert_tzinfo) + kwargs_dt = {"format": "short", "tzinfo": convert_tzinfo, "locale": locale} + if value_date == today_date: + formatted = _lazy("Today at %s") % format_time(convert_value, **kwargs_dt) elif format == "shortdatetime": - formatted = format_datetime(convert_value, **kwargs) - else: - del kwargs["tzinfo"] - formatted = format_date(convert_value, **kwargs) + formatted = format_datetime(convert_value, **kwargs_dt) + else: # shortdate + formatted = format_date(convert_value, format="short", locale=locale) case "longdatetime": formatted = format_datetime( convert_value, format="long", tzinfo=convert_tzinfo, locale=locale @@ -305,7 +315,6 @@ def datetimeformat(context, value, format="shortdatetime", use_naturaltime=False convert_value, format="yyyy", tzinfo=convert_tzinfo, locale=locale ) case _: - # Unknown format raise DateTimeFormatError return Markup(''.format(convert_value.isoformat(), formatted))