Skip to content

Commit

Permalink
Fix #356 with the new template
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
redref committed Feb 5, 2017
1 parent ba135ba commit 4d522d8
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 6 deletions.
6 changes: 6 additions & 0 deletions puppetboard/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions puppetboard/templates/fact.json.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -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 %}
Expand Down
8 changes: 4 additions & 4 deletions test/test_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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,
Expand Down

0 comments on commit 4d522d8

Please sign in to comment.