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 compiled_file_system import CompiledFileSystem
8 from content_providers import ContentProviders
9 from document_renderer import DocumentRenderer
10 from empty_dir_file_system import EmptyDirFileSystem
11 from environment import IsDevServer
12 from gcs_file_system_provider import CloudStorageFileSystemProvider
13 from github_file_system_provider import GithubFileSystemProvider
14 from host_file_system_iterator import HostFileSystemIterator
15 from host_file_system_provider import HostFileSystemProvider
16 from object_store_creator import ObjectStoreCreator
17 from platform_bundle import PlatformBundle
18 from samples_data_source import SamplesDataSource
19 from table_of_contents_renderer import TableOfContentsRenderer
20 from template_renderer import TemplateRenderer
21 from test_branch_utility import TestBranchUtility
22 from test_object_store import TestObjectStore
25 class ServerInstance(object):
31 host_file_system_provider,
32 github_file_system_provider,
33 gcs_file_system_provider,
36 |object_store_creator|
37 The ObjectStoreCreator used to create almost all caches.
39 Factory used to create CompiledFileSystems, a higher-level cache type
40 than ObjectStores. This can usually be derived from just
41 |object_store_creator| but under special circumstances a different
42 implementation needs to be passed in.
44 Has knowledge of Chrome branches, channels, and versions.
45 |host_file_system_provider|
46 Creates FileSystem instances which host the server at alternative
48 |github_file_system_provider|
49 Creates FileSystem instances backed by GitHub.
51 The path which all HTML is generated relative to. Usually this is /
52 but some servlets need to override this.
54 self.object_store_creator = object_store_creator
56 self.compiled_fs_factory = compiled_fs_factory
58 self.host_file_system_provider = host_file_system_provider
59 host_fs_at_master = host_file_system_provider.GetMaster()
61 self.github_file_system_provider = github_file_system_provider
62 self.gcs_file_system_provider = gcs_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.platform_bundle = PlatformBundle(
73 self.compiled_fs_factory,
75 self.host_file_system_iterator,
76 self.object_store_creator,
79 self.content_providers = ContentProviders(
81 self.compiled_fs_factory,
83 self.github_file_system_provider,
84 self.gcs_file_system_provider)
86 # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry,
87 # then factor out the DataSource creation into a factory method, so that
88 # the entire ServerInstance doesn't need to be passed in here.
89 self.template_renderer = TemplateRenderer(self)
91 # TODO(kalman): It may be better for |document_renderer| to construct a
92 # TemplateDataSource itself rather than depending on template_renderer, but
93 # for that the above todo should be addressed.
94 self.document_renderer = DocumentRenderer(
95 TableOfContentsRenderer(host_fs_at_master,
97 self.template_renderer),
101 def ForTest(file_system=None, file_system_provider=None, base_path='/'):
102 object_store_creator = ObjectStoreCreator.ForTest()
103 if file_system is None and file_system_provider is None:
104 raise ValueError('Either |file_system| or |file_system_provider| '
106 if file_system and file_system_provider:
107 raise ValueError('Only one of |file_system| and |file_system_provider| '
109 if file_system_provider is None:
110 file_system_provider = HostFileSystemProvider.ForTest(
112 object_store_creator)
113 return ServerInstance(object_store_creator,
114 CompiledFileSystem.Factory(object_store_creator),
115 TestBranchUtility.CreateWithCannedData(),
116 file_system_provider,
117 GithubFileSystemProvider.ForEmpty(),
118 CloudStorageFileSystemProvider(object_store_creator),
123 object_store_creator = ObjectStoreCreator(start_empty=False,
124 store_type=TestObjectStore)
125 host_file_system_provider = HostFileSystemProvider.ForLocal(
126 object_store_creator)
127 return ServerInstance(
128 object_store_creator,
129 CompiledFileSystem.Factory(object_store_creator),
130 TestBranchUtility.CreateWithCannedData(),
131 host_file_system_provider,
132 GithubFileSystemProvider.ForEmpty(),
133 CloudStorageFileSystemProvider(object_store_creator))