[AndroidWebViewShell] Add MediaStream API layout tests.
[chromium-blink-merge.git] / tools / deep_memory_profiler / visualizer / app.py
blobcaebd6f5d0fb7869e36885a98c3df45f8e6757c8
1 # Copyright 2013 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.
5 # This file is expected to be used under another directory to use,
6 # so we disable checking import path of GAE tools from this directory.
7 # pylint: disable=F0401,E0611,W0232
9 import jinja2
10 import json
11 import os
12 import re
13 import urllib
14 import webapp2
16 from google.appengine.ext import blobstore
17 from google.appengine.ext.webapp import blobstore_handlers
19 import services
22 JINJA_ENVIRONMENT = jinja2.Environment(
23 loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
24 extensions=['jinja2.ext.autoescape'])
27 class MainPage(webapp2.RequestHandler):
28 """Show breakdown with received profiler-id and template-id. If nothing was
29 received, show blank page waiting user to upload file."""
30 def get(self):
31 page_template = JINJA_ENVIRONMENT.get_template('index.html')
32 upload_url = blobstore.create_upload_url('/upload')
34 # Get profiler id and template id from url query.
35 run_id = self.request.get('run_id')
36 tmpl_id = self.request.get('tmpl_id')
37 upload_msg = self.request.get('upload_msg')
39 template_values = {
40 'upload_url': upload_url,
41 'upload_msg': upload_msg
44 if run_id and tmpl_id:
45 template_values['json'] = services.GetProfiler(run_id)
46 template_values['template'] = services.GetTemplate(tmpl_id)
48 self.response.write(page_template.render(template_values))
51 class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
52 """Handle file uploading with BlobstoreUploadHandler. BlobstoreUploadHandler
53 can deal with files overweighing size limitation within one HTTP connection so
54 that user can upload large json file."""
55 def post(self):
56 blob_info = self.get_uploads('file')[0]
58 run_id = services.CreateProfiler(blob_info)
59 default_key = services.CreateTemplates(blob_info)
61 # TODO(junjianx): Validation of uploaded file should be done separately.
62 if not default_key:
63 # Jump to home page with error message.
64 req_params = {
65 'upload_msg': 'No default_template key was found.'
67 else:
68 # Jump to new graph page using default template.
69 req_params = {
70 'run_id': run_id,
71 'tmpl_id': default_key.urlsafe()
74 self.redirect('/?' + urllib.urlencode(req_params))
77 class ShareHandler(webapp2.RequestHandler):
78 """Handle breakdown template sharing. Generate public url for transferred
79 template and return it back."""
80 def post(self):
81 run_id = self.request.POST['run_id']
82 content = json.loads(self.request.POST['content'])
83 tmpl_key = services.CreateTemplate(content)
85 req_params = {
86 'run_id': run_id,
87 'tmpl_id': tmpl_key.urlsafe()
90 # Take out host url from request by removing share suffix.
91 url = re.sub('share', '', self.request.url)
92 self.response.write(url + '?' + urllib.urlencode(req_params))
95 application = webapp2.WSGIApplication([
96 ('/', MainPage),
97 ('/upload', UploadHandler),
98 ('/share', ShareHandler)
99 ], debug=True)