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_data_source import APIDataSource
6 from api_list_data_source import APIListDataSource
7 from api_models import APIModels
8 from availability_finder import AvailabilityFinder
9 from compiled_file_system import CompiledFileSystem
10 from content_providers import ContentProviders
11 from empty_dir_file_system import EmptyDirFileSystem
12 from environment import IsDevServer
13 from features_bundle import FeaturesBundle
14 from github_file_system_provider import GithubFileSystemProvider
15 from host_file_system_provider import HostFileSystemProvider
16 from host_file_system_iterator import HostFileSystemIterator
17 from intro_data_source import IntroDataSource
18 from object_store_creator import ObjectStoreCreator
19 from path_canonicalizer import PathCanonicalizer
20 from reference_resolver import ReferenceResolver
21 from samples_data_source import SamplesDataSource
23 from template_renderer import TemplateRenderer
24 from test_branch_utility import TestBranchUtility
25 from test_object_store import TestObjectStore
27 class ServerInstance(object):
33 host_file_system_provider,
34 github_file_system_provider,
37 |object_store_creator|
38 The ObjectStoreCreator used to create almost all caches.
40 Factory used to create CompiledFileSystems, a higher-level cache type
41 than ObjectStores. This can usually be derived from just
42 |object_store_creator| but under special circumstances a different
43 implementation needs to be passed in.
45 Has knowledge of Chrome branches, channels, and versions.
46 |host_file_system_provider|
47 Creates FileSystem instances which host the server at alternative
49 |github_file_system_provider|
50 Creates FileSystem instances backed by GitHub.
52 The path which all HTML is generated relative to. Usually this is /
53 but some servlets need to override this.
55 self.object_store_creator = object_store_creator
57 self.compiled_fs_factory = compiled_fs_factory
59 self.host_file_system_provider = host_file_system_provider
60 host_fs_at_trunk = host_file_system_provider.GetTrunk()
62 self.github_file_system_provider = github_file_system_provider
64 assert base_path.startswith('/') and base_path.endswith('/')
65 self.base_path = base_path
67 self.host_file_system_iterator = HostFileSystemIterator(
68 host_file_system_provider,
71 self.features_bundle = FeaturesBundle(
73 self.compiled_fs_factory,
74 self.object_store_creator)
76 self.api_models = APIModels(
78 self.compiled_fs_factory,
81 self.availability_finder = AvailabilityFinder(
84 self.host_file_system_iterator,
88 self.api_list_data_source_factory = APIListDataSource.Factory(
89 self.compiled_fs_factory,
92 self.object_store_creator)
94 self.api_data_source_factory = APIDataSource.Factory(
95 self.compiled_fs_factory,
97 svn_constants.API_PATH,
98 self.availability_finder,
101 self.ref_resolver_factory = ReferenceResolver.Factory(
102 self.api_data_source_factory,
104 object_store_creator)
106 self.api_data_source_factory.SetReferenceResolverFactory(
107 self.ref_resolver_factory)
109 # Note: samples are super slow in the dev server because it doesn't support
110 # async fetch, so disable them.
112 extension_samples_fs = EmptyDirFileSystem()
113 app_samples_fs = EmptyDirFileSystem()
115 extension_samples_fs = host_fs_at_trunk
116 app_samples_fs = github_file_system_provider.Create(
117 'GoogleChrome', 'chrome-app-samples')
118 self.samples_data_source_factory = SamplesDataSource.Factory(
119 extension_samples_fs,
121 CompiledFileSystem.Factory(object_store_creator),
122 self.ref_resolver_factory,
123 svn_constants.EXAMPLES_PATH,
126 self.api_data_source_factory.SetSamplesDataSourceFactory(
127 self.samples_data_source_factory)
129 self.intro_data_source_factory = IntroDataSource.Factory(
130 self.compiled_fs_factory,
132 self.ref_resolver_factory,
133 [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])
135 self.path_canonicalizer = PathCanonicalizer(
136 self.compiled_fs_factory,
139 self.content_providers = ContentProviders(
140 self.compiled_fs_factory,
143 # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry,
144 # then factor out the DataSource creation into a factory method, so that
145 # the entire ServerInstance doesn't need to be passed in here.
146 self.template_renderer = TemplateRenderer(self)
148 self.strings_json_path = svn_constants.STRINGS_JSON_PATH
149 self.manifest_json_path = svn_constants.MANIFEST_JSON_PATH
150 self.manifest_features_path = svn_constants.MANIFEST_FEATURES_PATH
153 def ForTest(file_system, base_path='/'):
154 object_store_creator = ObjectStoreCreator.ForTest()
155 return ServerInstance(object_store_creator,
156 CompiledFileSystem.Factory(object_store_creator),
157 TestBranchUtility.CreateWithCannedData(),
158 HostFileSystemProvider.ForTest(file_system,
159 object_store_creator),
160 GithubFileSystemProvider.ForEmpty(),
165 object_store_creator = ObjectStoreCreator(start_empty=False,
166 store_type=TestObjectStore)
167 host_file_system_provider = HostFileSystemProvider.ForLocal(
168 object_store_creator)
169 return ServerInstance(
170 object_store_creator,
171 CompiledFileSystem.Factory(object_store_creator),
172 TestBranchUtility.CreateWithCannedData(),
173 host_file_system_provider,
174 GithubFileSystemProvider.ForEmpty())