diff --git a/puppetboard/app.py b/puppetboard/app.py index dbbe05d..583e826 100644 --- a/puppetboard/app.py +++ b/puppetboard/app.py @@ -21,7 +21,7 @@ from pypuppetdb import connect from puppetboard.forms import (CatalogForm, QueryForm) from puppetboard.utils import ( get_or_abort, yield_or_stop, - jsonprint, Pagination + jsonprint, prettyprint, Pagination ) @@ -34,6 +34,7 @@ graph_facts += app.config['GRAPH_FACTS'] app.secret_key = app.config['SECRET_KEY'] app.jinja_env.filters['jsonprint'] = jsonprint +app.jinja_env.filters['prettyprint'] = prettyprint puppetdb = connect( host=app.config['PUPPETDB_HOST'], diff --git a/puppetboard/forms.py b/puppetboard/forms.py index 87e378e..3d80162 100644 --- a/puppetboard/forms.py +++ b/puppetboard/forms.py @@ -4,7 +4,7 @@ from __future__ import absolute_import from flask.ext.wtf import Form from wtforms import ( HiddenField, RadioField, SelectField, - TextAreaField, validators + TextAreaField, BooleanField, validators ) @@ -26,6 +26,7 @@ class QueryForm(Form): ('edges', 'Edges'), ('environments', 'Environments'), ]) + rawjson = BooleanField('Raw JSON') class CatalogForm(Form): """The form used to compare the catalogs of different nodes.""" diff --git a/puppetboard/templates/query.html b/puppetboard/templates/query.html index 12d8087..6071291 100644 --- a/puppetboard/templates/query.html +++ b/puppetboard/templates/query.html @@ -26,6 +26,11 @@ {% endfor %} +
+
+ {{ form.rawjson(active=True) }} Raw JSON +
+
@@ -35,7 +40,13 @@

Result

+ {% if form.rawjson.data %}
{{ result|jsonprint }}
+ {% else %} + {% autoescape false %} + {{ result|prettyprint}} + {% endautoescape %} + {% endif %}
{% endif %} diff --git a/puppetboard/utils.py b/puppetboard/utils.py index cd9dd99..9185008 100644 --- a/puppetboard/utils.py +++ b/puppetboard/utils.py @@ -22,6 +22,35 @@ log = logging.getLogger(__name__) def jsonprint(value): return json.dumps(value, indent=2, separators=(',', ': ')) +def formatvalue(value): + if isinstance(value, str): + return value + elif isinstance(value, list): + return ", ".join(value) + elif isinstance(value, dict): + ret = "" + for k in value: + ret += k+" => "+formatvalue(value[k])+",
" + return ret + else: + return str(value) + +def prettyprint(value): + html = '' + + # Get keys + for k in value[0]: + html += "" + + for e in value: + html += "" + for k in e: + html += "" + html += "" + + html += "" + html += "
"+k+"
"+formatvalue(e[k])+"
" + return(html) def get_or_abort(func, *args, **kwargs): """Execute the function with its arguments and handle the possible