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

Side by Side Diff: chrome/common/extensions/docs/server2/echo_handler.py

Issue 10825067: Extensions Docs Server: Apps samples page (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 import logging 6 import logging
7 import os 7 import os
8 import sys 8 import sys
9 9
10 # Add the original server location to sys.path so we are able to import 10 # Add the original server location to sys.path so we are able to import
11 # modules from there. 11 # modules from there.
12 SERVER_PATH = 'chrome/common/extensions/docs/server2' 12 SERVER_PATH = 'chrome/common/extensions/docs/server2'
13 if os.path.abspath(SERVER_PATH) not in sys.path: 13 if os.path.abspath(SERVER_PATH) not in sys.path:
14 sys.path.append(os.path.abspath(SERVER_PATH)) 14 sys.path.append(os.path.abspath(SERVER_PATH))
15 15
16 from google.appengine.ext import webapp 16 from google.appengine.ext import webapp
17 from google.appengine.api import memcache 17 from google.appengine.api import memcache
18 from google.appengine.ext.webapp.util import run_wsgi_app 18 from google.appengine.ext.webapp.util import run_wsgi_app
19 19
20 from api_data_source import APIDataSource 20 from api_data_source import APIDataSource
21 from api_list_data_source import APIListDataSource 21 from api_list_data_source import APIListDataSource
22 from appengine_memcache import AppEngineMemcache 22 from appengine_memcache import AppEngineMemcache
23 from appengine_url_fetcher import AppEngineUrlFetcher
23 from branch_utility import BranchUtility 24 from branch_utility import BranchUtility
24 from example_zipper import ExampleZipper 25 from example_zipper import ExampleZipper
25 from file_system_cache import FileSystemCache 26 from file_system_cache import FileSystemCache
26 from intro_data_source import IntroDataSource 27 from intro_data_source import IntroDataSource
27 from local_file_system import LocalFileSystem 28 from local_file_system import LocalFileSystem
28 from memcache_file_system import MemcacheFileSystem 29 from memcache_file_system import MemcacheFileSystem
30 from memcache_url_fetcher import MemcacheUrlFetcher
29 from samples_data_source import SamplesDataSource 31 from samples_data_source import SamplesDataSource
30 from server_instance import ServerInstance 32 from server_instance import ServerInstance
31 from subversion_file_system import SubversionFileSystem 33 from subversion_file_system import SubversionFileSystem
32 from template_data_source import TemplateDataSource 34 from template_data_source import TemplateDataSource
33 from appengine_url_fetcher import AppEngineUrlFetcher 35 from zip_file_system import ZipFileSystem
34 36
35 SVN_URL = 'http://src.chromium.org/chrome' 37 SVN_URL = 'http://src.chromium.org/chrome'
36 TRUNK_URL = SVN_URL + '/trunk' 38 TRUNK_URL = SVN_URL + '/trunk'
37 BRANCH_URL = SVN_URL + '/branches' 39 BRANCH_URL = SVN_URL + '/branches'
38 40
39 EXTENSIONS_PATH = 'chrome/common/extensions' 41 EXTENSIONS_PATH = 'chrome/common/extensions'
40 DOCS_PATH = 'docs' 42 DOCS_PATH = 'docs'
41 API_PATH = 'api' 43 API_PATH = 'api'
42 INTRO_PATH = DOCS_PATH + '/server2/templates/intros' 44 INTRO_PATH = DOCS_PATH + '/server2/templates/intros'
43 ARTICLE_PATH = DOCS_PATH + '/server2/templates/articles' 45 ARTICLE_PATH = DOCS_PATH + '/server2/templates/articles'
44 PUBLIC_TEMPLATE_PATH = DOCS_PATH + '/server2/templates/public' 46 PUBLIC_TEMPLATE_PATH = DOCS_PATH + '/server2/templates/public'
45 PRIVATE_TEMPLATE_PATH = DOCS_PATH + '/server2/templates/private' 47 PRIVATE_TEMPLATE_PATH = DOCS_PATH + '/server2/templates/private'
46 EXAMPLES_PATH = DOCS_PATH + '/examples' 48 EXAMPLES_PATH = DOCS_PATH + '/examples'
47 FULL_EXAMPLES_PATH = DOCS_PATH + '/' + EXAMPLES_PATH 49 FULL_EXAMPLES_PATH = DOCS_PATH + '/' + EXAMPLES_PATH
48 50
51 GITHUB_URL = 'https://api.github.com/repos/GoogleChrome/chrome-app-samples'
52
49 # The branch that the server will default to when no branch is specified in the 53 # The branch that the server will default to when no branch is specified in the
50 # URL. This is necessary because it is not possible to pass flags to the script 54 # URL. This is necessary because it is not possible to pass flags to the script
51 # handler. 55 # handler.
52 DEFAULT_BRANCH = 'local' 56 DEFAULT_BRANCH = 'local'
53 57
54 # Global cache of instances because Handler is recreated for every request. 58 # Global cache of instances because Handler is recreated for every request.
55 SERVER_INSTANCES = {} 59 SERVER_INSTANCES = {}
56 60
57 OMAHA_PROXY_URL = 'http://omahaproxy.appspot.com/json' 61 OMAHA_PROXY_URL = 'http://omahaproxy.appspot.com/json'
58 BRANCH_UTILITY = BranchUtility(OMAHA_PROXY_URL, 62 BRANCH_UTILITY = BranchUtility(OMAHA_PROXY_URL,
59 DEFAULT_BRANCH, 63 DEFAULT_BRANCH,
60 AppEngineUrlFetcher(''), 64 AppEngineUrlFetcher(''),
61 AppEngineMemcache('branch_utility', memcache)) 65 AppEngineMemcache('branch_utility', memcache))
62 66
63 def _GetURLFromBranch(branch): 67 def _GetURLFromBranch(branch):
64 if branch == 'trunk': 68 if branch == 'trunk':
65 return TRUNK_URL + '/src' 69 return TRUNK_URL + '/src'
66 return BRANCH_URL + '/' + branch + '/src' 70 return BRANCH_URL + '/' + branch + '/src'
67 71
68 class Handler(webapp.RequestHandler): 72 class Handler(webapp.RequestHandler):
69 def _GetInstanceForBranch(self, branch): 73 def _GetInstanceForBranch(self, branch):
70 if branch in SERVER_INSTANCES: 74 if branch in SERVER_INSTANCES:
71 return SERVER_INSTANCES[branch] 75 return SERVER_INSTANCES[branch]
76 appengine_memcache = AppEngineMemcache(branch, memcache)
72 if branch == 'local': 77 if branch == 'local':
73 file_system = LocalFileSystem(EXTENSIONS_PATH) 78 file_system = LocalFileSystem(EXTENSIONS_PATH)
74 else: 79 else:
75 fetcher = AppEngineUrlFetcher( 80 fetcher = AppEngineUrlFetcher(
76 _GetURLFromBranch(branch) + '/' + EXTENSIONS_PATH) 81 _GetURLFromBranch(branch) + '/' + EXTENSIONS_PATH)
77 file_system = MemcacheFileSystem(SubversionFileSystem(fetcher), 82 file_system = MemcacheFileSystem(SubversionFileSystem(fetcher),
78 AppEngineMemcache(branch, memcache)) 83 appengine_memcache)
79 84 zip_file_system = ZipFileSystem(
85 MemcacheUrlFetcher(appengine_memcache, GITHUB_URL))
86 zip_cache_builder = FileSystemCache.Builder(zip_file_system)
80 cache_builder = FileSystemCache.Builder(file_system) 87 cache_builder = FileSystemCache.Builder(file_system)
81 api_data_source = APIDataSource(cache_builder, API_PATH) 88 api_data_source = APIDataSource(cache_builder, API_PATH)
82 api_list_data_source = APIListDataSource(cache_builder, 89 api_list_data_source = APIListDataSource(cache_builder,
83 file_system, 90 file_system,
84 API_PATH, 91 API_PATH,
85 PUBLIC_TEMPLATE_PATH) 92 PUBLIC_TEMPLATE_PATH)
86 intro_data_source = IntroDataSource(cache_builder, 93 intro_data_source = IntroDataSource(cache_builder,
87 [INTRO_PATH, ARTICLE_PATH]) 94 [INTRO_PATH, ARTICLE_PATH])
88 samples_data_source_factory = SamplesDataSource.Factory(branch, 95 samples_data_source_factory = SamplesDataSource.Factory(branch,
89 file_system, 96 file_system,
97 zip_file_system,
90 cache_builder, 98 cache_builder,
99 zip_cache_builder,
91 EXAMPLES_PATH) 100 EXAMPLES_PATH)
92 template_data_source_factory = TemplateDataSource.Factory( 101 template_data_source_factory = TemplateDataSource.Factory(
93 branch, 102 branch,
94 api_data_source, 103 api_data_source,
95 api_list_data_source, 104 api_list_data_source,
96 intro_data_source, 105 intro_data_source,
97 samples_data_source_factory, 106 samples_data_source_factory,
98 cache_builder, 107 cache_builder,
99 PUBLIC_TEMPLATE_PATH, 108 PUBLIC_TEMPLATE_PATH,
100 PRIVATE_TEMPLATE_PATH) 109 PRIVATE_TEMPLATE_PATH)
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 # TODO: This leaks Server instances when branch bumps. 141 # TODO: This leaks Server instances when branch bumps.
133 self._GetInstanceForBranch(branch).Get(real_path, 142 self._GetInstanceForBranch(branch).Get(real_path,
134 self.request, 143 self.request,
135 self.response) 144 self.response)
136 145
137 def main(): 146 def main():
138 run_wsgi_app(webapp.WSGIApplication([('/.*', Handler)], debug=False)) 147 run_wsgi_app(webapp.WSGIApplication([('/.*', Handler)], debug=False))
139 148
140 if __name__ == '__main__': 149 if __name__ == '__main__':
141 main() 150 main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698