Example #1
0
    def __init__(self, channel, object_store_creator_factory, svn_file_system,
                 github_file_system):
        self.svn_file_system = svn_file_system

        self.github_file_system = github_file_system

        self.compiled_fs_factory = CompiledFileSystem.Factory(
            svn_file_system, object_store_creator_factory)

        self.api_list_data_source_factory = APIListDataSource.Factory(
            self.compiled_fs_factory, svn_constants.API_PATH,
            svn_constants.PUBLIC_TEMPLATE_PATH)

        self.api_data_source_factory = APIDataSource.Factory(
            self.compiled_fs_factory, svn_constants.API_PATH)

        self.ref_resolver_factory = ReferenceResolver.Factory(
            self.api_data_source_factory, self.api_list_data_source_factory,
            object_store_creator_factory)

        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 you actually want to test samples, then
        # good luck, and modify _IsSamplesDisabled at the top.
        if _IsSamplesDisabled():
            svn_fs_for_samples = EmptyDirFileSystem()
        else:
            svn_fs_for_samples = self.svn_file_system
        self.samples_data_source_factory = SamplesDataSource.Factory(
            channel, svn_fs_for_samples, self.github_file_system,
            self.ref_resolver_factory, object_store_creator_factory,
            svn_constants.EXAMPLES_PATH)

        self.api_data_source_factory.SetSamplesDataSourceFactory(
            self.samples_data_source_factory)

        self.intro_data_source_factory = IntroDataSource.Factory(
            self.compiled_fs_factory, self.ref_resolver_factory,
            [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])

        self.sidenav_data_source_factory = SidenavDataSource.Factory(
            self.compiled_fs_factory, svn_constants.JSON_PATH)

        self.template_data_source_factory = TemplateDataSource.Factory(
            channel, self.api_data_source_factory,
            self.api_list_data_source_factory, self.intro_data_source_factory,
            self.samples_data_source_factory, self.sidenav_data_source_factory,
            self.compiled_fs_factory, self.ref_resolver_factory,
            svn_constants.PUBLIC_TEMPLATE_PATH,
            svn_constants.PRIVATE_TEMPLATE_PATH)

        self.example_zipper = ExampleZipper(self.compiled_fs_factory,
                                            svn_constants.DOCS_PATH)

        self.path_canonicalizer = PathCanonicalizer(channel,
                                                    self.compiled_fs_factory)

        self.content_cache = self.compiled_fs_factory.GetOrCreateIdentity()
 def _CreateTemplateDataSource(self, compiled_fs_factory, api_data=None):
   if api_data is None:
     api_data_factory = APIDataSource.Factory(compiled_fs_factory,
                                              'fake_path',
                                              _FakeFactory())
   else:
     api_data_factory = _FakeFactory(api_data)
   reference_resolver_factory = ReferenceResolver.Factory(
       api_data_factory,
       self._fake_api_list_data_source_factory,
       ObjectStoreCreator.ForTest())
   @DisableLogging('error')  # "was never set" error
   def create_from_factory(factory):
     path = 'extensions/foo'
     return factory.Create(Request.ForTest(path), path)
   return create_from_factory(TemplateDataSource.Factory(
       api_data_factory,
       self._fake_api_list_data_source_factory,
       self._fake_intro_data_source_factory,
       self._fake_samples_data_source_factory,
       self._fake_sidenav_data_source_factory,
       compiled_fs_factory,
       reference_resolver_factory,
       self._manifest_data_source,
       '.',
       '.',
       ''))
Example #3
0
 def _GetInstanceForBranch(self, branch):
     if branch in SERVER_INSTANCES:
         return SERVER_INSTANCES[branch]
     if branch == 'local':
         fetcher = LocalFetcher(EXTENSIONS_PATH)
         # No cache for local doc server.
         cache_timeout_seconds = 0
     else:
         fetcher = SubversionFetcher(branch, EXTENSIONS_PATH, urlfetch)
         cache_timeout_seconds = 300
     cache_builder = FetcherCache.Builder(fetcher, cache_timeout_seconds)
     api_data_source = APIDataSource(cache_builder, API_PATH)
     intro_data_source = IntroDataSource(cache_builder,
                                         [INTRO_PATH, ARTICLE_PATH])
     samples_data_source = SamplesDataSource(fetcher, cache_builder,
                                             EXAMPLES_PATH)
     template_data_source = TemplateDataSource(
         branch, api_data_source, intro_data_source, samples_data_source,
         cache_builder, [PUBLIC_TEMPLATE_PATH, PRIVATE_TEMPLATE_PATH])
     example_zipper = ExampleZipper(fetcher, cache_builder, DOCS_PATH,
                                    EXAMPLES_PATH)
     SERVER_INSTANCES[branch] = ServerInstance(template_data_source,
                                               example_zipper,
                                               cache_builder)
     return SERVER_INSTANCES[branch]
