diff --git a/src/wuttjamaican/app.py b/src/wuttjamaican/app.py index 6a5f288..7a7000c 100644 --- a/src/wuttjamaican/app.py +++ b/src/wuttjamaican/app.py @@ -668,6 +668,51 @@ class AppHandler: return False + ############################## + # common value renderers + ############################## + + display_format_date = '%Y-%m-%d' + """ + Format string to use when displaying :class:`python:datetime.date` + objects. See also :meth:`render_date()`. + """ + + display_format_datetime = '%Y-%m-%d %H:%M%z' + """ + Format string to use when displaying + :class:`python:datetime.datetime` objects. See also + :meth:`render_datetime()`. + """ + + def render_date(self, value): + """ + Return a human-friendly display string for the given date. + + Uses :attr:`display_format_date` to render the value. + + :param value: A :class:`python:datetime.date` instance (or + ``None``). + + :returns: Display string, or ``None``. + """ + if value is not None: + return value.strftime(self.display_format_date) + + def render_datetime(self, value): + """ + Return a human-friendly display string for the given datetime. + + Uses :attr:`display_format_datetime` to render the value. + + :param value: A :class:`python:datetime.datetime` instance (or + ``None``). + + :returns: Display string, or ``None``. + """ + if value is not None: + return value.strftime(self.display_format_datetime) + ############################## # getters for other handlers ############################## diff --git a/tests/test_app.py b/tests/test_app.py index 4504ba9..be67509 100644 --- a/tests/test_app.py +++ b/tests/test_app.py @@ -1,5 +1,6 @@ # -*- coding: utf-8; -*- +import datetime import os import shutil import sys @@ -421,6 +422,18 @@ app_title = WuttaTest session = self.app.get_session(user) self.assertIs(session, mysession) + def test_render_date(self): + self.assertIsNone(self.app.render_date(None)) + + dt = datetime.date(2024, 12, 11) + self.assertEqual(self.app.render_date(dt), '2024-12-11') + + def test_render_datetime(self): + self.assertIsNone(self.app.render_datetime(None)) + + dt = datetime.datetime(2024, 12, 11, 8, 30, tzinfo=datetime.timezone.utc) + self.assertEqual(self.app.render_datetime(dt), '2024-12-11 08:30+0000') + def test_get_person(self): people = self.app.get_people_handler() with patch.object(people, 'get_person') as get_person: