From 7cfe6e15f4e38ce8ccccc5558c72adf27f25c481 Mon Sep 17 00:00:00 2001 From: Lance Edgar Date: Fri, 27 Feb 2026 16:29:17 -0600 Subject: [PATCH] fix: fix timezone edge case for `WuttaDateWidget` --- src/wuttaweb/forms/widgets.py | 5 ++++- tests/forms/test_widgets.py | 9 +++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/wuttaweb/forms/widgets.py b/src/wuttaweb/forms/widgets.py index 93be573..ac65667 100644 --- a/src/wuttaweb/forms/widgets.py +++ b/src/wuttaweb/forms/widgets.py @@ -234,7 +234,10 @@ class WuttaDateWidget(DateInputWidget): """ """ readonly = kw.get("readonly", self.readonly) if readonly and cstruct: - dt = datetime.datetime.fromisoformat(cstruct) + try: + dt = datetime.date.fromisoformat(cstruct) + except ValueError: + dt = datetime.datetime.fromisoformat(cstruct) return self.app.render_date(dt) return super().serialize(field, cstruct, **kw) diff --git a/tests/forms/test_widgets.py b/tests/forms/test_widgets.py index 818c38a..deb44ab 100644 --- a/tests/forms/test_widgets.py +++ b/tests/forms/test_widgets.py @@ -139,6 +139,9 @@ class TestWuttaDateWidget(WebTestCase): return mod.WuttaDateWidget(self.request, **kwargs) def test_serialize(self): + self.config.setdefault("wuttatest.timezone.default", "America/Los_Angeles") + tzlocal = get_timezone_by_name("America/Los_Angeles") + node = colander.SchemaNode(colander.Date()) field = self.make_field(node) @@ -156,7 +159,9 @@ class TestWuttaDateWidget(WebTestCase): # now try again with datetime widget = self.make_widget() - dt = datetime.datetime(2025, 1, 15, 8, 35) + # nb. local zone is Los_Angeles but this is presumed to be "naive UTC" + # hence local date is 2025-01-14 + dt = datetime.datetime(2025, 1, 15, 4, 35) # editable widget has normal picker html result = widget.serialize(field, str(dt)) @@ -164,7 +169,7 @@ class TestWuttaDateWidget(WebTestCase): # readonly is rendered per app convention result = widget.serialize(field, str(dt), readonly=True) - self.assertEqual(result, "2025-01-15") + self.assertEqual(result, "2025-01-14") class TestWuttaDateTimeWidget(WebTestCase):