Example #4
0
def _GetInstanceForBranch(channel_name, local_path):
  branch = BRANCH_UTILITY.GetBranchNumberForChannelName(channel_name)

  # The key for the server is a tuple of |channel_name| with |branch|, since
  # sometimes stable and beta point to the same branch.
  instance_key = _MakeInstanceKey(channel_name, branch)
  instance = SERVER_INSTANCES.get(instance_key, None)
  if instance is not None:
    return instance

  branch_memcache = InMemoryObjectStore(branch)
  if branch == 'local':
    file_system = LocalFileSystem(local_path)
  else:
    file_system = _CreateMemcacheFileSystem(branch, branch_memcache)

  cache_factory = CompiledFileSystem.Factory(file_system, branch_memcache)
  api_list_data_source_factory = APIListDataSource.Factory(cache_factory,
                                                           file_system,
                                                           API_PATH,
                                                           PUBLIC_TEMPLATE_PATH)
  intro_data_source_factory = IntroDataSource.Factory(
      cache_factory,
      [INTRO_PATH, ARTICLE_PATH])
  samples_data_source_factory = SamplesDataSource.Factory(
      channel_name,
      file_system,
      GITHUB_FILE_SYSTEM,
      cache_factory,
      GITHUB_COMPILED_FILE_SYSTEM,
      api_list_data_source_factory,
      EXAMPLES_PATH)
  api_data_source_factory = APIDataSource.Factory(cache_factory,
                                                  API_PATH,
                                                  samples_data_source_factory)
  template_data_source_factory = TemplateDataSource.Factory(
      channel_name,
      api_data_source_factory,
      api_list_data_source_factory,
      intro_data_source_factory,
      samples_data_source_factory,
      KNOWN_ISSUES_DATA_SOURCE,
      cache_factory,
      PUBLIC_TEMPLATE_PATH,
      PRIVATE_TEMPLATE_PATH)
  example_zipper = ExampleZipper(file_system,
                                 cache_factory,
                                 DOCS_PATH)

  instance = ServerInstance(template_data_source_factory,
                            example_zipper,
                            cache_factory)
  SERVER_INSTANCES[instance_key] = instance
  return instance
  def testSimple(self):
    fetcher = LocalFetcher(self._base_path)
    cache_builder = FetcherCache.Builder(fetcher, 0)
    data_source = APIDataSource(cache_builder, './')

    # Take the dict out of the list.
    expected = json.loads(self._ReadLocalFile('expected_test_file.json'))
    self.assertEqual(expected, data_source['test_file'])
    self.assertEqual(expected, data_source['testFile'])
    self.assertEqual(expected, data_source['testFile.html'])

    self.assertEqual(None, data_source['junk'])
