From a8adf58cb6b629b22a38597c1cee2a858b2c70c8 Mon Sep 17 00:00:00 2001
From: Jan Mach <jan.mach@cesnet.cz>
Date: Thu, 13 Jun 2019 15:05:58 +0200
Subject: [PATCH] Added support for dumping raw data structures as YAML.

Some users may prefer viewing IDEA messages in YAML format, because it contains much less funny characters.
---
 conf/requirements-latest.pip                    |  1 +
 conf/requirements.pip                           |  1 +
 lib/hawat/app.py                                | 17 ++++++++++++++++-
 .../events/templates/events/show.html           | 12 ++++++++++++
 4 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/conf/requirements-latest.pip b/conf/requirements-latest.pip
index 7c33f250b..b96fb953c 100644
--- a/conf/requirements-latest.pip
+++ b/conf/requirements-latest.pip
@@ -22,6 +22,7 @@ flask-debugtoolbar
 flask-jsglue
 geoip2
 rrdtool
+pyyaml
 pydgets
 pyzenkit
 pynspect
diff --git a/conf/requirements.pip b/conf/requirements.pip
index c721506a6..5504f528c 100644
--- a/conf/requirements.pip
+++ b/conf/requirements.pip
@@ -22,6 +22,7 @@ flask-debugtoolbar==0.10.1
 flask-jsglue==0.3.1
 geoip2==2.9.0
 rrdtool==0.1.14
+pyyaml==5.1.1
 pydgets==0.9
 pyzenkit==0.54
 pynspect==0.16
diff --git a/lib/hawat/app.py b/lib/hawat/app.py
index 7f9aa2950..1db2a41d5 100644
--- a/lib/hawat/app.py
+++ b/lib/hawat/app.py
@@ -28,6 +28,7 @@ import os
 import copy
 import datetime
 import jinja2
+import yaml
 
 #
 # Flask related modules.
@@ -432,6 +433,19 @@ def _setup_app_core(app):
                 app.jinja_loader.get_source(app.jinja_env, filename)[0]
             )
 
+        def json_to_yaml(json_data):
+            """
+            Include given file in raw form directly into the generated content.
+            This may be usefull for example for including JavaScript files
+            directly into the HTML page.
+            """
+            return yaml.dump(
+                yaml.load(
+                    json_data
+                ),
+                default_flow_style=False
+            )
+
         return dict(
             get_endpoints_dict    = get_endpoints_dict,
             get_endpoint_class    = get_endpoint_class,
@@ -458,7 +472,8 @@ def _setup_app_core(app):
 
             current_datetime_utc = datetime.datetime.utcnow(),
 
-            include_raw = include_raw
+            include_raw  = include_raw,
+            json_to_yaml = json_to_yaml
         )
 
     class HawatJSONEncoder(flask.json.JSONEncoder):
diff --git a/lib/hawat/blueprints/events/templates/events/show.html b/lib/hawat/blueprints/events/templates/events/show.html
index 841158285..6d7451eac 100644
--- a/lib/hawat/blueprints/events/templates/events/show.html
+++ b/lib/hawat/blueprints/events/templates/events/show.html
@@ -46,6 +46,11 @@
                                 <strong>{{ gettext('Properties') }}</strong>
                             </a>
                         </li>
+                        <li role="presentation">
+                            <a href="#tab-event-data-yaml" aria-controls="tab-event-data-yaml" role="tab" data-toggle="tab">
+                                <strong>{{ gettext('YAML data') }}</strong>
+                            </a>
+                        </li>
                         <li role="presentation">
                             <a href="#tab-event-data-json" aria-controls="tab-event-data-json" role="tab" data-toggle="tab">
                                 <strong>{{ gettext('JSON data') }}</strong>
@@ -320,6 +325,13 @@
                             {%- endif %}
                         </div>
 
+                        <div role="tabpanel" class="tab-pane fade" id="tab-event-data-yaml">
+                            <br>
+<pre>
+{{ json_to_yaml(item.to_json(indent = 4, sort_keys = True)) }}
+</pre>
+                        </div>
+
                         <div role="tabpanel" class="tab-pane fade" id="tab-event-data-json">
                             <br>
 <pre>
-- 
GitLab