Index: chrome/common/extensions/docs/server2/handler.py |
diff --git a/chrome/common/extensions/docs/server2/handler.py b/chrome/common/extensions/docs/server2/handler.py |
index 53c40c40c0de5a6b78504e1ad7fa5e381f888530..4d289b43cf1aeaaeda0cde1bb6fc8e01676bf708 100644 |
--- a/chrome/common/extensions/docs/server2/handler.py |
+++ b/chrome/common/extensions/docs/server2/handler.py |
@@ -2,66 +2,28 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-from appengine_wrappers import webapp |
+from branch_utility import BranchUtility |
from cron_servlet import CronServlet |
-from render_servlet import RenderServlet |
-from servlet import Request |
+from instance_servlet import InstanceServlet |
+from servlet import Servlet, Request, Response |
_SERVLETS = { |
'cron': CronServlet, |
} |
+_DEFAULT_SERVLET = InstanceServlet.GetConstructor() |
-class Handler(webapp.RequestHandler): |
- def __init__(self, request, response): |
- super(Handler, self).__init__(request, response) |
- |
- def _RedirectSpecialCases(self, path): |
- if not path or path == 'index.html': |
- self.redirect('http://developer.google.com/chrome') |
- return True |
- |
- if path == 'apps.html': |
- self.redirect('/apps/about_apps.html') |
- return True |
- |
- return False |
- |
- def _RedirectFromCodeDotGoogleDotCom(self, path): |
- if (not self.request.url.startswith(('http://code.google.com', |
- 'https://code.google.com'))): |
- return False |
- |
- new_url = 'http://developer.chrome.com/' |
- |
- # switch to https if necessary |
- if (self.request.url.startswith('https')): |
- new_url = new_url.replace('http', 'https', 1) |
- |
- path = path.split('/') |
- if len(path) > 0 and path[0] == 'chrome': |
- path.pop(0) |
- for channel in BranchUtility.GetAllBranchNames(): |
- if channel in path: |
- position = path.index(channel) |
- path.pop(position) |
- path.insert(0, channel) |
- new_url += '/'.join(path) |
- self.redirect(new_url) |
- return True |
- |
- def get(self): |
- path, request, response = (self.request.path.lstrip('/'), |
- self.request, |
- self.response) |
+class Handler(Servlet): |
+ def Get(self): |
+ path = self._request.path |
if path in ['favicon.ico', 'robots.txt']: |
- response.set_status(404) |
- return |
+ return Response.NotFound('') |
- if self._RedirectSpecialCases(path): |
- return |
- if self._RedirectFromCodeDotGoogleDotCom(path): |
- return |
+ redirect = self._RedirectSpecialCases() |
+ if redirect is None: |
+ redirect = self._RedirectFromCodeDotGoogleDotCom() |
+ if redirect is not None: |
+ return redirect |
if path.startswith('_'): |
servlet_path = path[1:] |
@@ -70,15 +32,41 @@ class Handler(webapp.RequestHandler): |
servlet_name, servlet_path = servlet_path.split('/', 1) |
servlet = _SERVLETS.get(servlet_name) |
if servlet is None: |
- response.out.write('"%s" servlet not found' % servlet_path) |
- response.set_status(404) |
- return |
+ return Response.NotFound('"%s" servlet not found' % servlet_path) |
else: |
servlet_path = path |
- servlet = RenderServlet |
+ servlet = _DEFAULT_SERVLET |
+ |
+ return servlet(Request(servlet_path, |
+ self._request.host, |
+ self._request.headers)).Get() |
- servlet_response = servlet(Request(servlet_path, request.headers)).Get() |
+ def _RedirectSpecialCases(self): |
+ path = self._request.path |
+ if not path or path == 'index.html': |
+ return Response.Redirect('http://developer.google.com/chrome') |
+ if path == 'apps.html': |
+ return Response.Redirect('/apps/about_apps.html') |
+ return None |
- response.out.write(servlet_response.content.ToString()) |
- response.headers.update(servlet_response.headers) |
- response.status = servlet_response.status |
+ def _RedirectFromCodeDotGoogleDotCom(self): |
+ host, path = (self._request.host, self._request.path) |
+ |
+ if not host in ('http://code.google.com', 'https://code.google.com'): |
+ return None |
+ |
+ new_host = 'http://developer.chrome.com' |
+ |
+ # switch to https if necessary |
+ if host.startswith('https'): |
+ new_host = new_host.replace('http', 'https', 1) |
+ |
+ new_path = path.split('/') |
+ if len(new_path) > 0 and new_path[0] == 'chrome': |
+ new_path.pop(0) |
+ for channel in BranchUtility.GetAllChannelNames(): |
+ if channel in new_path: |
+ position = new_path.index(channel) |
+ new_path.pop(position) |
+ new_path.insert(0, channel) |
+ return Response.Redirect('/'.join([new_host] + new_path)) |