Example #6
0
    def __init__(self, channel, object_store_creator_factory, svn_file_system,
                 github_file_system):
        self.svn_file_system = svn_file_system

        self.github_file_system = github_file_system

        self.compiled_fs_factory = CompiledFileSystem.Factory(
            svn_file_system, object_store_creator_factory)

        self.api_list_data_source_factory = APIListDataSource.Factory(
            self.compiled_fs_factory, svn_constants.API_PATH,
            svn_constants.PUBLIC_TEMPLATE_PATH)

        self.api_data_source_factory = APIDataSource.Factory(
            self.compiled_fs_factory, svn_constants.API_PATH)

        self.ref_resolver_factory = ReferenceResolver.Factory(
            self.api_data_source_factory, self.api_list_data_source_factory,
            object_store_creator_factory)

        self.api_data_source_factory.SetReferenceResolverFactory(
            self.ref_resolver_factory)

        self.samples_data_source_factory = SamplesDataSource.Factory(
            channel, self.svn_file_system, ServerInstance.github_file_system,
            self.ref_resolver_factory, object_store_creator_factory,
            svn_constants.EXAMPLES_PATH)

        self.api_data_source_factory.SetSamplesDataSourceFactory(
            self.samples_data_source_factory)

        self.intro_data_source_factory = IntroDataSource.Factory(
            self.compiled_fs_factory, self.ref_resolver_factory,
            [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])

        self.sidenav_data_source_factory = SidenavDataSource.Factory(
            self.compiled_fs_factory, svn_constants.JSON_PATH)

        self.template_data_source_factory = TemplateDataSource.Factory(
            channel, self.api_data_source_factory,
            self.api_list_data_source_factory, self.intro_data_source_factory,
            self.samples_data_source_factory, self.sidenav_data_source_factory,
            self.compiled_fs_factory, self.ref_resolver_factory,
            svn_constants.PUBLIC_TEMPLATE_PATH,
            svn_constants.PRIVATE_TEMPLATE_PATH)

        self.example_zipper = ExampleZipper(self.compiled_fs_factory,
                                            svn_constants.DOCS_PATH)

        self.path_canonicalizer = PathCanonicalizer(channel,
                                                    self.compiled_fs_factory)

        self.content_cache = self.compiled_fs_factory.GetOrCreateIdentity()
 def _CreateTemplateDataSource(self, compiled_fs_factory, api_data=None):
     if api_data is None:
         api_data_factory = APIDataSource.Factory(compiled_fs_factory,
                                                  'fake_path')
     else:
         api_data_factory = _FakeFactory(api_data)
     reference_resolver_factory = ReferenceResolver.Factory(
         api_data_factory, self._fake_api_list_data_source_factory,
         ObjectStoreCreator.Factory())
     return (TemplateDataSource.Factory(
         'fake_channel', api_data_factory,
         self._fake_api_list_data_source_factory,
         self._fake_intro_data_source_factory,
         self._fake_samples_data_source_factory,
         self._fake_sidenav_data_source_factory, compiled_fs_factory,
         reference_resolver_factory, '.',
         '.').Create(_FakeRequest(), 'extensions/foo'))
Example #8
0
 def _GetInstanceForBranch(self, branch):
   if branch in SERVER_INSTANCES:
     return SERVER_INSTANCES[branch]
   if branch == 'local':
     fetcher = LocalFetcher(EXTENSIONS_PATH)
     # No cache for local doc server.
     cache_timeout_seconds = 0
   else:
     fetcher = SubversionFetcher(branch, EXTENSIONS_PATH, urlfetch)
     cache_timeout_seconds = 300
   cache_builder = FetcherCache.Builder(fetcher, cache_timeout_seconds)
   api_data_source = APIDataSource(cache_builder, API_PATH)
   template_data_source = TemplateDataSource(
       branch,
       api_data_source,
       cache_builder,
       [PUBLIC_TEMPLATE_PATH, PRIVATE_TEMPLATE_PATH])
   SERVER_INSTANCES[branch] = ServerInstance(
       template_data_source,
       cache_builder)
   return SERVER_INSTANCES[branch]
Example #9
0
    def DISABLED_testSimple(self):
        cache_factory = CompiledFileSystem.Factory(
            LocalFileSystem(self._base_path),
            InMemoryObjectStore('fake_branch'))
        data_source_factory = APIDataSource.Factory(cache_factory, '.',
                                                    FakeSamplesDataSource())
        data_source = data_source_factory.Create({})

        # Take the dict out of the list.
        expected = json.loads(self._ReadLocalFile('expected_test_file.json'))
        expected['permissions'] = None
        test1 = data_source['test_file']
        test1.pop('samples')
        self.assertEqual(expected, test1)
        test2 = data_source['testFile']
        test2.pop('samples')
        self.assertEqual(expected, test2)
        test3 = data_source['testFile.html']
        test3.pop('samples')
        self.assertEqual(expected, test3)
        self.assertRaises(FileNotFoundError, data_source.get, 'junk')
