Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3460)

Unified Diff: chrome/common/extensions/docs/server2/echo_handler.py

Issue 10545043: Extensions docs server: Design changes, partial template support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/common/extensions/docs/server2/echo_handler.py
diff --git a/chrome/common/extensions/docs/server2/echo_handler.py b/chrome/common/extensions/docs/server2/echo_handler.py
index 20ae79cfb5e4d6d8adfa6c16009406c72a8fbc9f..adfd5d0d78d957f396188370b2a443b04c249c24 100755
--- a/chrome/common/extensions/docs/server2/echo_handler.py
+++ b/chrome/common/extensions/docs/server2/echo_handler.py
@@ -21,7 +21,7 @@ from google.appengine.ext.webapp.util import run_wsgi_app
from branch_utility import BranchUtility
from local_fetcher import LocalFetcher
from subversion_fetcher import SubversionFetcher
-from template_fetcher import TemplateFetcher
+from template_data_source import TemplateDataSource
from template_utility import TemplateUtility
EXTENSIONS_PATH = 'chrome/common/extensions/'
@@ -30,48 +30,70 @@ STATIC_PATH = DOCS_PATH + 'static/'
PUBLIC_TEMPLATE_PATH = DOCS_PATH + 'template2/public/'
PRIVATE_TEMPLATE_PATH = DOCS_PATH + 'template2/private/'
-class MainPage(webapp.RequestHandler):
- def _FetchResource(self, fetcher, branch, path):
- result = fetcher.FetchResource(branch, path)
- for key in result.headers:
- self.response.headers[key] = result.headers[key]
- return result.content
+# Global cache of instances because the Server is recreated for every request.
+SERVER_INSTANCES = {}
- def get(self):
- path = self.request.path
- path = path.replace('/chrome/extensions/', '')
+class Instance(object):
Aaron Boodman 2012/06/06 23:49:59 Consider moving this into its own class. Easier to
not at google - send to devlin 2012/06/07 04:43:57 Yes please. Might make sense to rename ServerInsta
cduvall 2012/06/08 00:39:23 Done.
+ def __init__(self, data_source, fetcher):
+ self._data_source = data_source
+ self._fetcher = fetcher
+ self._template_util = TemplateUtility()
not at google - send to devlin 2012/06/07 04:43:57 Usually it doesn't make sense to instantiate util
cduvall 2012/06/08 00:39:23 Done.
+
+ def Run(self, path, request_handler):
parts = path.split('/')
filename = parts[-1]
+ template = self._data_source[filename]
+ if template:
+ content = self._template_util.RenderTemplate(template,
+ '{"test": "Hello"}', self._data_source)
+ else:
+ logging.info('Template not found for: ' + filename)
+ try:
+ result = self._fetcher.FetchResource(STATIC_PATH + filename)
+ for key in result.headers:
+ request_handler.response.headers[key] = result.headers[key]
+ content = result.content
+ except:
+ # TODO should be an actual not found page.
+ content = 'File not found.'
+ request_handler.response.out.write(content)
- if len(path) > 0 and path[0] == '/':
- path = path.strip('/')
- branch_util = BranchUtility(urlfetch)
- channel_name = branch_util.GetChannelNameFromPath(path)
- branch = branch_util.GetBranchNumberForChannelName(channel_name)
+class Server(webapp.RequestHandler):
+ def __init__(self):
+ self._branch_util = BranchUtility(urlfetch)
- if channel_name == 'local':
+ def _GetInstanceForBranch(self, branch):
+ if branch in SERVER_INSTANCES:
+ return SERVER_INSTANCES[branch]
+ if branch == 'local':
fetcher = LocalFetcher(EXTENSIONS_PATH)
+ # No cache for local doc server.
+ cache_timeout = 0
else:
- fetcher = SubversionFetcher(EXTENSIONS_PATH, urlfetch)
- template_fetcher = TemplateFetcher(branch, fetcher)
- template_util = TemplateUtility()
+ fetcher = SubversionFetcher(branch, EXTENSIONS_PATH, urlfetch)
+ cache_timeout = 300
not at google - send to devlin 2012/06/07 04:43:57 nit: cache_timeout_seconds
cduvall 2012/06/08 00:39:23 Done.
+ data_source = TemplateDataSource(fetcher,
+ [PUBLIC_TEMPLATE_PATH, PRIVATE_TEMPLATE_PATH], cache_timeout)
not at google - send to devlin 2012/06/07 04:43:57 nit: parameters all on same line, or all on vertic
cduvall 2012/06/08 00:39:23 Done.
+ SERVER_INSTANCES[branch] = Instance(data_source, fetcher)
+ return SERVER_INSTANCES[branch]
- template = template_fetcher[PUBLIC_TEMPLATE_PATH + filename]
- if template:
- content = template_util.RenderTemplate(template, '{"test": "Hello"}')
- else:
- logging.info('Template for %s not found.' % filename)
+ def _HandleRequest(self, path):
+ channel_name = self._branch_util.GetChannelNameFromPath(path)
not at google - send to devlin 2012/06/07 04:43:57 ditto comment about instantiating util classes.
cduvall 2012/06/08 00:39:23 Done.
+ branch = self._branch_util.GetBranchNumberForChannelName(channel_name)
- try:
- content = self._FetchResource(fetcher, branch, STATIC_PATH + filename)
- except:
- content = 'File not found.'
+ instance = self._GetInstanceForBranch(branch)
+ instance.Run(path, self)
not at google - send to devlin 2012/06/07 04:43:57 nit: can inline instance
cduvall 2012/06/08 00:39:23 Done.
- self.response.out.write(content)
+ def get(self):
+ path = self.request.path
+ path = path.replace('/chrome/extensions/', '')
+ if len(path) > 0 and path[0] == '/':
+ path = path.strip('/')
+ self._HandleRequest(path)
application = webapp.WSGIApplication([
- ('/.*', MainPage),
+ ('/.*', Server),
], debug=False)
def main():

Powered by Google App Engine
This is Rietveld 408576698