3
0
Fork 0

fix: add render_percent() method for app handler

This commit is contained in:
Lance Edgar 2025-01-11 19:08:34 -06:00
parent 20d4d4d93f
commit a9d2f32e40
2 changed files with 32 additions and 0 deletions

View file

@ -772,6 +772,22 @@ class AppHandler:
""" """
return simple_error(error) return simple_error(error)
def render_percent(self, value, decimals=2):
"""
Return a human-friendly display string for the given
percentage value, e.g. ``23.45139`` becomes ``"23.45 %"``.
:param value: The value to be rendered.
:returns: Display string for the percentage value.
"""
if value is None:
return ""
fmt = f'{{:0.{decimals}f}} %'
if value < 0:
return f'({fmt.format(-value)})'
return fmt.format(value)
def render_quantity(self, value, empty_zero=False): def render_quantity(self, value, empty_zero=False):
""" """
Return a human-friendly display string for the given quantity Return a human-friendly display string for the given quantity

View file

@ -491,6 +491,22 @@ app_title = WuttaTest
result = self.app.render_error(error) result = self.app.render_error(error)
self.assertEqual(result, "RuntimeError") self.assertEqual(result, "RuntimeError")
def test_render_percent(self):
# null
self.assertEqual(self.app.render_percent(None), "")
# typical
self.assertEqual(self.app.render_percent(12.3419), '12.34 %')
# more decimal places
self.assertEqual(self.app.render_percent(12.3419, decimals=3), '12.342 %')
self.assertEqual(self.app.render_percent(12.3419, decimals=4), '12.3419 %')
# negative
self.assertEqual(self.app.render_percent(-12.3419), '(12.34 %)')
self.assertEqual(self.app.render_percent(-12.3419, decimals=3), '(12.342 %)')
def test_render_quantity(self): def test_render_quantity(self):
# null # null