Example #10
0
    def __init__(self, channel, object_store_creator, host_file_system,
                 app_samples_file_system, base_path, compiled_fs_factory):
        self.channel = channel

        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.api_list_data_source_factory = APIListDataSource.Factory(
            self.compiled_host_fs_factory, 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.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(
            channel, 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)

        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.sidenav_data_source_factory = SidenavDataSource.Factory(
            self.compiled_host_fs_factory, svn_constants.JSON_PATH, base_path)

        self.template_data_source_factory = TemplateDataSource.Factory(
            channel, self.api_data_source_factory,
            self.api_list_data_source_factory, self.intro_data_source_factory,
            self.samples_data_source_factory, self.sidenav_data_source_factory,
            self.compiled_host_fs_factory, self.ref_resolver_factory,
            svn_constants.PUBLIC_TEMPLATE_PATH,
            svn_constants.PRIVATE_TEMPLATE_PATH, base_path)

        self.example_zipper = ExampleZipper(self.compiled_host_fs_factory,
                                            svn_constants.DOCS_PATH)

        self.path_canonicalizer = PathCanonicalizer(
            channel, self.compiled_host_fs_factory)

        self.content_cache = self.compiled_host_fs_factory.CreateIdentity(
            ServerInstance)
    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.availability_finder_factory = AvailabilityFinder.Factory(
            object_store_creator, self.compiled_host_fs_factory,
            branch_utility, host_file_system_creator)

        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_factory)

        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.sidenav_data_source_factory = SidenavDataSource.Factory(
            self.compiled_host_fs_factory, svn_constants.JSON_PATH)

        self.manifest_data_source = ManifestDataSource(
            self.compiled_host_fs_factory, host_file_system, '/'.join(
                (svn_constants.JSON_PATH, 'manifest.json')), '/'.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.sidenav_data_source_factory, self.compiled_host_fs_factory,
            self.ref_resolver_factory, self.manifest_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.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)
