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
16 from google
.appengine
.ext
import blobstore
17 from google
.appengine
.ext
.webapp
import blobstore_handlers
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."""
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')
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."""
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.
63 # Jump to home page with error message.
65 'upload_msg': 'No default_template key was found.'
68 # Jump to new graph page using default template.
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."""
81 run_id
= self
.request
.POST
['run_id']
82 content
= json
.loads(self
.request
.POST
['content'])
83 tmpl_key
= services
.CreateTemplate(content
)
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([
97 ('/upload', UploadHandler
),
98 ('/share', ShareHandler
)