blob: ef92a06c44d3b99500f7f6fb2167da8dfe471475 [file] [log] [blame]
# Copyright (c) 2012 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from api_data_source import APIDataSource
from api_list_data_source import APIListDataSource
from appengine_wrappers import IsDevServer
from availability_finder import AvailabilityFinder
from compiled_file_system import CompiledFileSystem
from empty_dir_file_system import EmptyDirFileSystem
from example_zipper import ExampleZipper
from host_file_system_creator import HostFileSystemCreator
from host_file_system_iterator import HostFileSystemIterator
from intro_data_source import IntroDataSource
from object_store_creator import ObjectStoreCreator
from path_canonicalizer import PathCanonicalizer
from permissions_data_source import PermissionsDataSource
from redirector import Redirector
from reference_resolver import ReferenceResolver
from samples_data_source import SamplesDataSource
import svn_constants
from template_data_source import TemplateDataSource
from test_branch_utility import TestBranchUtility
from test_object_store import TestObjectStore
class ServerInstance(object):
def __init__(self,
object_store_creator,
host_file_system,
app_samples_file_system,
base_path,
compiled_fs_factory,
branch_utility,
host_file_system_creator):
self.object_store_creator = object_store_creator
self.host_file_system = host_file_system
self.app_samples_file_system = app_samples_file_system
self.compiled_host_fs_factory = compiled_fs_factory
self.host_file_system_creator = host_file_system_creator
self.host_file_system_iterator = HostFileSystemIterator(
host_file_system_creator,
host_file_system,
branch_utility)
self.availability_finder = AvailabilityFinder(
self.host_file_system_iterator,
object_store_creator,
branch_utility)
self.api_list_data_source_factory = APIListDataSource.Factory(
self.compiled_host_fs_factory,
self.host_file_system,
svn_constants.API_PATH,
svn_constants.PUBLIC_TEMPLATE_PATH)
self.api_data_source_factory = APIDataSource.Factory(
self.compiled_host_fs_factory,
svn_constants.API_PATH,
self.availability_finder,
branch_utility)
self.ref_resolver_factory = ReferenceResolver.Factory(
self.api_data_source_factory,
self.api_list_data_source_factory,
object_store_creator)
self.api_data_source_factory.SetReferenceResolverFactory(
self.ref_resolver_factory)
# Note: samples are super slow in the dev server because it doesn't support
# async fetch, so disable them.
if IsDevServer():
extension_samples_fs = EmptyDirFileSystem()
else:
extension_samples_fs = self.host_file_system
self.samples_data_source_factory = SamplesDataSource.Factory(
extension_samples_fs,
CompiledFileSystem.Factory(extension_samples_fs, object_store_creator),
self.app_samples_file_system,
CompiledFileSystem.Factory(self.app_samples_file_system,
object_store_creator),
self.ref_resolver_factory,
svn_constants.EXAMPLES_PATH,
base_path)
self.api_data_source_factory.SetSamplesDataSourceFactory(
self.samples_data_source_factory)
self.intro_data_source_factory = IntroDataSource.Factory(
self.compiled_host_fs_factory,
self.ref_resolver_factory,
[svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])
self.permissions_data_source = PermissionsDataSource(
self.compiled_host_fs_factory,
self.host_file_system,
'/'.join((svn_constants.API_PATH, '_api_features.json')),
'/'.join((svn_constants.API_PATH, '_permission_features.json')),
'/'.join((svn_constants.JSON_PATH, 'permissions.json')))
self.example_zipper = ExampleZipper(
self.compiled_host_fs_factory,
self.host_file_system,
svn_constants.DOCS_PATH)
self.path_canonicalizer = PathCanonicalizer(self.compiled_host_fs_factory)
self.redirector = Redirector(
self.compiled_host_fs_factory,
self.host_file_system,
svn_constants.PUBLIC_TEMPLATE_PATH)
self.strings_json_path = '/'.join((svn_constants.JSON_PATH, 'strings.json'))
self.sidenav_json_base_path = svn_constants.JSON_PATH
self.manifest_json_path = '/'.join(
(svn_constants.JSON_PATH, 'manifest.json'))
self.manifest_features_path = '/'.join(
(svn_constants.API_PATH, '_manifest_features.json'))
self.template_data_source_factory = TemplateDataSource.Factory(
self.api_data_source_factory,
self.api_list_data_source_factory,
self.intro_data_source_factory,
self.samples_data_source_factory,
self.compiled_host_fs_factory,
self.ref_resolver_factory,
self.permissions_data_source,
svn_constants.PUBLIC_TEMPLATE_PATH,
svn_constants.PRIVATE_TEMPLATE_PATH,
base_path)
self.api_data_source_factory.SetTemplateDataSource(
self.template_data_source_factory)
self.permissions_data_source.SetTemplateDataSource(
self.template_data_source_factory)
@staticmethod
def ForTest(file_system):
object_store_creator = ObjectStoreCreator.ForTest()
return ServerInstance(object_store_creator,
file_system,
EmptyDirFileSystem(),
'',
CompiledFileSystem.Factory(file_system,
object_store_creator),
TestBranchUtility.CreateWithCannedData(),
HostFileSystemCreator.ForTest(file_system,
object_store_creator))
@staticmethod
def ForLocal():
object_store_creator = ObjectStoreCreator(start_empty=False,
store_type=TestObjectStore)
host_file_system_creator = HostFileSystemCreator.ForLocal(
object_store_creator)
trunk_file_system = host_file_system_creator.Create()
return ServerInstance(
object_store_creator,
trunk_file_system,
EmptyDirFileSystem(),
'',
CompiledFileSystem.Factory(trunk_file_system, object_store_creator),
TestBranchUtility.CreateWithCannedData(),
host_file_system_creator)