From b1baf769985949bfa496c9d8276dbcd2e101072b Mon Sep 17 00:00:00 2001 From: Kevin Morris Date: Fri, 18 Jun 2021 16:55:01 -0700 Subject: [PATCH] add util.as_timezone -> `as_timezone` Jinja2 filter Signed-off-by: Kevin Morris --- aurweb/templates.py | 1 + aurweb/util.py | 5 +++++ test/test_util.py | 7 +++++++ 3 files changed, 13 insertions(+) diff --git a/aurweb/templates.py b/aurweb/templates.py index 8c6f3294..9439f3a3 100644 --- a/aurweb/templates.py +++ b/aurweb/templates.py @@ -25,6 +25,7 @@ env.filters["tr"] = l10n.tr # Utility filters. env.filters["dt"] = util.timestamp_to_datetime +env.filters["as_timezone"] = util.as_timezone # Add captcha filters. env.filters["captcha_salt"] = captcha.captcha_salt_filter diff --git a/aurweb/util.py b/aurweb/util.py index ce18853b..1615e00a 100644 --- a/aurweb/util.py +++ b/aurweb/util.py @@ -5,6 +5,7 @@ import string from datetime import datetime from urllib.parse import urlparse +from zoneinfo import ZoneInfo from email_validator import EmailNotValidError, EmailUndeliverableError, validate_email from jinja2 import pass_context @@ -101,6 +102,10 @@ def timestamp_to_datetime(timestamp: int): return datetime.utcfromtimestamp(int(timestamp)) +def as_timezone(dt: datetime, timezone: str): + return dt.astimezone(tz=ZoneInfo(timezone)) + + def jsonify(obj): """ Perform a conversion on obj if it's needed. """ if isinstance(obj, datetime): diff --git a/test/test_util.py b/test/test_util.py index cd7b7a57..d58a8ae2 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -1,4 +1,5 @@ from datetime import datetime +from zoneinfo import ZoneInfo from aurweb import util @@ -7,3 +8,9 @@ def test_timestamp_to_datetime(): ts = datetime.utcnow().timestamp() dt = datetime.utcfromtimestamp(int(ts)) assert util.timestamp_to_datetime(ts) == dt + + +def test_as_timezone(): + ts = datetime.utcnow().timestamp() + dt = util.timestamp_to_datetime(ts) + assert util.as_timezone(dt, "UTC") == dt.astimezone(tz=ZoneInfo("UTC"))