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