15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)# found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from api_data_source import APIDataSource 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from api_list_data_source import APIListDataSource 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from compiled_file_system import CompiledFileSystem 80f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)from content_providers import ContentProviders 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from document_renderer import DocumentRenderer 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from empty_dir_file_system import EmptyDirFileSystem 110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)from environment import IsDevServer 125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from gcs_file_system_provider import CloudStorageFileSystemProvider 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)from github_file_system_provider import GithubFileSystemProvider 14424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)from host_file_system_iterator import HostFileSystemIterator 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)from host_file_system_provider import HostFileSystemProvider 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from object_store_creator import ObjectStoreCreator 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom platform_bundle import PlatformBundle 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)from samples_data_source import SamplesDataSource 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)from table_of_contents_renderer import TableOfContentsRenderer 200f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)from template_renderer import TemplateRenderer 217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochfrom test_branch_utility import TestBranchUtility 22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)from test_object_store import TestObjectStore 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class ServerInstance(object): 26424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) def __init__(self, 28b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) object_store_creator, 297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch compiled_fs_factory, 307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch branch_utility, 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host_file_system_provider, 321e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) github_file_system_provider, 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) gcs_file_system_provider, 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base_path='/'): 354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ''' 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) |object_store_creator| 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) The ObjectStoreCreator used to create almost all caches. 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) |compiled_fs_factory| 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Factory used to create CompiledFileSystems, a higher-level cache type 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) than ObjectStores. This can usually be derived from just 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) |object_store_creator| but under special circumstances a different 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) implementation needs to be passed in. 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) |branch_utility| 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Has knowledge of Chrome branches, channels, and versions. 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) |host_file_system_provider| 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Creates FileSystem instances which host the server at alternative 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) revisions. 481e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) |github_file_system_provider| 491e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) Creates FileSystem instances backed by GitHub. 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) |base_path| 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) The path which all HTML is generated relative to. Usually this is / 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) but some servlets need to override this. 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ''' 54b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) self.object_store_creator = object_store_creator 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self.compiled_fs_factory = compiled_fs_factory 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self.host_file_system_provider = host_file_system_provider 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_fs_at_master = host_file_system_provider.GetMaster() 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) self.github_file_system_provider = github_file_system_provider 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.gcs_file_system_provider = gcs_file_system_provider 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) assert base_path.startswith('/') and base_path.endswith('/') 654e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self.base_path = base_path 667dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 67424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) self.host_file_system_iterator = HostFileSystemIterator( 684e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host_file_system_provider, 69424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) branch_utility) 70424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.platform_bundle = PlatformBundle( 7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) branch_utility, 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.compiled_fs_factory, 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_fs_at_master, 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.host_file_system_iterator, 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.object_store_creator, 776e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.base_path) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 790f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) self.content_providers = ContentProviders( 805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) object_store_creator, 814e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) self.compiled_fs_factory, 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_fs_at_master, 835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.github_file_system_provider, 845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.gcs_file_system_provider) 853551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 860f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry, 870f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) # then factor out the DataSource creation into a factory method, so that 880f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) # the entire ServerInstance doesn't need to be passed in here. 890f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) self.template_renderer = TemplateRenderer(self) 903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) # TODO(kalman): It may be better for |document_renderer| to construct a 92a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) # TemplateDataSource itself rather than depending on template_renderer, but 93a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) # for that the above todo should be addressed. 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.document_renderer = DocumentRenderer( 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TableOfContentsRenderer(host_fs_at_master, 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) compiled_fs_factory, 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) self.template_renderer), 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.platform_bundle) 99a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 100b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) @staticmethod 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) def ForTest(file_system=None, file_system_provider=None, base_path='/'): 102a93a17c8d99d686bd4a1511e5504e5e6cc9fcadfTorne (Richard Coles) object_store_creator = ObjectStoreCreator.ForTest() 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if file_system is None and file_system_provider is None: 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) raise ValueError('Either |file_system| or |file_system_provider| ' 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'must be specified') 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if file_system and file_system_provider: 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) raise ValueError('Only one of |file_system| and |file_system_provider| ' 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 'can be specified') 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if file_system_provider is None: 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) file_system_provider = HostFileSystemProvider.ForTest( 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) file_system, 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) object_store_creator) 113ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return ServerInstance(object_store_creator, 1144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CompiledFileSystem.Factory(object_store_creator), 1157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TestBranchUtility.CreateWithCannedData(), 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) file_system_provider, 1171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GithubFileSystemProvider.ForEmpty(), 1185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CloudStorageFileSystemProvider(object_store_creator), 1194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) base_path=base_path) 120b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 121b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) @staticmethod 122b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) def ForLocal(): 123ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch object_store_creator = ObjectStoreCreator(start_empty=False, 124b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) store_type=TestObjectStore) 1254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) host_file_system_provider = HostFileSystemProvider.ForLocal( 1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch object_store_creator) 127b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) return ServerInstance( 128b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) object_store_creator, 1294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) CompiledFileSystem.Factory(object_store_creator), 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch TestBranchUtility.CreateWithCannedData(), 1311e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) host_file_system_provider, 1325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) GithubFileSystemProvider.ForEmpty(), 1335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CloudStorageFileSystemProvider(object_store_creator)) 134