jenkins-bot has submitted this change and it was merged.

Change subject: Added support for json-lines output format
......................................................................


Added support for json-lines output format

Bug: T98492
Change-Id: If1dd9067e8dd442abbee673d11c4cf46a9a937d8
---
M quarry/web/output.py
M quarry/web/static/templates/compiled.js
M quarry/web/static/templates/query-resultset.html
3 files changed, 35 insertions(+), 10 deletions(-)

Approvals:
  Yuvipanda: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/quarry/web/output.py b/quarry/web/output.py
index 44812e2..eaf5f6c 100644
--- a/quarry/web/output.py
+++ b/quarry/web/output.py
@@ -6,6 +6,8 @@
 def get_formatted_response(format, queryrun, reader, resultset_id):
     if format == 'json':
         return json_formatter(queryrun, reader, resultset_id)
+    elif format == 'json-lines':
+        return json_line_formatter(reader, resultset_id)
     elif format == 'csv':
         return separated_formatter(reader, resultset_id, ',')
     elif format == 'tsv':
@@ -33,6 +35,20 @@
     return Response(respond(), content_type='text/csv')
 
 
+def json_line_formatter(reader, resultset_id):
+    rows = reader.get_rows(resultset_id)
+
+    def respond():
+        headers = None
+        for row in rows:
+            if headers is None:
+                headers = row
+                continue
+            yield json.dumps(dict(zip(headers, row)))
+
+    return Response(respond(), content_type='application/json')
+
+
 def json_formatter(qrun, reader, resultset_id):
     rows = list(reader.get_rows(resultset_id))
     header = rows[0]
diff --git a/quarry/web/static/templates/compiled.js 
b/quarry/web/static/templates/compiled.js
index d927a4a..17e6884 100644
--- a/quarry/web/static/templates/compiled.js
+++ b/quarry/web/static/templates/compiled.js
@@ -10,25 +10,33 @@
 }
 else {
 output += "\n            Resultset ";
-output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_number"), env.autoesc);
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_number"), env.opts.autoescape);
 output += "\n            ";
 ;
 }
 output += "\n            (";
-output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"rowcount"), env.autoesc);
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"rowcount"), env.opts.autoescape);
 output += " rows)\n        </div>\n        <div class='col-md-4'>\n            
<div class=\"btn-group pull-right\">\n                <button type=\"button\" 
class=\"btn btn-info btn-xs dropdown-toggle\" data-toggle=\"dropdown\">\n       
             Download data <span class=\"caret\"></span>\n                
</button>\n                <ul class=\"dropdown-menu\" role=\"menu\">\n         
           <li><a href=\"/run/";
-output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"run_id"), env.autoesc);
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"run_id"), env.opts.autoescape);
 output += "/output/";
-output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_id"), env.autoesc);
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_id"), env.opts.autoescape);
 output += "/tsv?download=true\">TSV</a></li>\n                    <li><a 
href=\"/run/";
-output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"run_id"), env.autoesc);
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"run_id"), env.opts.autoescape);
 output += "/output/";
-output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_id"), env.autoesc);
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_id"), env.opts.autoescape);
 output += "/json?download=true\">JSON</a></li>\n                    <li><a 
href=\"/run/";
-output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"run_id"), env.autoesc);
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"run_id"), env.opts.autoescape);
 output += "/output/";
-output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_id"), env.autoesc);
-output += "/csv?download=true\">CSV</a></li>\n                </ul>\n          
  </div>\n        </div>\n    </div>\n    <table 
class='table'></table>\n</div>\n";
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_id"), env.opts.autoescape);
+output += "/json-lines?download=true\">JSON Lines</a></li>\n                   
 <li><a href=\"/run/";
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"run_id"), env.opts.autoescape);
+output += "/output/";
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_id"), env.opts.autoescape);
+output += "/csv?download=true\">CSV</a></li>\n                    <li><a 
href=\"/run/";
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"run_id"), env.opts.autoescape);
+output += "/output/";
+output += runtime.suppressValue(runtime.contextOrFrameLookup(context, frame, 
"resultset_id"), env.opts.autoescape);
+output += "/csv?download=true&encoding=utf-16\">Excel (UTF-16 CSV)</a></li>\n  
              </ul>\n            </div>\n        </div>\n    </div>\n    <table 
class='table'></table>\n</div>\n";
 cb(null, output);
 ;
 } catch (e) {
@@ -47,7 +55,7 @@
 try {
 if(runtime.contextOrFrameLookup(context, frame, "status") == "failed") {
 output += "\n<strong>Error</strong>\n<pre>";
-output += 
runtime.suppressValue(runtime.memberLookup((runtime.contextOrFrameLookup(context,
 frame, "extra")),"error", env.autoesc), env.autoesc);
+output += 
runtime.suppressValue(runtime.memberLookup((runtime.contextOrFrameLookup(context,
 frame, "extra")),"error", env.opts.autoescape), env.opts.autoescape);
 output += "</pre>\n";
 ;
 }
diff --git a/quarry/web/static/templates/query-resultset.html 
b/quarry/web/static/templates/query-resultset.html
index 57ceb7a..bfbebde 100644
--- a/quarry/web/static/templates/query-resultset.html
+++ b/quarry/web/static/templates/query-resultset.html
@@ -16,6 +16,7 @@
                 <ul class="dropdown-menu" role="menu">
                     <li><a 
href="/run/{{run_id}}/output/{{resultset_id}}/tsv?download=true">TSV</a></li>
                     <li><a 
href="/run/{{run_id}}/output/{{resultset_id}}/json?download=true">JSON</a></li>
+                    <li><a 
href="/run/{{run_id}}/output/{{resultset_id}}/json-lines?download=true">JSON 
Lines</a></li>
                     <li><a 
href="/run/{{run_id}}/output/{{resultset_id}}/csv?download=true">CSV</a></li>
                     <li><a 
href="/run/{{run_id}}/output/{{resultset_id}}/csv?download=true&encoding=utf-16">Excel
 (UTF-16 CSV)</a></li>
                 </ul>

-- 
To view, visit https://gerrit.wikimedia.org/r/222773
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: If1dd9067e8dd442abbee673d11c4cf46a9a937d8
Gerrit-PatchSet: 1
Gerrit-Project: analytics/quarry/web
Gerrit-Branch: master
Gerrit-Owner: Yuvipanda <[email protected]>
Gerrit-Reviewer: Yuvipanda <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to