blob: 8d6ebad51d14f4c609dcaaffd6640f3191b97465 [file] [log] [blame]
# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
from appengine_wrappers import webapp2
from handler import Handler
from servlet import Request
class AppEngineHandler(webapp2.RequestHandler):
'''Top-level handler for AppEngine requests. Just converts them into our
internal Servlet architecture.
'''
def get(self):
profile_mode = self.request.get('profile')
if profile_mode:
import cProfile, pstats, StringIO
pr = cProfile.Profile()
pr.enable()
try:
response = None
request = Request(self.request.path,
self.request.url[:-len(self.request.path)],
self.request.headers)
response = Handler(request).Get()
except Exception as e:
logging.exception(e)
finally:
if profile_mode:
pr.disable()
s = StringIO.StringIO()
pstats.Stats(pr, stream=s).sort_stats(profile_mode).print_stats()
self.response.out.write(s.getvalue())
self.response.headers['Content-Type'] = 'text/plain'
self.response.status = 200
elif response:
self.response.out.write(response.content.ToString())
self.response.headers.update(response.headers)
self.response.status = response.status
else:
self.response.out.write('Internal server error')
self.response.status = 500