3
0
Fork 0

fix: add render_percent() method for Grid

also shortcut for grid.set_renderer()
This commit is contained in:
Lance Edgar 2025-01-25 22:34:49 -06:00
parent a66312b667
commit 29d3183a88
2 changed files with 34 additions and 0 deletions

View file

@ -612,6 +612,7 @@ class Grid:
* ``'date'`` -> :meth:`render_date()`
* ``'datetime'`` -> :meth:`render_datetime()`
* ``'quantity'`` -> :meth:`render_quantity()`
* ``'percent'`` -> :meth:`render_percent()`
Renderer overrides are tracked via :attr:`renderers`.
"""
@ -622,6 +623,7 @@ class Grid:
'date': self.render_date,
'datetime': self.render_datetime,
'quantity': self.render_quantity,
'percent': self.render_percent,
}
if renderer in builtins:
@ -1884,6 +1886,20 @@ class Grid:
dt = getattr(obj, key)
return self.app.render_datetime(dt)
def render_percent(self, obj, key, value, **kwargs):
"""
Column renderer for percentage values.
This calls
:meth:`~wuttjamaican:wuttjamaican.app.AppHandler.render_percent()`
for the return value.
This is not used automatically but you can use it explicitly::
grid.set_renderer('foo', 'percent')
"""
return self.app.render_percent(value, **kwargs)
def render_quantity(self, obj, key, value):
"""
Column renderer for quantity values.

View file

@ -1409,6 +1409,24 @@ class TestGrid(WebTestCase):
value = decimal.Decimal('-42.42')
self.assertEqual(grid.render_currency(obj, 'foo', value), '($42.42)')
def test_render_percent(self):
grid = self.make_grid(columns=['foo', 'bar'])
obj = MagicMock()
# null
self.assertEqual(grid.render_percent(obj, 'foo', None), "")
# typical
self.assertEqual(grid.render_percent(obj, 'foo', 12.3419), '12.34 %')
# more decimal places
self.assertEqual(grid.render_percent(obj, 'foo', 12.3419, decimals=3), '12.342 %')
self.assertEqual(grid.render_percent(obj, 'foo', 12.3419, decimals=4), '12.3419 %')
# negative
self.assertEqual(grid.render_percent(obj, 'foo', -12.3419), '(12.34 %)')
self.assertEqual(grid.render_percent(obj, 'foo', -12.3419, decimals=3), '(12.342 %)')
def test_render_quantity(self):
grid = self.make_grid(columns=['foo', 'bar'])
obj = MagicMock()