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

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

Issue 14856006: Docserver: achieve online vs offline (cron vs instance) behaviour at the object (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 7 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 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from fnmatch import fnmatch 5 from fnmatch import fnmatch
6 import logging 6 import logging
7 import mimetypes 7 import mimetypes
8 import traceback 8 import traceback
9 import os 9 import os
10 10
(...skipping 13 matching lines...) Expand all
24 from local_file_system import LocalFileSystem 24 from local_file_system import LocalFileSystem
25 from object_store_creator import ObjectStoreCreator 25 from object_store_creator import ObjectStoreCreator
26 from offline_file_system import OfflineFileSystem 26 from offline_file_system import OfflineFileSystem
27 from path_canonicalizer import PathCanonicalizer 27 from path_canonicalizer import PathCanonicalizer
28 from reference_resolver import ReferenceResolver 28 from reference_resolver import ReferenceResolver
29 from samples_data_source import SamplesDataSource 29 from samples_data_source import SamplesDataSource
30 from sidenav_data_source import SidenavDataSource 30 from sidenav_data_source import SidenavDataSource
31 from subversion_file_system import SubversionFileSystem 31 from subversion_file_system import SubversionFileSystem
32 import svn_constants 32 import svn_constants
33 from template_data_source import TemplateDataSource 33 from template_data_source import TemplateDataSource
34 from third_party.json_schema_compiler.memoize import memoize
35 from third_party.json_schema_compiler.model import UnixName 34 from third_party.json_schema_compiler.model import UnixName
36 import url_constants 35 import url_constants
37 36
38 def _IsSamplesDisabled(): 37 def _IsSamplesDisabled():
39 return IsDevServer() 38 return IsDevServer()
40 39
40 def _CreateBranchUtility(start_configuration):
41 return BranchUtility(
42 url_constants.OMAHA_PROXY_URL,
43 AppEngineUrlFetcher(),
44 ObjectStoreCreator.SharedFactory(GetAppVersion(),
45 start_configuration))
46
47 def _CreateGithubFileSystem(start_configuration):
48 # Slight hack: creating a github file system is pointless if samples are
49 # disabled, since it's only used for apps samples.
50 if _IsSamplesDisabled():
51 return EmptyDirFileSystem()
52 return GithubFileSystem(
53 AppEngineUrlFetcher(url_constants.GITHUB_URL),
54 AppEngineBlobstore(),
55 ObjectStoreCreator.SharedFactory(GetAppVersion(),
56 start_configuration))
57
41 class ServerInstance(object): 58 class ServerInstance(object):
42 # Lazily create so we don't create github file systems unnecessarily in
43 # tests.
44 branch_utility = None
45 github_file_system = None
46
47 @staticmethod 59 @staticmethod
48 @memoize 60 def CreateOffline(channel,
49 def GetOrCreateOffline(channel): 61 host_file_system_type=SubversionFileSystem,
50 '''Gets/creates a local ServerInstance, meaning that only resources local to 62 app_samples_file_system=None):
63 '''Creates a local ServerInstance, meaning that only resources local to
51 the server - memcache, object store, etc, are queried. This amounts to not 64 the server - memcache, object store, etc, are queried. This amounts to not
52 setting up the subversion nor github file systems. 65 setting up the subversion nor github file systems.
53 ''' 66 '''
54 branch_utility = ServerInstance._GetOrCreateBranchUtility() 67 start_configuration = ObjectStoreCreator.START_POPULATED
68
69 branch_utility = _CreateBranchUtility(start_configuration)
55 branch = branch_utility.GetBranchNumberForChannelName(channel) 70 branch = branch_utility.GetBranchNumberForChannelName(channel)
56 object_store_creator_factory = ObjectStoreCreator.Factory(GetAppVersion(), 71 object_store_creator_factory = ObjectStoreCreator.Factory(
57 branch) 72 GetAppVersion(),
73 branch,
74 start_configuration)
75
76 if app_samples_file_system is None:
77 app_samples_file_system = _CreateGithubFileSystem(start_configuration)
78
58 # No svn nor github file systems. Rely on the crons to fill the caches, and 79 # No svn nor github file systems. Rely on the crons to fill the caches, and
59 # for the caches to exist. 80 # for the caches to exist.
60 return ServerInstance( 81 return ServerInstance(
61 channel, 82 channel,
62 object_store_creator_factory, 83 object_store_creator_factory,
63 CachingFileSystem(OfflineFileSystem(SubversionFileSystem), 84 CachingFileSystem(OfflineFileSystem(host_file_system_type),
64 object_store_creator_factory, 85 object_store_creator_factory),
65 use_existing_values=True), 86 app_samples_file_system)
66 # TODO(kalman): convert GithubFileSystem to be wrappable in a
67 # CachingFileSystem so that it can be replaced with an
68 # OfflineFileSystem. Currently GFS doesn't set the child versions of
69 # stat requests so it doesn't.
70 ServerInstance._GetOrCreateGithubFileSystem())
71 87
72 @staticmethod 88 @staticmethod
73 def CreateOnline(channel): 89 def CreateOnline(channel,
90 host_file_system=None,
91 app_samples_file_system=None):
74 '''Creates/creates an online server instance, meaning that both local and 92 '''Creates/creates an online server instance, meaning that both local and
75 subversion/github resources are queried. 93 subversion/github resources are queried.
76 ''' 94 '''
77 branch_utility = ServerInstance._GetOrCreateBranchUtility() 95 start_configuration = ObjectStoreCreator.START_EMPTY
96
97 branch_utility = _CreateBranchUtility(start_configuration)
78 branch = branch_utility.GetBranchNumberForChannelName(channel) 98 branch = branch_utility.GetBranchNumberForChannelName(channel)
79 99
80 if branch == 'trunk': 100 if branch == 'trunk':
81 svn_url = '/'.join((url_constants.SVN_TRUNK_URL, 101 svn_url = '/'.join((url_constants.SVN_TRUNK_URL,
82 'src', 102 'src',
83 svn_constants.EXTENSIONS_PATH)) 103 svn_constants.EXTENSIONS_PATH))
84 else: 104 else:
85 svn_url = '/'.join((url_constants.SVN_BRANCH_URL, 105 svn_url = '/'.join((url_constants.SVN_BRANCH_URL,
86 branch, 106 branch,
87 'src', 107 'src',
88 svn_constants.EXTENSIONS_PATH)) 108 svn_constants.EXTENSIONS_PATH))
89 109
90 viewvc_url = svn_url.replace(url_constants.SVN_URL, 110 viewvc_url = svn_url.replace(url_constants.SVN_URL,
91 url_constants.VIEWVC_URL) 111 url_constants.VIEWVC_URL)
92 112
93 object_store_creator_factory = ObjectStoreCreator.Factory(GetAppVersion(), 113 object_store_creator_factory = ObjectStoreCreator.Factory(
94 branch) 114 GetAppVersion(),
115 branch,
116 start_configuration)
95 117
96 svn_file_system = CachingFileSystem( 118 if host_file_system is None:
97 SubversionFileSystem(AppEngineUrlFetcher(svn_url), 119 host_file_system = SubversionFileSystem(AppEngineUrlFetcher(svn_url),
98 AppEngineUrlFetcher(viewvc_url)), 120 AppEngineUrlFetcher(viewvc_url))
99 object_store_creator_factory) 121 cached_host_file_system = CachingFileSystem(host_file_system,
122 object_store_creator_factory)
123
124 if app_samples_file_system is None:
125 app_samples_file_system = _CreateGithubFileSystem(start_configuration)
100 126
101 return ServerInstance(channel, 127 return ServerInstance(channel,
102 object_store_creator_factory, 128 object_store_creator_factory,
103 svn_file_system, 129 cached_host_file_system,
104 ServerInstance._GetOrCreateGithubFileSystem()) 130 app_samples_file_system)
105 131
106 @staticmethod 132 @staticmethod
107 def CreateForTest(file_system): 133 def CreateForTest(host_file_system):
108 return ServerInstance('test', 134 return ServerInstance('test',
109 ObjectStoreCreator.TestFactory(), 135 ObjectStoreCreator.TestFactory(),
110 file_system, 136 host_file_system,
111 None) 137 EmptyDirFileSystem())
112
113 @staticmethod
114 def _GetOrCreateBranchUtility():
115 if ServerInstance.branch_utility is None:
116 ServerInstance.branch_utility = BranchUtility(
117 url_constants.OMAHA_PROXY_URL,
118 AppEngineUrlFetcher())
119 return ServerInstance.branch_utility
120
121 @staticmethod
122 def _GetOrCreateGithubFileSystem():
123 # Initialising github is pointless if samples are disabled, since it's only
124 # used for apps samples.
125 if ServerInstance.github_file_system is None:
126 if _IsSamplesDisabled():
127 ServerInstance.github_file_system = EmptyDirFileSystem()
128 else:
129 ServerInstance.github_file_system = GithubFileSystem(
130 AppEngineUrlFetcher(url_constants.GITHUB_URL),
131 AppEngineBlobstore())
132 return ServerInstance.github_file_system
133 138
134 def __init__(self, 139 def __init__(self,
135 channel, 140 channel,
136 object_store_creator_factory, 141 object_store_creator_factory,
137 svn_file_system, 142 host_file_system,
138 github_file_system): 143 app_samples_file_system):
139 self.svn_file_system = svn_file_system 144 self.host_file_system = host_file_system
140 145
141 self.github_file_system = github_file_system 146 self.app_samples_file_system = app_samples_file_system
142 147
143 self.compiled_fs_factory = CompiledFileSystem.Factory( 148 self.compiled_fs_factory = CompiledFileSystem.Factory(
144 svn_file_system, 149 host_file_system,
145 object_store_creator_factory) 150 object_store_creator_factory)
146 151
147 self.api_list_data_source_factory = APIListDataSource.Factory( 152 self.api_list_data_source_factory = APIListDataSource.Factory(
148 self.compiled_fs_factory, 153 self.compiled_fs_factory,
149 svn_constants.API_PATH, 154 svn_constants.API_PATH,
150 svn_constants.PUBLIC_TEMPLATE_PATH) 155 svn_constants.PUBLIC_TEMPLATE_PATH)
151 156
152 self.api_data_source_factory = APIDataSource.Factory( 157 self.api_data_source_factory = APIDataSource.Factory(
153 self.compiled_fs_factory, 158 self.compiled_fs_factory,
154 svn_constants.API_PATH) 159 svn_constants.API_PATH)
155 160
156 self.ref_resolver_factory = ReferenceResolver.Factory( 161 self.ref_resolver_factory = ReferenceResolver.Factory(
157 self.api_data_source_factory, 162 self.api_data_source_factory,
158 self.api_list_data_source_factory, 163 self.api_list_data_source_factory,
159 object_store_creator_factory) 164 object_store_creator_factory)
160 165
161 self.api_data_source_factory.SetReferenceResolverFactory( 166 self.api_data_source_factory.SetReferenceResolverFactory(
162 self.ref_resolver_factory) 167 self.ref_resolver_factory)
163 168
164 # Note: samples are super slow in the dev server because it doesn't support 169 # Note: samples are super slow in the dev server because it doesn't support
165 # async fetch, so disable them. If you actually want to test samples, then 170 # async fetch, so disable them. If you actually want to test samples, then
166 # good luck, and modify _IsSamplesDisabled at the top. 171 # good luck, and modify _IsSamplesDisabled at the top.
167 if _IsSamplesDisabled(): 172 if _IsSamplesDisabled():
168 svn_fs_for_samples = EmptyDirFileSystem() 173 extension_samples_fs = EmptyDirFileSystem()
169 else: 174 else:
170 svn_fs_for_samples = self.svn_file_system 175 extension_samples_fs = self.host_file_system
171 self.samples_data_source_factory = SamplesDataSource.Factory( 176 self.samples_data_source_factory = SamplesDataSource.Factory(
172 channel, 177 channel,
173 svn_fs_for_samples, 178 extension_samples_fs,
174 self.github_file_system, 179 self.app_samples_file_system,
175 self.ref_resolver_factory, 180 self.ref_resolver_factory,
176 object_store_creator_factory, 181 object_store_creator_factory,
177 svn_constants.EXAMPLES_PATH) 182 svn_constants.EXAMPLES_PATH)
178 183
179 self.api_data_source_factory.SetSamplesDataSourceFactory( 184 self.api_data_source_factory.SetSamplesDataSourceFactory(
180 self.samples_data_source_factory) 185 self.samples_data_source_factory)
181 186
182 self.intro_data_source_factory = IntroDataSource.Factory( 187 self.intro_data_source_factory = IntroDataSource.Factory(
183 self.compiled_fs_factory, 188 self.compiled_fs_factory,
184 self.ref_resolver_factory, 189 self.ref_resolver_factory,
(...skipping 17 matching lines...) Expand all
202 207
203 self.example_zipper = ExampleZipper( 208 self.example_zipper = ExampleZipper(
204 self.compiled_fs_factory, 209 self.compiled_fs_factory,
205 svn_constants.DOCS_PATH) 210 svn_constants.DOCS_PATH)
206 211
207 self.path_canonicalizer = PathCanonicalizer( 212 self.path_canonicalizer = PathCanonicalizer(
208 channel, 213 channel,
209 self.compiled_fs_factory) 214 self.compiled_fs_factory)
210 215
211 self.content_cache = self.compiled_fs_factory.CreateIdentity(ServerInstance) 216 self.content_cache = self.compiled_fs_factory.CreateIdentity(ServerInstance)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698