8679c118b65dddf655ceb1c8f5e8c7cc6d3c00a6
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Tools / GardeningServer / alerts.py
1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 import calendar
6 import datetime
7 import json
8 import webapp2
9 import zlib
10
11 from google.appengine.api import memcache
12
13
14 class DateTimeEncoder(json.JSONEncoder):
15     def default(self, obj):
16         if isinstance(obj, datetime.datetime):
17             return calendar.timegm(obj.timetuple())
18         # Let the base class default method raise the TypeError
19         return json.JSONEncoder.default(self, obj)
20
21
22 class AlertsHandler(webapp2.RequestHandler):
23     MEMCACHE_ALERTS_KEY = 'alerts'
24
25     def get(self):
26         self.response.headers.add_header('Access-Control-Allow-Origin', '*')
27         self.response.headers['Content-Type'] = 'application/json'
28         compressed = memcache.get(AlertsHandler.MEMCACHE_ALERTS_KEY)
29         if not compressed:
30             return
31         uncompressed = zlib.decompress(compressed)
32         self.response.write(uncompressed)
33
34     def post(self):
35         try:
36             alerts = json.loads(self.request.get('content'))
37         except ValueError:
38             self.response.set_status(400, 'content field was not JSON')
39             return
40         alerts.update({
41             'date': datetime.datetime.utcnow(),
42             'alerts': alerts['alerts']
43         })
44         uncompressed = json.dumps(alerts, cls=DateTimeEncoder, indent=1)
45         compression_level = 1
46         compressed = zlib.compress(uncompressed, compression_level)
47         memcache.set(AlertsHandler.MEMCACHE_ALERTS_KEY, compressed)
48
49
50 app = webapp2.WSGIApplication([
51     ('/alerts', AlertsHandler)
52 ])