fix: render datetimes with tooltip showing time delta from now
This commit is contained in:
parent
ca20fdfd03
commit
0619f070c7
6 changed files with 17 additions and 37 deletions
|
|
@ -274,7 +274,7 @@ class WuttaDateTimeWidget(DateTimeInputWidget):
|
|||
if not cstruct:
|
||||
return ""
|
||||
dt = datetime.datetime.fromisoformat(cstruct)
|
||||
return self.app.render_datetime(dt)
|
||||
return self.app.render_datetime(dt, html=True)
|
||||
|
||||
return super().serialize(field, cstruct, **kw)
|
||||
|
||||
|
|
|
|||
|
|
@ -2041,7 +2041,7 @@ class Grid: # pylint: disable=too-many-instance-attributes,too-many-public-meth
|
|||
grid.set_renderer('foo', 'datetime')
|
||||
"""
|
||||
dt = getattr(obj, key)
|
||||
return self.app.render_datetime(dt)
|
||||
return self.app.render_datetime(dt, html=True)
|
||||
|
||||
def render_enum(self, obj, key, value, enum=None):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ Base Logic for Master Views
|
|||
"""
|
||||
# pylint: disable=too-many-lines
|
||||
|
||||
import datetime
|
||||
import logging
|
||||
import os
|
||||
import threading
|
||||
|
|
@ -1280,7 +1279,6 @@ class MasterView(View): # pylint: disable=too-many-public-methods
|
|||
|
||||
# issued_at
|
||||
g.set_label("issued_at", "Changed")
|
||||
g.set_renderer("issued_at", self.render_issued_at)
|
||||
g.set_link("issued_at")
|
||||
g.set_sort_defaults("issued_at", "desc")
|
||||
|
||||
|
|
@ -1390,7 +1388,7 @@ class MasterView(View): # pylint: disable=too-many-public-methods
|
|||
"instance_title": instance_title,
|
||||
"instance_url": self.get_action_url("versions", instance),
|
||||
"transaction": txn,
|
||||
"changed": self.render_issued_at(txn, None, None),
|
||||
"changed": self.app.render_datetime(txn.issued_at, html=True),
|
||||
"version_diffs": version_diffs,
|
||||
"show_prev_next": True,
|
||||
"prev_url": prev_url,
|
||||
|
|
@ -1421,14 +1419,6 @@ class MasterView(View): # pylint: disable=too-many-public-methods
|
|||
.all()
|
||||
)
|
||||
|
||||
def render_issued_at( # pylint: disable=missing-function-docstring,unused-argument
|
||||
self, txn, key, value
|
||||
):
|
||||
dt = txn.issued_at
|
||||
dt = dt.replace(tzinfo=datetime.timezone.utc)
|
||||
dt = dt.astimezone(None)
|
||||
return self.app.render_datetime(dt)
|
||||
|
||||
##############################
|
||||
# autocomplete methods
|
||||
##############################
|
||||
|
|
@ -2025,22 +2015,17 @@ class MasterView(View): # pylint: disable=too-many-public-methods
|
|||
fmt = f"${{:0,.{scale}f}}"
|
||||
return fmt.format(value)
|
||||
|
||||
def grid_render_datetime(self, record, key, value, fmt=None):
|
||||
"""
|
||||
Custom grid value renderer for
|
||||
:class:`~python:datetime.datetime` fields.
|
||||
def grid_render_datetime( # pylint: disable=empty-docstring
|
||||
self, record, key, value, fmt=None
|
||||
):
|
||||
""" """
|
||||
warnings.warn(
|
||||
"MasterView.grid_render_datetime() is deprecated; "
|
||||
"please use app.render_datetime() directly instead",
|
||||
DeprecationWarning,
|
||||
stacklevel=2,
|
||||
)
|
||||
|
||||
:param fmt: Optional format string to use instead of the
|
||||
default: ``'%Y-%m-%d %I:%M:%S %p'``
|
||||
|
||||
To use this feature for your grid::
|
||||
|
||||
grid.set_renderer('my_datetime_field', self.grid_render_datetime)
|
||||
|
||||
# you can also override format
|
||||
grid.set_renderer('my_datetime_field', self.grid_render_datetime,
|
||||
fmt='%Y-%m-%d %H:%M:%S')
|
||||
"""
|
||||
# nb. get new value since the one provided will just be a
|
||||
# (json-safe) *string* if the original type was datetime
|
||||
value = record[key]
|
||||
|
|
|
|||
|
|
@ -81,9 +81,6 @@ class UpgradeView(MasterView): # pylint: disable=abstract-method
|
|||
# description
|
||||
g.set_link("description")
|
||||
|
||||
# created
|
||||
g.set_renderer("created", self.grid_render_datetime)
|
||||
|
||||
# created_by
|
||||
g.set_link("created_by")
|
||||
Creator = orm.aliased(model.User) # pylint: disable=invalid-name
|
||||
|
|
@ -96,9 +93,6 @@ class UpgradeView(MasterView): # pylint: disable=abstract-method
|
|||
# status
|
||||
g.set_renderer("status", self.grid_render_enum, enum=enum.UpgradeStatus)
|
||||
|
||||
# executed
|
||||
g.set_renderer("executed", self.grid_render_datetime)
|
||||
|
||||
# executed_by
|
||||
g.set_link("executed_by")
|
||||
Executor = orm.aliased(model.User) # pylint: disable=invalid-name
|
||||
|
|
|
|||
|
|
@ -207,7 +207,8 @@ class TestWuttaDateTimeWidget(WebTestCase):
|
|||
# input data (from schema type) is always "local, zone-aware, isoformat"
|
||||
dt = datetime.datetime(2024, 12, 12, 13, 49, tzinfo=tzlocal)
|
||||
result = widget.serialize(field, dt.isoformat())
|
||||
self.assertEqual(result, "2024-12-12 13:49-0500")
|
||||
self.assertTrue(result.startswith('<span title="'))
|
||||
self.assertIn("2024-12-12 13:49-0500", result)
|
||||
|
||||
|
||||
class TestWuttaMoneyInputWidget(WebTestCase):
|
||||
|
|
|
|||
|
|
@ -1681,8 +1681,8 @@ class TestGrid(WebTestCase):
|
|||
dt = datetime.datetime(2024, 12, 12, 13, 44)
|
||||
obj = MagicMock(dt=dt)
|
||||
result = grid.render_datetime(obj, "dt", str(dt))
|
||||
self.assertEqual(result, "2024-12-12 05:44-0800")
|
||||
self.assertNotEqual(result, str(dt))
|
||||
self.assertTrue(result.startswith('<span title="'))
|
||||
self.assertIn("2024-12-12 05:44-0800", result)
|
||||
|
||||
def test_render_vue_tag(self):
|
||||
grid = self.make_grid(columns=["foo", "bar"])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue