fix: add render_boolean
, render_quantity
app handler methods
This commit is contained in:
parent
c6a0ecd475
commit
6d16aa0c02
|
@ -676,7 +676,20 @@ class AppHandler:
|
|||
# common value renderers
|
||||
##############################
|
||||
|
||||
def render_currency(self, value, scale=2, **kwargs):
|
||||
def render_boolean(self, value):
|
||||
"""
|
||||
Render a boolean value for display.
|
||||
|
||||
:param value: A boolean, or ``None``.
|
||||
|
||||
:returns: Display string for the value.
|
||||
"""
|
||||
if value is None:
|
||||
return ''
|
||||
|
||||
return "Yes" if value else "No"
|
||||
|
||||
def render_currency(self, value, scale=2):
|
||||
"""
|
||||
Return a human-friendly display string for the given currency
|
||||
value, e.g. ``Decimal('4.20')`` becomes ``"$4.20"``.
|
||||
|
@ -749,6 +762,28 @@ class AppHandler:
|
|||
"""
|
||||
return simple_error(error)
|
||||
|
||||
def render_quantity(self, value, empty_zero=False):
|
||||
"""
|
||||
Return a human-friendly display string for the given quantity
|
||||
value, e.g. ``1.000`` becomes ``"1"``.
|
||||
|
||||
:param value: The quantity to be rendered.
|
||||
|
||||
:param empty_zero: Affects the display when value equals zero.
|
||||
If false (the default), will return ``'0'``; if true then
|
||||
it returns empty string.
|
||||
|
||||
:returns: Display string for the quantity.
|
||||
"""
|
||||
if value is None:
|
||||
return ''
|
||||
if int(value) == value:
|
||||
value = int(value)
|
||||
if empty_zero and value == 0:
|
||||
return ''
|
||||
return str(value)
|
||||
return str(value).rstrip('0')
|
||||
|
||||
def render_time_ago(self, value):
|
||||
"""
|
||||
Return a human-friendly string, indicating how long ago
|
||||
|
|
|
@ -423,6 +423,17 @@ app_title = WuttaTest
|
|||
session = self.app.get_session(user)
|
||||
self.assertIs(session, mysession)
|
||||
|
||||
def test_render_boolean(self):
|
||||
|
||||
# null
|
||||
self.assertEqual(self.app.render_boolean(None), "")
|
||||
|
||||
# true
|
||||
self.assertEqual(self.app.render_boolean(True), "Yes")
|
||||
|
||||
# false
|
||||
self.assertEqual(self.app.render_boolean(False), "No")
|
||||
|
||||
def test_render_currency(self):
|
||||
|
||||
# null
|
||||
|
@ -460,7 +471,7 @@ app_title = WuttaTest
|
|||
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_simple_error(self):
|
||||
def test_render_error(self):
|
||||
|
||||
# with description
|
||||
try:
|
||||
|
@ -476,6 +487,23 @@ app_title = WuttaTest
|
|||
result = self.app.render_error(error)
|
||||
self.assertEqual(result, "RuntimeError")
|
||||
|
||||
def test_render_quantity(self):
|
||||
|
||||
# null
|
||||
self.assertEqual(self.app.render_quantity(None), "")
|
||||
|
||||
# integer decimals become integers
|
||||
value = decimal.Decimal('1.000')
|
||||
self.assertEqual(self.app.render_quantity(value), "1")
|
||||
|
||||
# but decimal places are preserved
|
||||
value = decimal.Decimal('1.234')
|
||||
self.assertEqual(self.app.render_quantity(value), "1.234")
|
||||
|
||||
# zero can be empty string
|
||||
self.assertEqual(self.app.render_quantity(0), "0")
|
||||
self.assertEqual(self.app.render_quantity(0, empty_zero=True), "")
|
||||
|
||||
def test_render_time_ago(self):
|
||||
with patch.object(mod, 'humanize') as humanize:
|
||||
humanize.naturaltime.return_value = 'now'
|
||||
|
|
Loading…
Reference in a new issue