diff --git a/puppetboard/app.py b/puppetboard/app.py index 60482b00a..a36d33805 100644 --- a/puppetboard/app.py +++ b/puppetboard/app.py @@ -66,6 +66,12 @@ log = logging.getLogger(__name__) +@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 9e38570f3..7bd982de7 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 149c6b44d..e1b18aed9 100644 --- a/test/test_app.py +++ b/test/test_app.py @@ -637,7 +637,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): @@ -658,14 +658,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,