Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2067)

Unified Diff: Tools/GardeningServer/alerts.py

Issue 664563002: Restructured alerts-history endpoint (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | Tools/GardeningServer/alerts_test.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Tools/GardeningServer/alerts.py
diff --git a/Tools/GardeningServer/alerts.py b/Tools/GardeningServer/alerts.py
index b874cb791a6e467948d447ab2424918a36b3866f..380443ac37ccfa6e19e4adad287b143c006d09e9 100644
--- a/Tools/GardeningServer/alerts.py
+++ b/Tools/GardeningServer/alerts.py
@@ -112,22 +112,24 @@ class AlertsHandler(webapp2.RequestHandler):
class AlertsHistory(webapp2.RequestHandler):
- MAX_LIMIT_PER_PAGE = 5
+ MAX_LIMIT_PER_PAGE = 100
- def get(self):
- alerts_query = AlertsJSON.query().order(-AlertsJSON.date)
- result_json = {}
-
- user = users.get_current_user()
- if not user:
- result_json['redirect-url'] = users.create_login_url(
- self.request.uri)
+ def get_entry(self, query, key):
+ try:
+ key = int(key)
+ except ValueError:
+ self.response.set_status(400, 'Invalid key format')
+ return {}
- # Return only public alerts for non-internal users.
- if not user or not user.email().endswith('@google.com'):
- alerts_query = alerts_query.filter(
- AlertsJSON.type == AlertsHandler.ALERTS_TYPE)
+ ndb_key = ndb.Key(AlertsJSON, key)
+ result = query.filter(AlertsJSON.key == ndb_key).get()
+ if result:
+ return json.loads(result.json)
+ else:
+ self.response.set_status(404, 'Failed to find key %s' % key)
+ return {}
+ def get_list(self, query):
cursor = self.request.get('cursor')
if cursor:
cursor = datastore_query.Cursor(urlsafe=cursor)
@@ -136,16 +138,32 @@ class AlertsHistory(webapp2.RequestHandler):
limit = min(self.MAX_LIMIT_PER_PAGE, limit)
if cursor:
- alerts, next_cursor, has_more = alerts_query.fetch_page(
- limit, start_cursor=cursor)
+ alerts, next_cursor, has_more = query.fetch_page(limit,
+ start_cursor=cursor)
else:
- alerts, next_cursor, has_more = alerts_query.fetch_page(limit)
+ alerts, next_cursor, has_more = query.fetch_page(limit)
- result_json.update({
+ return {
'has_more': has_more,
'cursor': next_cursor.urlsafe() if next_cursor else '',
- 'history': [json.loads(alert.json) for alert in alerts]
- })
+ 'history': [alert.key.integer_id() for alert in alerts]
+ }
+
+ def get(self, key=None):
+ query = AlertsJSON.query().order(-AlertsJSON.date)
+ result_json = {}
+
+ user = users.get_current_user()
+ result_json['login-url'] = users.create_login_url(self.request.uri)
+
+ # Return only public alerts for non-internal users.
+ if not user or not user.email().endswith('@google.com'):
+ query = query.filter(AlertsJSON.type == AlertsHandler.ALERTS_TYPE)
+
+ if key:
+ result_json.update(self.get_entry(query, key))
+ else:
+ result_json.update(self.get_list(query))
self.response.headers['Content-Type'] = 'application/json'
self.response.out.write(json.dumps(result_json))
@@ -153,5 +171,6 @@ class AlertsHistory(webapp2.RequestHandler):
app = webapp2.WSGIApplication([
('/alerts', AlertsHandler),
- ('/alerts-history', AlertsHistory)
+ ('/alerts-history', AlertsHistory),
+ ('/alerts-history/(.*)', AlertsHistory),
])
« no previous file with comments | « no previous file | Tools/GardeningServer/alerts_test.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698