From 484727b62c7891c42fede4ecbdc2cb70aa796519 Mon Sep 17 00:00:00 2001 From: redref Date: Sun, 5 Feb 2017 21:27:50 +0100 Subject: [PATCH] Fix #356 with the new template Created a custom template_filter as in python3, the groupby filter cannot order Bool vs Str. Needed to push format before the groupby which is not currently possible in jinja. --- puppetboard/app.py | 6 ++++++ puppetboard/templates/fact.json.tpl | 4 ++-- test/test_app.py | 8 ++++---- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/puppetboard/app.py b/puppetboard/app.py index 147432a..b3354c5 100644 --- a/puppetboard/app.py +++ b/puppetboard/app.py @@ -78,6 +78,12 @@ def version(): return __version__ +@app.template_filter() +def format_attribute(obj, attr, format_str): + setattr(obj, attr, format_str.format(getattr(obj, attr))) + return obj + + def stream_template(template_name, **context): app.update_template_context(context) t = app.jinja_env.get_template(template_name) diff --git a/puppetboard/templates/fact.json.tpl b/puppetboard/templates/fact.json.tpl index 9e38570..7bd982d 100644 --- a/puppetboard/templates/fact.json.tpl +++ b/puppetboard/templates/fact.json.tpl @@ -26,10 +26,10 @@ ] {%- if render_graph %}, "chart": [ - {% for fact_h in facts | groupby('value') -%} + {% for fact_h in facts | map('format_attribute', 'value', '{0}') | groupby('value') -%} {%- if not loop.first %},{%- endif -%} { - "label": {{ fact_h.grouper.replace("\n", " ") | jsonprint }}, + "label": {{ fact_h.grouper | replace("\n", " ") | jsonprint }}, "value": {{ fact_h.list|length }} } {% endfor %} diff --git a/test/test_app.py b/test/test_app.py index 357e5ba..79e4d1b 100644 --- a/test/test_app.py +++ b/test/test_app.py @@ -699,7 +699,7 @@ def test_node_view(client, mocker, def test_fact_json_with_graph(client, mocker, mock_puppetdb_environments, mock_puppetdb_default_nodes): - values = ['a', 'b', 'b', 'd'] + values = ['a', 'b', 'b', 'd', True, 'a\nb'] query_data = {'facts': []} query_data['facts'].append([]) for i, value in enumerate(values): @@ -720,14 +720,14 @@ def test_fact_json_with_graph(client, mocker, result_json = json.loads(rv.data.decode('utf-8')) assert 'data' in result_json - assert len(result_json['data']) == 4 + assert len(result_json['data']) == 6 for line in result_json['data']: assert len(line) == 2 assert 'chart' in result_json - assert len(result_json['chart']) == 3 + assert len(result_json['chart']) == 5 # Test group_by - assert result_json['chart'][1]['value'] == 2 + assert result_json['chart'][3]['value'] == 2 def test_fact_json_without_graph(client, mocker,