| Index: chrome/common/extensions/docs/server2/api_data_source.py
|
| diff --git a/chrome/common/extensions/docs/server2/api_data_source.py b/chrome/common/extensions/docs/server2/api_data_source.py
|
| index 8ed0daa302fa7a1fc3266541b1a320d47b9a8365..743bb08765adbc940fbaa147332627a898abdc86 100644
|
| --- a/chrome/common/extensions/docs/server2/api_data_source.py
|
| +++ b/chrome/common/extensions/docs/server2/api_data_source.py
|
| @@ -7,8 +7,11 @@ import logging
|
| import os
|
| import posixpath
|
|
|
| +from data_source import DataSource
|
| from environment import IsPreviewServer
|
| from extensions_paths import JSON_TEMPLATES, PRIVATE_TEMPLATES
|
| +from file_system import FileNotFoundError
|
| +from future import Future, Collect
|
| import third_party.json_schema_compiler.json_parse as json_parse
|
| import third_party.json_schema_compiler.model as model
|
| from environment import IsPreviewServer
|
| @@ -68,13 +71,11 @@ class _JSCModel(object):
|
| def __init__(self,
|
| api_name,
|
| api_models,
|
| - disable_refs,
|
| availability_finder,
|
| json_cache,
|
| template_cache,
|
| features_bundle,
|
| event_byname_function):
|
| - self._disable_refs = disable_refs
|
| self._availability_finder = availability_finder
|
| self._api_availabilities = json_cache.GetFromFile(
|
| posixpath.join(JSON_TEMPLATES, 'api_availabilities.json'))
|
| @@ -105,16 +106,12 @@ class _JSCModel(object):
|
| 'events': self._GenerateEvents(self._namespace.events),
|
| 'domEvents': self._GenerateDomEvents(self._namespace.events),
|
| 'properties': self._GenerateProperties(self._namespace.properties),
|
| + 'introList': self._GetIntroTableList(),
|
| + 'channelWarning': self._GetChannelWarning(),
|
| }
|
| if self._namespace.deprecated:
|
| as_dict['deprecated'] = self._namespace.deprecated
|
| - # Rendering the intro list is really expensive and there's no point doing it
|
| - # unless we're rending the page - and disable_refs=True implies we're not.
|
| - if not self._disable_refs:
|
| - as_dict.update({
|
| - 'introList': self._GetIntroTableList(),
|
| - 'channelWarning': self._GetChannelWarning(),
|
| - })
|
| +
|
| as_dict['byName'] = _GetByNameDict(as_dict)
|
| return as_dict
|
|
|
| @@ -193,9 +190,7 @@ class _JSCModel(object):
|
| }
|
| self._AddCommonProperties(event_dict, event)
|
| # Add the Event members to each event in this object.
|
| - # If refs are disabled then don't worry about this, since it's only needed
|
| - # for rendering, and disable_refs=True implies we're not rendering.
|
| - if self._event_byname_function and not self._disable_refs:
|
| + if self._event_byname_function:
|
| event_dict['byName'].update(self._event_byname_function())
|
| # We need to create the method description for addListener based on the
|
| # information stored in |event|.
|
| @@ -468,87 +463,51 @@ class _LazySamplesGetter(object):
|
| return self._samples.FilterSamples(key, self._api_name)
|
|
|
|
|
| -class APIDataSource(object):
|
| +class APIDataSource(DataSource):
|
| '''This class fetches and loads JSON APIs from the FileSystem passed in with
|
| |compiled_fs_factory|, so the APIs can be plugged into templates.
|
| '''
|
| -
|
| - class Factory(object):
|
| - def __init__(self,
|
| - compiled_fs_factory,
|
| - file_system,
|
| - availability_finder,
|
| - api_models,
|
| - features_bundle,
|
| - object_store_creator):
|
| - self._json_cache = compiled_fs_factory.ForJson(file_system)
|
| - self._template_cache = compiled_fs_factory.ForTemplates(file_system)
|
| - self._availability_finder = availability_finder
|
| - self._api_models = api_models
|
| - self._features_bundle = features_bundle
|
| - self._model_cache_refs = object_store_creator.Create(
|
| - APIDataSource, 'model-cache-refs')
|
| - self._model_cache_no_refs = object_store_creator.Create(
|
| - APIDataSource, 'model-cache-no-refs')
|
| -
|
| - # These must be set later via the SetFooDataSourceFactory methods.
|
| - self._samples_data_source_factory = None
|
| -
|
| - # This caches the result of _LoadEventByName.
|
| - self._event_byname = None
|
| -
|
| - def SetSamplesDataSourceFactory(self, samples_data_source_factory):
|
| - self._samples_data_source_factory = samples_data_source_factory
|
| -
|
| - def Create(self, request):
|
| - '''Creates an APIDataSource.
|
| - '''
|
| - if self._samples_data_source_factory is None:
|
| - # Only error if there is a request, which means this APIDataSource is
|
| - # actually being used to render a page.
|
| - if request is not None:
|
| - logging.error('SamplesDataSource.Factory was never set in '
|
| - 'APIDataSource.Factory.')
|
| - samples = None
|
| - else:
|
| - samples = self._samples_data_source_factory.Create(request)
|
| - return APIDataSource(self._GetSchemaModel, samples)
|
| -
|
| - def _LoadEventByName(self):
|
| - '''All events have some members in common. We source their description
|
| - from Event in events.json.
|
| - '''
|
| - if self._event_byname is None:
|
| - self._event_byname = _GetEventByNameFromEvents(
|
| - self._GetSchemaModel('events', True))
|
| - return self._event_byname
|
| -
|
| - def _GetModelCache(self, disable_refs):
|
| - if disable_refs:
|
| - return self._model_cache_no_refs
|
| - return self._model_cache_refs
|
| -
|
| - def _GetSchemaModel(self, api_name, disable_refs):
|
| - jsc_model = self._GetModelCache(disable_refs).Get(api_name).Get()
|
| - if jsc_model is not None:
|
| - return jsc_model
|
| -
|
| - jsc_model = _JSCModel(
|
| - api_name,
|
| - self._api_models,
|
| - disable_refs,
|
| - self._availability_finder,
|
| - self._json_cache,
|
| - self._template_cache,
|
| - self._features_bundle,
|
| - self._LoadEventByName).ToDict()
|
| -
|
| - self._GetModelCache(disable_refs).Set(api_name, jsc_model)
|
| + def __init__(self, server_instance, request):
|
| + file_system = server_instance.host_file_system_provider.GetTrunk()
|
| + self._json_cache = server_instance.compiled_fs_factory.ForJson(file_system)
|
| + self._template_cache = server_instance.compiled_fs_factory.ForTemplates(
|
| + file_system)
|
| + self._availability_finder = server_instance.availability_finder
|
| + self._api_models = server_instance.api_models
|
| + self._features_bundle = server_instance.features_bundle
|
| + self._model_cache = server_instance.object_store_creator.Create(
|
| + APIDataSource)
|
| +
|
| + # This caches the result of _LoadEventByName.
|
| + self._event_byname = None
|
| + self._samples = server_instance.samples_data_source_factory.Create(request)
|
| +
|
| + def _LoadEventByName(self):
|
| + '''All events have some members in common. We source their description
|
| + from Event in events.json.
|
| + '''
|
| + if self._event_byname is None:
|
| + self._event_byname = _GetEventByNameFromEvents(
|
| + self._GetSchemaModel('events'))
|
| + return self._event_byname
|
| +
|
| + def _GetSchemaModel(self, api_name):
|
| + jsc_model = self._model_cache.Get(api_name).Get()
|
| + if jsc_model is not None:
|
| return jsc_model
|
|
|
| - def __init__(self, get_schema_model, samples):
|
| - self._get_schema_model = get_schema_model
|
| - self._samples = samples
|
| + jsc_model = _JSCModel(
|
| + api_name,
|
| + self._api_models,
|
| + self._availability_finder,
|
| + self._json_cache,
|
| + self._template_cache,
|
| + self._features_bundle,
|
| + self._LoadEventByName).ToDict()
|
| +
|
| + self._model_cache.Set(api_name, jsc_model)
|
| + return jsc_model
|
| +
|
|
|
| def _GenerateHandlebarContext(self, handlebar_dict):
|
| # Parsing samples on the preview server takes seconds and doesn't add
|
| @@ -559,6 +518,8 @@ class APIDataSource(object):
|
| self._samples)
|
| return handlebar_dict
|
|
|
| - def get(self, api_name, disable_refs=False):
|
| - return self._GenerateHandlebarContext(
|
| - self._get_schema_model(api_name, disable_refs))
|
| + def get(self, api_name):
|
| + return self._GenerateHandlebarContext(self._GetSchemaModel(api_name))
|
| +
|
| + def Cron(self):
|
| + return Future(value=())
|
|
|