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