OLD | NEW |
---|---|
1 # Copyright 2013 The Chromium Authors. All rights reserved. | 1 # Copyright 2013 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 import logging | 5 import logging |
6 import time | 6 import time |
7 import traceback | 7 import traceback |
8 | 8 |
9 from app_yaml_helper import AppYamlHelper | 9 from app_yaml_helper import AppYamlHelper |
10 from appengine_wrappers import ( | 10 from appengine_wrappers import ( |
11 GetAppVersion, DeadlineExceededError, IsDevServer, logservice) | 11 GetAppVersion, DeadlineExceededError, IsDevServer, logservice) |
12 from branch_utility import BranchUtility | 12 from branch_utility import BranchUtility |
13 from caching_file_system import CachingFileSystem | 13 from caching_file_system import CachingFileSystem |
14 from compiled_file_system import CompiledFileSystem | 14 from compiled_file_system import CompiledFileSystem |
15 from empty_dir_file_system import EmptyDirFileSystem | 15 from empty_dir_file_system import EmptyDirFileSystem |
16 from github_file_system import GithubFileSystem | 16 from github_file_system import GithubFileSystem |
17 from host_file_system_creator import HostFileSystemCreator | |
17 from object_store_creator import ObjectStoreCreator | 18 from object_store_creator import ObjectStoreCreator |
18 from render_servlet import RenderServlet | 19 from render_servlet import RenderServlet |
19 from server_instance import ServerInstance | 20 from server_instance import ServerInstance |
20 from servlet import Servlet, Request, Response | 21 from servlet import Servlet, Request, Response |
21 from subversion_file_system import SubversionFileSystem | 22 from subversion_file_system import SubversionFileSystem |
22 import svn_constants | 23 import svn_constants |
23 from third_party.json_schema_compiler.memoize import memoize | 24 from third_party.json_schema_compiler.memoize import memoize |
24 | 25 |
25 class _SingletonRenderServletDelegate(RenderServlet.Delegate): | 26 class _SingletonRenderServletDelegate(RenderServlet.Delegate): |
26 def __init__(self, server_instance): | 27 def __init__(self, server_instance): |
27 self._server_instance = server_instance | 28 self._server_instance = server_instance |
28 | 29 |
29 def CreateServerInstanceForChannel(self, channel): | 30 def CreateServerInstanceForChannel(self, channel): |
30 return self._server_instance | 31 return self._server_instance |
31 | 32 |
32 class CronServlet(Servlet): | 33 class CronServlet(Servlet): |
33 '''Servlet which runs a cron job. | 34 '''Servlet which runs a cron job. |
34 ''' | 35 ''' |
35 def __init__(self, request, delegate_for_test=None): | 36 def __init__(self, request, delegate_for_test=None): |
36 Servlet.__init__(self, request) | 37 Servlet.__init__(self, request) |
37 self._channel = request.path.strip('/') | 38 self._channel = request.path.strip('/') |
38 self._delegate = delegate_for_test or CronServlet.Delegate() | 39 self._delegate = delegate_for_test or CronServlet.Delegate() |
39 | 40 |
40 class Delegate(object): | 41 class Delegate(object): |
41 '''CronServlet's runtime dependencies. Override for testing. | 42 '''CronServlet's runtime dependencies. Override for testing. |
42 ''' | 43 ''' |
43 def CreateBranchUtility(self, object_store_creator): | 44 def CreateBranchUtility(self, object_store_creator): |
44 return BranchUtility.Create(object_store_creator) | 45 return BranchUtility.Create(object_store_creator) |
45 | 46 |
47 def CreateHostFileSystem(self, branch): | |
48 return SubversionFileSystem.Create(branch) | |
49 | |
46 def CreateHostFileSystemForBranchAndRevision(self, branch, revision): | 50 def CreateHostFileSystemForBranchAndRevision(self, branch, revision): |
47 return SubversionFileSystem.Create(branch, revision=revision) | 51 return SubversionFileSystem.Create(branch, revision=revision) |
48 | 52 |
49 def CreateAppSamplesFileSystem(self, object_store_creator): | 53 def CreateAppSamplesFileSystem(self, object_store_creator): |
50 # TODO(kalman): CachingFileSystem wrapper for GithubFileSystem, but it's | 54 # TODO(kalman): CachingFileSystem wrapper for GithubFileSystem, but it's |
51 # not supported yet (see comment there). | 55 # not supported yet (see comment there). |
52 return (EmptyDirFileSystem() if IsDevServer() else | 56 return (EmptyDirFileSystem() if IsDevServer() else |
53 GithubFileSystem.Create(object_store_creator)) | 57 GithubFileSystem.Create(object_store_creator)) |
54 | 58 |
55 def GetAppVersion(self): | 59 def GetAppVersion(self): |
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
181 channel = self._channel | 185 channel = self._channel |
182 delegate = self._delegate | 186 delegate = self._delegate |
183 | 187 |
184 server_instance_at_head = self._CreateServerInstance(channel, None) | 188 server_instance_at_head = self._CreateServerInstance(channel, None) |
185 | 189 |
186 get_branch_for_channel = self._GetBranchForChannel | 190 get_branch_for_channel = self._GetBranchForChannel |
187 class AppYamlHelperDelegate(AppYamlHelper.Delegate): | 191 class AppYamlHelperDelegate(AppYamlHelper.Delegate): |
188 def GetHostFileSystemForRevision(self, revision): | 192 def GetHostFileSystemForRevision(self, revision): |
189 return delegate.CreateHostFileSystemForBranchAndRevision( | 193 return delegate.CreateHostFileSystemForBranchAndRevision( |
190 get_branch_for_channel(channel), | 194 get_branch_for_channel(channel), |
191 revision) | 195 revision=revision) |
192 | 196 |
193 app_yaml_handler = AppYamlHelper( | 197 app_yaml_handler = AppYamlHelper( |
194 svn_constants.APP_YAML_PATH, | 198 svn_constants.APP_YAML_PATH, |
195 server_instance_at_head.host_file_system, | 199 server_instance_at_head.host_file_system, |
196 AppYamlHelperDelegate(), | 200 AppYamlHelperDelegate(), |
197 server_instance_at_head.object_store_creator) | 201 server_instance_at_head.object_store_creator) |
198 | 202 |
199 if app_yaml_handler.IsUpToDate(delegate.GetAppVersion()): | 203 if app_yaml_handler.IsUpToDate(delegate.GetAppVersion()): |
200 # TODO(kalman): return a new ServerInstance at an explicit revision in | 204 # TODO(kalman): return a new ServerInstance at an explicit revision in |
201 # case the HEAD version changes underneath us. | 205 # case the HEAD version changes underneath us. |
(...skipping 12 matching lines...) Expand all Loading... | |
214 def _CreateObjectStoreCreator(self, channel): | 218 def _CreateObjectStoreCreator(self, channel): |
215 return ObjectStoreCreator(channel, start_empty=True) | 219 return ObjectStoreCreator(channel, start_empty=True) |
216 | 220 |
217 def _GetBranchForChannel(self, channel): | 221 def _GetBranchForChannel(self, channel): |
218 object_store_creator = self._CreateObjectStoreCreator(channel) | 222 object_store_creator = self._CreateObjectStoreCreator(channel) |
219 return (self._delegate.CreateBranchUtility(object_store_creator) | 223 return (self._delegate.CreateBranchUtility(object_store_creator) |
220 .GetChannelInfo(channel).branch) | 224 .GetChannelInfo(channel).branch) |
221 | 225 |
222 def _CreateServerInstance(self, channel, revision): | 226 def _CreateServerInstance(self, channel, revision): |
223 object_store_creator = self._CreateObjectStoreCreator(channel) | 227 object_store_creator = self._CreateObjectStoreCreator(channel) |
228 branch_utility = self._delegate.CreateBranchUtility(object_store_creator) | |
229 host_file_system_creator = HostFileSystemCreator( | |
230 branch_utility, | |
231 self._delegate.CreateHostFileSystem, | |
232 object_store_creator, | |
233 offline=False) | |
not at google - send to devlin
2013/07/09 23:11:55
False should be the default here so you can leave
epeterson
2013/07/16 00:28:23
Done.
| |
234 # Using HostFileSystemCreator | |
not at google - send to devlin
2013/07/09 23:11:55
yep let's use it
epeterson
2013/07/16 00:28:23
Done.
| |
235 ''' | |
236 host_file_system = host_file_system_creator.CreateAtBranch( | |
237 branch_utility.GetChannelInfo(channel).branch) | |
238 ''' | |
239 # CreateHostFileSystemForBranchAndRevision | |
224 host_file_system = CachingFileSystem( | 240 host_file_system = CachingFileSystem( |
225 self._delegate.CreateHostFileSystemForBranchAndRevision( | 241 self._delegate.CreateHostFileSystemForBranchAndRevision( |
226 self._GetBranchForChannel(channel), | 242 self._GetBranchForChannel(channel), |
227 revision), | 243 revision), |
228 object_store_creator) | 244 object_store_creator) |
245 # Using only CreateHostFileSystem | |
246 ''' | |
247 host_file_system = CachingFileSystem( | |
248 self._delegate.CreateHostFileSystem( | |
249 self._GetBranchForChannel(channel), | |
250 revision=revision), | |
251 object_store_creator) | |
252 ''' | |
229 app_samples_file_system = self._delegate.CreateAppSamplesFileSystem( | 253 app_samples_file_system = self._delegate.CreateAppSamplesFileSystem( |
230 object_store_creator) | 254 object_store_creator) |
231 compiled_host_fs_factory = CompiledFileSystem.Factory( | 255 compiled_host_fs_factory = CompiledFileSystem.Factory( |
232 host_file_system, | 256 host_file_system, |
233 object_store_creator) | 257 object_store_creator) |
234 return ServerInstance(channel, | 258 return ServerInstance(channel, |
235 object_store_creator, | 259 object_store_creator, |
236 host_file_system, | 260 host_file_system, |
237 app_samples_file_system, | 261 app_samples_file_system, |
238 '' if channel == 'stable' else '/%s' % channel, | 262 '' if channel == 'stable' else '/%s' % channel, |
239 compiled_host_fs_factory) | 263 compiled_host_fs_factory, |
264 branch_utility, | |
265 host_file_system_creator) | |
OLD | NEW |