• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
4
5import logging
6
7from appengine_wrappers import webapp2
8from handler import Handler
9from servlet import Request
10
11
12class AppEngineHandler(webapp2.RequestHandler):
13  '''Top-level handler for AppEngine requests. Just converts them into our
14  internal Servlet architecture.
15  '''
16
17  def get(self):
18    profile_mode = self.request.get('profile')
19    if profile_mode:
20      import cProfile, pstats, StringIO
21      pr = cProfile.Profile()
22      pr.enable()
23
24    try:
25      response = None
26      request = Request(self.request.path,
27                        self.request.url[:-len(self.request.path)],
28                        self.request.headers)
29      response = Handler(request).Get()
30    except Exception as e:
31      logging.exception(e)
32    finally:
33      if profile_mode:
34        pr.disable()
35        s = StringIO.StringIO()
36        pstats.Stats(pr, stream=s).sort_stats(profile_mode).print_stats()
37        self.response.out.write(s.getvalue())
38        self.response.headers['Content-Type'] = 'text/plain'
39        self.response.status = 200
40      elif response:
41        self.response.out.write(response.content.ToString())
42        self.response.headers.update(response.headers)
43        self.response.status = response.status
44      else:
45        self.response.out.write('Internal server error')
46        self.response.status = 500
47