From 2f62aebd575652ea7d29e7d7d74db38518b48021 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Mon, 20 Aug 2018 11:00:11 -0400 Subject: [PATCH 1/2] Refactor how jinja filters are added --- atst/app.py | 8 ++------ atst/filters.py | 7 +++++++ 2 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 atst/filters.py diff --git a/atst/app.py b/atst/app.py index d8a781ac..99279958 100644 --- a/atst/app.py +++ b/atst/app.py @@ -10,7 +10,7 @@ from flask_wtf.csrf import CSRFProtect from atst.database import db from atst.assets import environment as assets_environment - +from atst.filters import register_filters from atst.routes import bp from atst.routes.workspaces import bp as workspace_routes from atst.routes.requests import requests_bp @@ -40,6 +40,7 @@ def make_app(config): make_flask_callbacks(app) make_crl_validator(app) + register_filters(app) db.init_app(app) csrf.init_app(app) @@ -77,11 +78,6 @@ def make_flask_callbacks(app): "atat_permissions": [], } - @app.template_filter('iconSvg') - def _iconSvg(name): - with open('static/icons/'+name+'.svg') as contents: - return contents.read() - def map_config(config): return { diff --git a/atst/filters.py b/atst/filters.py new file mode 100644 index 00000000..10e42379 --- /dev/null +++ b/atst/filters.py @@ -0,0 +1,7 @@ +def iconSvg(name): + with open('static/icons/'+name+'.svg') as contents: + return contents.read() + + +def register_filters(app): + app.jinja_env.filters['iconSvg'] = iconSvg From cfc76f513784d9dafe16966aca11ec0e8e04a722 Mon Sep 17 00:00:00 2001 From: Patrick Smith Date: Mon, 20 Aug 2018 11:00:40 -0400 Subject: [PATCH 2/2] Add filter for formatting dollar values --- atst/filters.py | 9 +++++++++ templates/requests.html | 2 +- tests/test_filters.py | 15 +++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 tests/test_filters.py diff --git a/atst/filters.py b/atst/filters.py index 10e42379..83dd98fd 100644 --- a/atst/filters.py +++ b/atst/filters.py @@ -3,5 +3,14 @@ def iconSvg(name): return contents.read() +def dollars(value): + try: + numberValue = float(value) + except ValueError: + numberValue = 0 + return "${:,.0f}".format(numberValue) + + def register_filters(app): app.jinja_env.filters['iconSvg'] = iconSvg + app.jinja_env.filters['dollars'] = dollars diff --git a/templates/requests.html b/templates/requests.html index 53950e10..a22a884b 100644 --- a/templates/requests.html +++ b/templates/requests.html @@ -116,7 +116,7 @@ {{ r['full_name'] }} {% endif %} - ${{ r['annual_usage'] }} + {{ r['annual_usage'] | dollars }} {{ r['status'] }} {% endfor %} diff --git a/tests/test_filters.py b/tests/test_filters.py new file mode 100644 index 00000000..1ccad18d --- /dev/null +++ b/tests/test_filters.py @@ -0,0 +1,15 @@ +import pytest + +from atst.filters import dollars + + +@pytest.mark.parametrize("input,expected", [ + ('0', '$0'), + ('123.00', '$123'), + ('1234567', '$1,234,567'), + ('-1234', '$-1,234'), + ('one', '$0'), +]) +def test_dollar_fomatter(input, expected): + assert dollars(input) == expected +