Milimetric has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/72961


Change subject: standard json response helpers
......................................................................

standard json response helpers

Change-Id: Ie1b5020802cab91714af9dbcab49aa0bccdce1f5
---
M wikimetrics/controllers/cohorts.py
M wikimetrics/utils.py
2 files changed, 34 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/analytics/wikimetrics 
refs/changes/61/72961/1

diff --git a/wikimetrics/controllers/cohorts.py 
b/wikimetrics/controllers/cohorts.py
index 21eede3..8eced4a 100644
--- a/wikimetrics/controllers/cohorts.py
+++ b/wikimetrics/controllers/cohorts.py
@@ -3,7 +3,7 @@
 from flask.ext.login import current_user
 from sqlalchemy.sql import exists
 from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
-from ..utils import DateTimeCapableEncoder
+from ..utils import json_response, json_error, json_redirect
 from ..configurables import app, db
 from ..models import (
     Cohort, CohortUser, CohortUserRole,
@@ -47,7 +47,6 @@
         {mediawiki_username: 'Gabriele', mediawiki_userid: 8, project: 
'dewiki'},
     ]}
     """
-    d = db.get_session()
     cohort = None
     if str(name_or_id).isdigit():
         cohort = get_cohort_by_id(int(name_or_id))
@@ -56,7 +55,7 @@
     
     if cohort:
         cohort_with_wikiusers = populate_cohort_wikiusers(cohort)
-        return json.dumps(cohort_with_wikiusers, cls=DateTimeCapableEncoder)
+        return json_response(cohort_with_wikiusers)
     
     return '{}', 404
 
@@ -264,8 +263,8 @@
     # NOTE: Not needed right? username = username.encode('utf-8')
     db_session = db.get_mw_session(project)
     try:
-        return db_session.query(MediaWikiUser)\
-            .filter(MediaWikiUser.user_name == username)\
+        return db_session.query(MediawikiUser)\
+            .filter(MediawikiUser.user_name == username)\
             .one()
     except:
         return None
@@ -274,8 +273,8 @@
 def get_wikiuser_by_id(id, project):
     db_session = db.get_mw_session(project)
     try:
-        return db_session.query(MediaWikiUser)\
-            .filter(MediaWikiUser.user_id == id)\
+        return db_session.query(MediawikiUser)\
+            .filter(MediawikiUser.user_id == id)\
             .one()
     except:
         return None
diff --git a/wikimetrics/utils.py b/wikimetrics/utils.py
index 8596d4b..17b2dbf 100644
--- a/wikimetrics/utils.py
+++ b/wikimetrics/utils.py
@@ -1,6 +1,34 @@
 import json
 import datetime
 from time import mktime
+from flask import Response
+
+
+def json_response(*args, **kwargs):
+    """
+    Handles returning generic arguments as json in a Flask application.
+    Takes care of the following custom encoding duties:
+        * datetime.datetime objects encoded via DateTimeCapableEncoder
+    """
+    data = json.dumps(dict(*args, **kwargs), cls=DateTimeCapableEncoder)
+    return Response(data, mimetype='application/json')
+
+
+def json_error(message):
+    """
+    Standard json error response for when the ajax caller would rather
+    have a message with a status 200 than a server error.
+    """
+    return json_response(isError=True, message=message)
+
+
+def json_redirect(url):
+    """
+    Standard json redirect response, for when a client-side redirect
+    is needed.
+    """
+    return json_response(isRedirect=True, redirectTo=url)
+
 
 class DateTimeCapableEncoder(json.JSONEncoder):
     """
@@ -16,4 +44,3 @@
             return int(mktime(obj.timetuple()))
 
         return json.JSONEncoder.default(self, obj)
-

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie1b5020802cab91714af9dbcab49aa0bccdce1f5
Gerrit-PatchSet: 1
Gerrit-Project: analytics/wikimetrics
Gerrit-Branch: master
Gerrit-Owner: Milimetric <dandree...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to