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
3 # found in the LICENSE file.
5 from api_categorizer import APICategorizer
6 from api_data_source import APIDataSource
7 from api_list_data_source import APIListDataSource
8 from api_models import APIModels
9 from availability_finder import AvailabilityFinder
10 from compiled_file_system import CompiledFileSystem
11 from content_providers import ContentProviders
12 from document_renderer import DocumentRenderer
13 from empty_dir_file_system import EmptyDirFileSystem
14 from environment import IsDevServer
15 from features_bundle import FeaturesBundle
16 from gcs_file_system_provider import CloudStorageFileSystemProvider
17 from github_file_system_provider import GithubFileSystemProvider
18 from host_file_system_iterator import HostFileSystemIterator
19 from host_file_system_provider import HostFileSystemProvider
20 from object_store_creator import ObjectStoreCreator
21 from reference_resolver import ReferenceResolver
22 from samples_data_source import SamplesDataSource
23 from table_of_contents_renderer import TableOfContentsRenderer
24 from template_renderer import TemplateRenderer
25 from test_branch_utility import TestBranchUtility
26 from test_object_store import TestObjectStore
29 class ServerInstance(object):
35 host_file_system_provider,
36 github_file_system_provider,
37 gcs_file_system_provider,
40 |object_store_creator|
41 The ObjectStoreCreator used to create almost all caches.
43 Factory used to create CompiledFileSystems, a higher-level cache type
44 than ObjectStores. This can usually be derived from just
45 |object_store_creator| but under special circumstances a different
46 implementation needs to be passed in.
48 Has knowledge of Chrome branches, channels, and versions.
49 |host_file_system_provider|
50 Creates FileSystem instances which host the server at alternative
52 |github_file_system_provider|
53 Creates FileSystem instances backed by GitHub.
55 The path which all HTML is generated relative to. Usually this is /
56 but some servlets need to override this.
58 self.object_store_creator = object_store_creator
60 self.compiled_fs_factory = compiled_fs_factory
62 self.host_file_system_provider = host_file_system_provider
63 host_fs_at_trunk = host_file_system_provider.GetTrunk()
65 self.github_file_system_provider = github_file_system_provider
66 self.gcs_file_system_provider = gcs_file_system_provider
68 assert base_path.startswith('/') and base_path.endswith('/')
69 self.base_path = base_path
71 self.host_file_system_iterator = HostFileSystemIterator(
72 host_file_system_provider,
75 self.features_bundle = FeaturesBundle(
77 self.compiled_fs_factory,
78 self.object_store_creator)
80 self.api_models = APIModels(
82 self.compiled_fs_factory,
85 self.availability_finder = AvailabilityFinder(
88 self.host_file_system_iterator,
92 self.api_categorizer = APICategorizer(
96 self.api_data_source_factory = APIDataSource.Factory(
97 self.compiled_fs_factory,
99 self.availability_finder,
101 self.object_store_creator)
103 self.api_list_data_source_factory = APIListDataSource.Factory(
104 self.compiled_fs_factory,
106 self.features_bundle,
107 self.object_store_creator,
109 self.availability_finder,
110 self.api_categorizer)
112 self.ref_resolver_factory = ReferenceResolver.Factory(
113 self.api_data_source_factory,
115 object_store_creator)
117 self.api_data_source_factory.SetReferenceResolverFactory(
118 self.ref_resolver_factory)
120 # Note: samples are super slow in the dev server because it doesn't support
121 # async fetch, so disable them.
123 extension_samples_fs = EmptyDirFileSystem()
124 app_samples_fs = EmptyDirFileSystem()
126 extension_samples_fs = host_fs_at_trunk
127 # TODO(kalman): Re-enable the apps samples, see http://crbug.com/344097.
128 app_samples_fs = EmptyDirFileSystem()
129 #app_samples_fs = github_file_system_provider.Create(
130 # 'GoogleChrome', 'chrome-app-samples')
131 self.samples_data_source_factory = SamplesDataSource.Factory(
132 extension_samples_fs,
134 CompiledFileSystem.Factory(object_store_creator),
135 self.ref_resolver_factory,
138 self.api_data_source_factory.SetSamplesDataSourceFactory(
139 self.samples_data_source_factory)
141 self.content_providers = ContentProviders(
142 object_store_creator,
143 self.compiled_fs_factory,
145 self.github_file_system_provider,
146 self.gcs_file_system_provider)
148 # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry,
149 # then factor out the DataSource creation into a factory method, so that
150 # the entire ServerInstance doesn't need to be passed in here.
151 self.template_renderer = TemplateRenderer(self)
153 # TODO(kalman): It may be better for |document_renderer| to construct a
154 # TemplateDataSource itself rather than depending on template_renderer, but
155 # for that the above todo should be addressed.
156 self.document_renderer = DocumentRenderer(
157 TableOfContentsRenderer(host_fs_at_trunk,
159 self.template_renderer),
160 self.ref_resolver_factory.Create())
163 def ForTest(file_system=None, file_system_provider=None, base_path='/'):
164 object_store_creator = ObjectStoreCreator.ForTest()
165 if file_system is None and file_system_provider is None:
166 raise ValueError('Either |file_system| or |file_system_provider| '
168 if file_system and file_system_provider:
169 raise ValueError('Only one of |file_system| and |file_system_provider| '
171 if file_system_provider is None:
172 file_system_provider = HostFileSystemProvider.ForTest(
174 object_store_creator)
175 return ServerInstance(object_store_creator,
176 CompiledFileSystem.Factory(object_store_creator),
177 TestBranchUtility.CreateWithCannedData(),
178 file_system_provider,
179 GithubFileSystemProvider.ForEmpty(),
180 CloudStorageFileSystemProvider(object_store_creator),
185 object_store_creator = ObjectStoreCreator(start_empty=False,
186 store_type=TestObjectStore)
187 host_file_system_provider = HostFileSystemProvider.ForLocal(
188 object_store_creator)
189 return ServerInstance(
190 object_store_creator,
191 CompiledFileSystem.Factory(object_store_creator),
192 TestBranchUtility.CreateWithCannedData(),
193 host_file_system_provider,
194 GithubFileSystemProvider.ForEmpty(),
195 CloudStorageFileSystemProvider(object_store_creator))