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

Change subject: Add meta info for run, rev and query
......................................................................


Add meta info for run, rev and query

Change-Id: I7631a3fa78c3f8a219a0ce5c6f3da866fcbe0000
---
M quarry/web/app.py
M quarry/web/models/query.py
M quarry/web/models/queryrevision.py
M quarry/web/models/queryrun.py
M quarry/web/utils/__init__.py
5 files changed, 92 insertions(+), 0 deletions(-)

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



diff --git a/quarry/web/app.py b/quarry/web/app.py
index 862f09c..4152b49 100644
--- a/quarry/web/app.py
+++ b/quarry/web/app.py
@@ -6,6 +6,7 @@
 from models.queryrun import QueryRun
 from models.star import Star
 from results import SQLiteResultReader
+from utils import json_formatter
 # This just provides the translit/long codec, unused otherwise
 import translitcodec  # NOQA
 import re
@@ -368,6 +369,48 @@
     return response
 
 
[email protected]("/run/<int:qrun_id>/meta")
+def output_run_meta(qrun_id):
+    qrun = g.conn.session.query(QueryRun).get(qrun_id)
+
+    return Response(json.dumps(
+        {
+            'run': qrun,
+            'rev': qrun.rev,
+            'query': qrun.rev.query
+        }, default=json_formatter),
+        mimetype='application/json',
+    )
+
+
[email protected]("/rev/<int:rev_id>/meta")
+def output_rev_meta(rev_id):
+    rev = g.conn.session.query(QueryRevision).get(rev_id)
+
+    return Response(json.dumps(
+        {
+            'latest_run': rev.latest_run,
+            'rev': rev,
+            'query': rev.query
+        }, default=json_formatter),
+        mimetype='application/json',
+    )
+
+
[email protected]("/query/<int:query_id>/meta")
+def output_query_meta(query_id):
+    query = g.conn.session.query(Query).get(query_id)
+
+    return Response(json.dumps(
+        {
+            'latest_run': query.latest_rev.latest_run,
+            'latest_rev': query.latest_rev,
+            'query': query
+        }, default=json_formatter),
+        mimetype='application/json',
+    )
+
+
 @app.template_filter()
 def timesince(dt, default="just now"):
     """
diff --git a/quarry/web/models/query.py b/quarry/web/models/query.py
index d2ab9e9..4445fd6 100644
--- a/quarry/web/models/query.py
+++ b/quarry/web/models/query.py
@@ -24,3 +24,15 @@
     latest_rev = relationship('QueryRevision',
                               primaryjoin='Query.latest_rev_id == 
QueryRevision.id',
                               uselist=False)
+
+    def to_json(self):
+        return {
+            'id': self.id,
+            'author': self.user.username,
+            'title': self.title,
+            'timestamp': self.last_touched,
+            'parent': self.parent_id,
+            'latest_revision': self.latest_rev.id,
+            'published': bool(self.published),
+            'description': self.description,
+        }
diff --git a/quarry/web/models/queryrevision.py 
b/quarry/web/models/queryrevision.py
index 80f3f8d..79afd3c 100644
--- a/quarry/web/models/queryrevision.py
+++ b/quarry/web/models/queryrevision.py
@@ -30,3 +30,11 @@
             # restrict access to this from mysql
             return ("Hitting information_schema", "Unauthorized access to 
restricted database")
         return True
+
+    def to_json(self):
+        return {
+            'id': self.id,
+            'sql': self.text,
+            'timestamp': self.timestamp,
+            'latest_run': self.latest_run.id,
+        }
diff --git a/quarry/web/models/queryrun.py b/quarry/web/models/queryrun.py
index 8990d20..02abd0e 100644
--- a/quarry/web/models/queryrun.py
+++ b/quarry/web/models/queryrun.py
@@ -49,3 +49,11 @@
             json.dumps(meta),
             self.rev.text
         )
+
+    def to_json(self):
+        return {
+            'id': self.id,
+            'status': self.status_message,
+            'timestamp': self.timestamp,
+            'extra': json.loads(self.extra_info or "{}"),
+        }
diff --git a/quarry/web/utils/__init__.py b/quarry/web/utils/__init__.py
index e69de29..6e6cb46 100644
--- a/quarry/web/utils/__init__.py
+++ b/quarry/web/utils/__init__.py
@@ -0,0 +1,21 @@
+def datetime_json_formatter(dt):
+    try:
+        return dt.isoformat()
+    except AttributeError:
+        raise TypeError
+
+
+def to_json_formatter(dt):
+    try:
+        return dt.to_json()
+    except AttributeError:
+        raise TypeError
+
+
+def json_formatter(dt):
+    for formatter in [datetime_json_formatter, to_json_formatter]:
+        try:
+            return formatter(dt)
+        except TypeError:
+            pass
+    raise TypeError(dt)

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I7631a3fa78c3f8a219a0ce5c6f3da866fcbe0000
Gerrit-PatchSet: 3
Gerrit-Project: analytics/quarry/web
Gerrit-Branch: master
Gerrit-Owner: Merlijn van Deen <[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