Example #12
0
 def testGet(self):
     api_ds = APIDataSource(self.server_instance, Request.ForTest('/'))
     jsc_view = api_ds.get('extensions').get('tester')
     funcs_arr = [{
         'availability':
         None,
         'callback': {
             'name':
             'callback',
             'optional':
             False,
             'parameters': [{
                 'array': {
                     'availability': None,
                     'description': None,
                     'events': [],
                     'functions': [],
                     'id': 'type-results-resultsType',
                     'is_object': False,
                     'link': {
                         'name': 'TypeA',
                         'ref': 'tester.TypeA',
                         'text': 'TypeA'
                     },
                     'name': 'resultsType',
                     'properties': []
                 },
                 'availability': None,
                 'description': None,
                 'functions': [],
                 'id': 'property-callback-results',
                 'is_object': False,
                 'last': True,
                 'name': 'results',
                 'optional': None,
                 'parameters': [],
                 'parentName': 'callback',
                 'properties': [],
                 'returns': None
             }],
             'simple_type': {
                 'simple_type': 'function'
             }
         },
         'description':
         'Gets stuff.',
         'id':
         'method-get',
         'name':
         'get',
         'parameters': [{
             'availability':
             None,
             'choices': [{
                 'availability': None,
                 'description': None,
                 'events': [],
                 'functions': [],
                 'id': 'type-a-string',
                 'is_object': False,
                 'name': 'string',
                 'properties': [],
                 'simple_type': 'string'
             }, {
                 'array': {
                     'availability': None,
                     'description': None,
                     'events': [],
                     'functions': [],
                     'id': 'type-strings-stringsType',
                     'is_object': False,
                     'name': 'stringsType',
                     'properties': [],
                     'simple_type': 'string'
                 },
                 'availability': None,
                 'description': None,
                 'events': [],
                 'functions': [],
                 'id': 'type-a-strings',
                 'is_object': False,
                 'last': True,
                 'name': 'strings',
                 'properties': []
             }],
             'description':
             'a param',
             'functions': [],
             'id':
             'property-get-a',
             'is_object':
             False,
             'name':
             'a',
             'optional':
             None,
             'parameters': [],
             'parentName':
             'get',
             'properties': [],
             'returns':
             None
         }, {
             'asFunction': {
                 'name':
                 'callback',
                 'optional':
                 False,
                 'parameters': [{
                     'array': {
                         'availability': None,
                         'description': None,
                         'events': [],
                         'functions': [],
                         'id': 'type-results-resultsType',
                         'is_object': False,
                         'link': {
                             'name': 'TypeA',
                             'ref': 'tester.TypeA',
                             'text': 'TypeA'
                         },
                         'name': 'resultsType',
                         'properties': []
                     },
                     'availability': None,
                     'description': None,
                     'functions': [],
                     'id': 'property-callback-results',
                     'is_object': False,
                     'last': True,
                     'name': 'results',
                     'optional': None,
                     'parameters': [],
                     'parentName': 'callback',
                     'properties': [],
                     'returns': None
                 }],
                 'simple_type': {
                     'simple_type': 'function'
                 }
             },
             'description': None,
             'id': 'property-get-callback',
             'isCallback': True,
             'last': True,
             'name': 'callback',
             'optional': False,
             'parentName': 'get',
             'simple_type': 'function'
         }],
         'returns':
         None
     }]
     self.assertEquals(funcs_arr, jsc_view['functions'])
     types_arr = [{
         'availability':
         None,
         'description':
         'A cool thing.',
         'events': [],
         'functions': [],
         'id':
         'type-TypeA',
         'is_object':
         True,
         'name':
         'TypeA',
         'properties': [{
             'array': {
                 'availability': None,
                 'description': None,
                 'events': [],
                 'functions': [],
                 'id': 'type-b-bType',
                 'is_object': False,
                 'link': {
                     'name': 'TypeA',
                     'ref': 'tester.TypeA',
                     'text': 'TypeA'
                 },
                 'name': 'bType',
                 'properties': []
             },
             'availability': None,
             'description': 'List of TypeA.',
             'functions': [],
             'id': 'property-TypeA-b',
             'is_object': False,
             'name': 'b',
             'optional': True,
             'parameters': [],
             'parentName': 'TypeA',
             'properties': [],
             'returns': None
         }],
         'simple_type':
         'object'
     }]
     self.assertEquals(types_arr, jsc_view['types'])
  def __init__(self,
               object_store_creator,
               compiled_fs_factory,
               branch_utility,
               host_file_system_provider,
               github_file_system_provider,
               gcs_file_system_provider,
               base_path='/'):
    '''
    |object_store_creator|
        The ObjectStoreCreator used to create almost all caches.
    |compiled_fs_factory|
        Factory used to create CompiledFileSystems, a higher-level cache type
        than ObjectStores. This can usually be derived from just
        |object_store_creator| but under special circumstances a different
        implementation needs to be passed in.
    |branch_utility|
        Has knowledge of Chrome branches, channels, and versions.
    |host_file_system_provider|
        Creates FileSystem instances which host the server at alternative
        revisions.
    |github_file_system_provider|
        Creates FileSystem instances backed by GitHub.
    |base_path|
        The path which all HTML is generated relative to. Usually this is /
        but some servlets need to override this.
    '''
    self.object_store_creator = object_store_creator

    self.compiled_fs_factory = compiled_fs_factory

    self.host_file_system_provider = host_file_system_provider
    host_fs_at_trunk = host_file_system_provider.GetTrunk()

    self.github_file_system_provider = github_file_system_provider
    self.gcs_file_system_provider = gcs_file_system_provider

    assert base_path.startswith('/') and base_path.endswith('/')
    self.base_path = base_path

    self.host_file_system_iterator = HostFileSystemIterator(
        host_file_system_provider,
        branch_utility)

    self.features_bundle = FeaturesBundle(
        host_fs_at_trunk,
        self.compiled_fs_factory,
        self.object_store_creator)

    self.api_models = APIModels(
        self.features_bundle,
        self.compiled_fs_factory,
        host_fs_at_trunk)

    self.availability_finder = AvailabilityFinder(
        branch_utility,
        compiled_fs_factory,
        self.host_file_system_iterator,
        host_fs_at_trunk,
        object_store_creator)

    self.api_categorizer = APICategorizer(
        host_fs_at_trunk,
        compiled_fs_factory)

    self.api_data_source_factory = APIDataSource.Factory(
        self.compiled_fs_factory,
        host_fs_at_trunk,
        self.availability_finder,
        self.api_models,
        self.features_bundle,
        self.object_store_creator)

    self.ref_resolver_factory = ReferenceResolver.Factory(
        self.api_data_source_factory,
        self.api_models,
        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()
      app_samples_fs = EmptyDirFileSystem()
    else:
      extension_samples_fs = host_fs_at_trunk
      # TODO(kalman): Re-enable the apps samples, see http://crbug.com/344097.
      app_samples_fs = EmptyDirFileSystem()
      #app_samples_fs = github_file_system_provider.Create(
      #    'GoogleChrome', 'chrome-app-samples')
    self.samples_data_source_factory = SamplesDataSource.Factory(
        extension_samples_fs,
        app_samples_fs,
        CompiledFileSystem.Factory(object_store_creator),
        self.ref_resolver_factory,
        base_path)

    self.api_data_source_factory.SetSamplesDataSourceFactory(
        self.samples_data_source_factory)

    self.content_providers = ContentProviders(
        object_store_creator,
        self.compiled_fs_factory,
        host_fs_at_trunk,
        self.github_file_system_provider,
        self.gcs_file_system_provider)

    # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry,
    # then factor out the DataSource creation into a factory method, so that
    # the entire ServerInstance doesn't need to be passed in here.
    self.template_renderer = TemplateRenderer(self)

    # TODO(kalman): It may be better for |document_renderer| to construct a
    # TemplateDataSource itself rather than depending on template_renderer, but
    # for that the above todo should be addressed.
    self.document_renderer = DocumentRenderer(
        TableOfContentsRenderer(host_fs_at_trunk,
                                compiled_fs_factory,
                                self.template_renderer),
        self.ref_resolver_factory.Create())
Example #14
0
    def __init__(self,
                 object_store_creator,
                 compiled_fs_factory,
                 branch_utility,
                 host_file_system_provider,
                 github_file_system_provider,
                 base_path='/'):
        '''
    |object_store_creator|
        The ObjectStoreCreator used to create almost all caches.
    |compiled_fs_factory|
        Factory used to create CompiledFileSystems, a higher-level cache type
        than ObjectStores. This can usually be derived from just
        |object_store_creator| but under special circumstances a different
        implementation needs to be passed in.
    |branch_utility|
        Has knowledge of Chrome branches, channels, and versions.
    |host_file_system_provider|
        Creates FileSystem instances which host the server at alternative
        revisions.
    |github_file_system_provider|
        Creates FileSystem instances backed by GitHub.
    |base_path|
        The path which all HTML is generated relative to. Usually this is /
        but some servlets need to override this.
    '''
        self.object_store_creator = object_store_creator

        self.compiled_fs_factory = compiled_fs_factory

        self.host_file_system_provider = host_file_system_provider
        host_fs_at_trunk = host_file_system_provider.GetTrunk()

        self.github_file_system_provider = github_file_system_provider

        assert base_path.startswith('/') and base_path.endswith('/')
        self.base_path = base_path

        self.host_file_system_iterator = HostFileSystemIterator(
            host_file_system_provider, branch_utility)

        self.features_bundle = FeaturesBundle(host_fs_at_trunk,
                                              self.compiled_fs_factory,
                                              self.object_store_creator)

        self.api_models = APIModels(self.features_bundle,
                                    self.compiled_fs_factory, host_fs_at_trunk)

        self.availability_finder = AvailabilityFinder(
            branch_utility, compiled_fs_factory,
            self.host_file_system_iterator, host_fs_at_trunk,
            object_store_creator)

        self.api_list_data_source_factory = APIListDataSource.Factory(
            self.compiled_fs_factory, host_fs_at_trunk, self.features_bundle,
            self.object_store_creator)

        self.api_data_source_factory = APIDataSource.Factory(
            self.compiled_fs_factory, host_fs_at_trunk, svn_constants.API_PATH,
            self.availability_finder, branch_utility)

        self.ref_resolver_factory = ReferenceResolver.Factory(
            self.api_data_source_factory, self.api_models,
            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()
            app_samples_fs = EmptyDirFileSystem()
        else:
            extension_samples_fs = host_fs_at_trunk
            app_samples_fs = github_file_system_provider.Create(
                'GoogleChrome', 'chrome-app-samples')
        self.samples_data_source_factory = SamplesDataSource.Factory(
            extension_samples_fs, app_samples_fs,
            CompiledFileSystem.Factory(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_fs_factory, host_fs_at_trunk,
            self.ref_resolver_factory,
            [svn_constants.INTRO_PATH, svn_constants.ARTICLE_PATH])

        self.path_canonicalizer = PathCanonicalizer(self.compiled_fs_factory,
                                                    host_fs_at_trunk)

        self.content_providers = ContentProviders(
            self.compiled_fs_factory, host_fs_at_trunk,
            self.github_file_system_provider)

        # TODO(kalman): Move all the remaining DataSources into DataSourceRegistry,
        # then factor out the DataSource creation into a factory method, so that
        # the entire ServerInstance doesn't need to be passed in here.
        self.template_renderer = TemplateRenderer(self)

        self.strings_json_path = svn_constants.STRINGS_JSON_PATH
        self.manifest_json_path = svn_constants.MANIFEST_JSON_PATH
        self.manifest_features_path = svn_constants.MANIFEST_FEATURES_PATH
Example #15
0
 def testGet(self):
     api_ds = APIDataSource(self.server_instance, Request.ForTest("/"))
     jsc_view = api_ds.get("extensions").get("tester")
     funcs_arr = [
         {
             "availability": None,
             "callback": {
                 "name": "callback",
                 "optional": False,
                 "parameters": [
                     {
                         "array": {
                             "availability": None,
                             "description": None,
                             "events": [],
                             "functions": [],
                             "id": "type-results-resultsType",
                             "is_object": False,
                             "link": {"name": "TypeA", "ref": "tester.TypeA", "text": "TypeA"},
                             "name": "resultsType",
                             "properties": [],
                         },
                         "availability": None,
                         "description": None,
                         "functions": [],
                         "id": "property-callback-results",
                         "is_object": False,
                         "last": True,
                         "name": "results",
                         "optional": None,
                         "parameters": [],
                         "parentName": "callback",
                         "properties": [],
                         "returns": None,
                     }
                 ],
                 "simple_type": {"simple_type": "function"},
             },
             "description": "Gets stuff.",
             "id": "method-get",
             "name": "get",
             "parameters": [
                 {
                     "availability": None,
                     "choices": [
                         {
                             "availability": None,
                             "description": None,
                             "events": [],
                             "functions": [],
                             "id": "type-a-string",
                             "is_object": False,
                             "name": "string",
                             "properties": [],
                             "simple_type": "string",
                         },
                         {
                             "array": {
                                 "availability": None,
                                 "description": None,
                                 "events": [],
                                 "functions": [],
                                 "id": "type-strings-stringsType",
                                 "is_object": False,
                                 "name": "stringsType",
                                 "properties": [],
                                 "simple_type": "string",
                             },
                             "availability": None,
                             "description": None,
                             "events": [],
                             "functions": [],
                             "id": "type-a-strings",
                             "is_object": False,
                             "last": True,
                             "name": "strings",
                             "properties": [],
                         },
                     ],
                     "description": "a param",
                     "functions": [],
                     "id": "property-get-a",
                     "is_object": False,
                     "name": "a",
                     "optional": None,
                     "parameters": [],
                     "parentName": "get",
                     "properties": [],
                     "returns": None,
                 },
                 {
                     "asFunction": {
                         "name": "callback",
                         "optional": False,
                         "parameters": [
                             {
                                 "array": {
                                     "availability": None,
                                     "description": None,
                                     "events": [],
                                     "functions": [],
                                     "id": "type-results-resultsType",
                                     "is_object": False,
                                     "link": {"name": "TypeA", "ref": "tester.TypeA", "text": "TypeA"},
                                     "name": "resultsType",
                                     "properties": [],
                                 },
                                 "availability": None,
                                 "description": None,
                                 "functions": [],
                                 "id": "property-callback-results",
                                 "is_object": False,
                                 "last": True,
                                 "name": "results",
                                 "optional": None,
                                 "parameters": [],
                                 "parentName": "callback",
                                 "properties": [],
                                 "returns": None,
                             }
                         ],
                         "simple_type": {"simple_type": "function"},
                     },
                     "description": None,
                     "id": "property-get-callback",
                     "isCallback": True,
                     "last": True,
                     "name": "callback",
                     "optional": False,
                     "parentName": "get",
                     "simple_type": "function",
                 },
             ],
             "returns": None,
         }
     ]
     self.assertEquals(funcs_arr, jsc_view["functions"])
     types_arr = [
         {
             "availability": None,
             "description": "A cool thing.",
             "events": [],
             "functions": [],
             "id": "type-TypeA",
             "is_object": True,
             "name": "TypeA",
             "properties": [
                 {
                     "array": {
                         "availability": None,
                         "description": None,
                         "events": [],
                         "functions": [],
                         "id": "type-b-bType",
                         "is_object": False,
                         "link": {"name": "TypeA", "ref": "tester.TypeA", "text": "TypeA"},
                         "name": "bType",
                         "properties": [],
                     },
                     "availability": None,
                     "description": "List of TypeA.",
                     "functions": [],
                     "id": "property-TypeA-b",
                     "is_object": False,
                     "name": "b",
                     "optional": True,
                     "parameters": [],
                     "parentName": "TypeA",
                     "properties": [],
                     "returns": None,
                 }
             ],
             "simple_type": "object",
         }
     ]
     self.assertEquals(types_arr, jsc_view["types"])
 def testGet(self):
   api_ds = APIDataSource(self.server_instance, Request.ForTest('/'))
   jsc_view = api_ds.get('extensions').get('tester')
   funcs_arr = [{
     'availability': None,
     'callback': {
       'name': 'callback',
       'optional': False,
       'parameters': [{
         'array': {
           'availability': None,
           'description': None,
           'events': [],
           'functions': [],
           'id': 'type-results-resultsType',
           'is_object': False,
           'link': {
             'name': 'TypeA',
             'ref': 'tester.TypeA',
             'text': 'TypeA'
           },
           'name': 'resultsType',
           'properties': []
         },
         'availability': None,
         'description': None,
         'functions': [],
         'id': 'property-callback-results',
         'is_object': False,
         'last': True,
         'name': 'results',
         'optional': None,
         'parameters': [],
         'parentName': 'callback',
         'properties': [],
         'returns': None
       }],
       'simple_type': {
         'simple_type': 'function'
       }
     },
     'description': 'Gets stuff.',
     'id': 'method-get',
     'name': 'get',
     'parameters': [{
       'availability': None,
       'choices': [{
         'availability': None,
         'description': None,
         'events': [],
         'functions': [],
         'id': 'type-a-string',
         'is_object': False,
         'name': 'string',
         'properties': [],
         'simple_type': 'string'
       },
       {
         'array': {
           'availability': None,
           'description': None,
           'events': [],
           'functions': [],
           'id': 'type-strings-stringsType',
           'is_object': False,
           'name': 'stringsType',
           'properties': [],
           'simple_type': 'string'
         },
         'availability': None,
         'description': None,
         'events': [],
         'functions': [],
         'id': 'type-a-strings',
         'is_object': False,
         'last': True,
         'name': 'strings',
         'properties': []
       }],
       'description': 'a param',
       'functions': [],
       'id': 'property-get-a',
       'is_object': False,
       'name': 'a',
       'optional': None,
       'parameters': [],
       'parentName': 'get',
       'properties': [],
       'returns': None
     },
     {
       'asFunction': {
         'name': 'callback',
         'optional': False,
         'parameters': [{
           'array': {
             'availability': None,
             'description': None,
             'events': [],
             'functions': [],
             'id': 'type-results-resultsType',
             'is_object': False,
             'link': {
               'name': 'TypeA',
               'ref': 'tester.TypeA',
               'text': 'TypeA'
             },
             'name': 'resultsType',
             'properties': []
           },
           'availability': None,
           'description': None,
           'functions': [],
           'id': 'property-callback-results',
           'is_object': False,
           'last': True,
           'name': 'results',
           'optional': None,
           'parameters': [],
           'parentName': 'callback',
           'properties': [],
           'returns': None
         }],
         'simple_type': {
           'simple_type': 'function'
         }
       },
       'description': None,
       'id': 'property-get-callback',
       'isCallback': True,
       'last': True,
       'name': 'callback',
       'optional': False,
       'parentName': 'get',
       'simple_type': 'function'
     }],
     'returns': None
   }]
   self.assertEquals(funcs_arr, jsc_view['functions'])
   types_arr = [{
     'availability': None,
     'description': 'A cool thing.',
     'events': [],
     'functions': [],
     'id': 'type-TypeA',
     'is_object': True,
     'name': 'TypeA',
     'properties': [{
       'array': {
         'availability': None,
         'description': None,
         'events': [],
         'functions': [],
         'id': 'type-b-bType',
         'is_object': False,
         'link': {
           'name': 'TypeA',
           'ref': 'tester.TypeA',
           'text': 'TypeA'
         },
         'name': 'bType',
         'properties': []
       },
       'availability': None,
       'description': 'List of TypeA.',
       'functions': [],
       'id': 'property-TypeA-b',
       'is_object': False,
       'name': 'b',
       'optional': True,
       'parameters': [],
       'parentName': 'TypeA',
       'properties': [],
       'returns': None
     }],
     'simple_type': 'object'
   }]
   self.assertEquals(types_arr, jsc_view['types'])