1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch# found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom api_categorizer import APICategorizer 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom api_models import APIModels 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom availability_finder import AvailabilityFinder 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from empty_dir_file_system import EmptyDirFileSystem 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from environment import IsDevServer 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom features_bundle import FeaturesBundle 115f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)from future import All 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom platform_util import GetPlatforms, PlatformToExtensionType 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom reference_resolver import ReferenceResolver 146e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from samples_model import SamplesModel 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom future import Future 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccifrom schema_processor import SchemaProcessorFactory 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass _PlatformData(object): 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def __init__(self): 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.features_bundle = None 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.api_models = None 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.reference_resolver = None 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.availability_finder = None 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.api_categorizer = None 266e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.samples_model = None 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass PlatformBundle(object): 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch '''Creates various objects for different platforms 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ''' 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def __init__(self, 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch branch_utility, 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch compiled_fs_factory, 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci host_fs_at_master, 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch host_file_system_iterator, 376e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) object_store_creator, 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base_path): 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._branch_utility = branch_utility 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._compiled_fs_factory = compiled_fs_factory 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._host_fs_at_master = host_fs_at_master 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._host_file_system_iterator = host_file_system_iterator 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._object_store_creator = object_store_creator 446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._base_path = base_path 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._platform_data = dict((p, _PlatformData()) for p in GetPlatforms()) 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def GetSamplesModel(self, platform): 486e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if self._platform_data[platform].samples_model is None: 496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) # Note: samples are super slow in the dev server because it doesn't 506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) # support async fetch, so disable them. 516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) if IsDevServer(): 526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_samples_fs = EmptyDirFileSystem() 536e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) app_samples_fs = EmptyDirFileSystem() 546e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) else: 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extension_samples_fs = self._host_fs_at_master 566e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) # TODO(kalman): Re-enable the apps samples, see http://crbug.com/344097. 576e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) app_samples_fs = EmptyDirFileSystem() 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) #app_samples_fs = github_file_system_provider.Create( 596e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) # 'GoogleChrome', 'chrome-app-samples') 606e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._platform_data[platform].samples_model = SamplesModel( 616e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) extension_samples_fs, 626e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) app_samples_fs, 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._compiled_fs_factory, 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self.GetReferenceResolver(platform), 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) self._base_path, 666e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) platform) 676e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) return self._platform_data[platform].samples_model 686e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def GetFeaturesBundle(self, platform): 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if self._platform_data[platform].features_bundle is None: 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._platform_data[platform].features_bundle = FeaturesBundle( 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._host_fs_at_master, 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._compiled_fs_factory, 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._object_store_creator, 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch platform) 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return self._platform_data[platform].features_bundle 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def GetAPIModels(self, platform): 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if self._platform_data[platform].api_models is None: 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch # TODO(danielj41): Filter APIModels data here rather than passing the 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch # platform. 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._platform_data[platform].api_models = APIModels( 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.GetFeaturesBundle(platform), 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._compiled_fs_factory, 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._host_fs_at_master, 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self._object_store_creator, 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci platform, 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SchemaProcessorFactory( 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Future(callback=lambda: self.GetReferenceResolver(platform)), 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Future(callback=lambda: self.GetAPIModels(platform)), 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Future(callback=lambda: self.GetFeaturesBundle(platform)), 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._compiled_fs_factory, 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._host_fs_at_master)) 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return self._platform_data[platform].api_models 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def GetReferenceResolver(self, platform): 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if self._platform_data[platform].reference_resolver is None: 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._platform_data[platform].reference_resolver = ReferenceResolver( 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self.GetAPIModels(platform), 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._object_store_creator.Create(ReferenceResolver, 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch category=platform)) 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return self._platform_data[platform].reference_resolver 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def GetAvailabilityFinder(self, platform): 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if self._platform_data[platform].availability_finder is None: 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._platform_data[platform].availability_finder = AvailabilityFinder( 107116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._branch_utility, 108116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._compiled_fs_factory, 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._host_file_system_iterator, 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._host_fs_at_master, 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._object_store_creator, 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci platform, 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SchemaProcessorFactory( 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Future(callback=lambda: self.GetReferenceResolver(platform)), 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Future(callback=lambda: self.GetAPIModels(platform)), 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Future(callback=lambda: self.GetFeaturesBundle(platform)), 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._compiled_fs_factory, 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._host_fs_at_master)) 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return self._platform_data[platform].availability_finder 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def GetAPICategorizer(self, platform): 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch if self._platform_data[platform].api_categorizer is None: 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._platform_data[platform].api_categorizer = APICategorizer( 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci self._host_fs_at_master, 125116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch self._compiled_fs_factory, 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch platform) 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return self._platform_data[platform].api_categorizer 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def GetRefreshPaths(self): 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return [platform for platform in self._platform_data.keys()] 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci def Refresh(self, platform): 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return self.GetAPIModels(platform).Refresh() 134116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 135116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch def GetIdentity(self): 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return self._host_fs_at_master.GetIdentity() 137