diff options
author | ahernandez.miralles@gmail.com <ahernandez.miralles@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-29 00:11:57 +0000 |
---|---|---|
committer | ahernandez.miralles@gmail.com <ahernandez.miralles@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-03-29 00:11:57 +0000 |
commit | 21ffc56f7c207883d828d54298cc1b42dfa0db14 (patch) | |
tree | e66f45c5aa91be9d4362be5670b189ed3c0895b3 /chrome | |
parent | ddf24c1e52a728099b4e3c220ba82bad331ed6b2 (diff) | |
download | chromium_src-21ffc56f7c207883d828d54298cc1b42dfa0db14.zip chromium_src-21ffc56f7c207883d828d54298cc1b42dfa0db14.tar.gz chromium_src-21ffc56f7c207883d828d54298cc1b42dfa0db14.tar.bz2 |
Remove ReferenceResolver dependency in APIDataSource.
This is the first step towards moving APIDataSource to DataSourceRegistry
BUG=275039
NOTRY=true
Review URL: https://codereview.chromium.org/216943006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@260316 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
9 files changed, 37 insertions, 93 deletions
diff --git a/chrome/common/extensions/docs/server2/api_data_source.py b/chrome/common/extensions/docs/server2/api_data_source.py index ebb0c24..04a6eac 100644 --- a/chrome/common/extensions/docs/server2/api_data_source.py +++ b/chrome/common/extensions/docs/server2/api_data_source.py @@ -68,14 +68,12 @@ class _JSCModel(object): def __init__(self, api_name, api_models, - ref_resolver, disable_refs, availability_finder, json_cache, template_cache, features_bundle, event_byname_function): - self._ref_resolver = ref_resolver self._disable_refs = disable_refs self._availability_finder = availability_finder self._api_availabilities = json_cache.GetFromFile( @@ -87,17 +85,9 @@ class _JSCModel(object): self._event_byname_function = event_byname_function self._namespace = api_models.GetModel(api_name).Get() - def _FormatDescription(self, description): - if self._disable_refs: - return description - return self._ref_resolver.ResolveAllLinks(description, - namespace=self._namespace.name) - def _GetLink(self, link): - if self._disable_refs: - type_name = link.split('.', 1)[-1] - return { 'href': '#type-%s' % type_name, 'text': link, 'name': link } - return self._ref_resolver.SafeGetLink(link, namespace=self._namespace.name) + ref = link if '.' in link else (self._namespace.name + '.' + link) + return { 'ref': ref, 'text': link, 'name': link } def ToDict(self): if self._namespace is None: @@ -145,7 +135,7 @@ class _JSCModel(object): def _GenerateType(self, type_): type_dict = { 'name': type_.simple_name, - 'description': self._FormatDescription(type_.description), + 'description': type_.description, 'properties': self._GenerateProperties(type_.properties), 'functions': self._GenerateFunctions(type_.functions), 'events': self._GenerateEvents(type_.events), @@ -160,7 +150,7 @@ class _JSCModel(object): def _GenerateFunction(self, function): function_dict = { 'name': function.simple_name, - 'description': self._FormatDescription(function.description), + 'description': function.description, 'callback': self._GenerateCallback(function.callback), 'parameters': [], 'returns': None, @@ -190,7 +180,7 @@ class _JSCModel(object): def _GenerateEvent(self, event): event_dict = { 'name': event.simple_name, - 'description': self._FormatDescription(event.description), + 'description': event.description, 'filters': [self._GenerateProperty(f) for f in event.filters], 'conditions': [self._GetLink(condition) for condition in event.conditions], @@ -267,7 +257,7 @@ class _JSCModel(object): property_dict = { 'name': property_.simple_name, 'optional': property_.optional, - 'description': self._FormatDescription(property_.description), + 'description': property_.description, 'properties': self._GenerateProperties(type_.properties), 'functions': self._GenerateFunctions(type_.functions), 'parameters': [], @@ -297,7 +287,7 @@ class _JSCModel(object): def _GenerateCallbackProperty(self, callback): property_dict = { 'name': callback.simple_name, - 'description': self._FormatDescription(callback.description), + 'description': callback.description, 'optional': callback.optional, 'is_callback': True, 'id': _CreateId(callback, 'property'), @@ -357,7 +347,7 @@ class _JSCModel(object): return { 'title': 'Description', 'content': [ - { 'text': self._FormatDescription(self._namespace.description) } + { 'text': self._namespace.description } ] } @@ -455,8 +445,7 @@ class _JSCModel(object): def _AddCommonProperties(self, target, src): if src.deprecated is not None: - target['deprecated'] = self._FormatDescription( - src.deprecated) + target['deprecated'] = src.deprecated if (src.parent is not None and not isinstance(src.parent, model.Namespace)): target['parentName'] = src.parent.simple_name @@ -499,7 +488,6 @@ class APIDataSource(object): APIDataSource, 'model-cache-no-refs') # These must be set later via the SetFooDataSourceFactory methods. - self._ref_resolver_factory = None self._samples_data_source_factory = None # This caches the result of _LoadEventByName. @@ -508,9 +496,6 @@ class APIDataSource(object): def SetSamplesDataSourceFactory(self, samples_data_source_factory): self._samples_data_source_factory = samples_data_source_factory - def SetReferenceResolverFactory(self, ref_resolver_factory): - self._ref_resolver_factory = ref_resolver_factory - def Create(self, request): '''Creates an APIDataSource. ''' @@ -547,7 +532,6 @@ class APIDataSource(object): jsc_model = _JSCModel( api_name, self._api_models, - self._ref_resolver_factory.Create() if not disable_refs else None, disable_refs, self._availability_finder, self._json_cache, diff --git a/chrome/common/extensions/docs/server2/api_data_source_test.py b/chrome/common/extensions/docs/server2/api_data_source_test.py index 73c08b4..9d0a537 100755 --- a/chrome/common/extensions/docs/server2/api_data_source_test.py +++ b/chrome/common/extensions/docs/server2/api_data_source_test.py @@ -18,7 +18,6 @@ from features_bundle import FeaturesBundle from file_system import FileNotFoundError from future import Future from object_store_creator import ObjectStoreCreator -from reference_resolver import ReferenceResolver from server_instance import ServerInstance from test_data.canned_data import (CANNED_API_FILE_SYSTEM_DATA, CANNED_BRANCHES) from test_data.api_data_source.canned_trunk_fs import CANNED_TRUNK_FS_DATA @@ -115,19 +114,12 @@ class APIDataSourceTest(unittest.TestCase): with open(os.path.join(self._base_path, filename), 'r') as f: return f.read() - def _CreateRefResolver(self, filename): - test_data = self._LoadJSON(filename) - return ReferenceResolver.Factory(_FakeAPIDataSource(test_data), - _FakeAPIModels(test_data), - ObjectStoreCreator.ForTest()).Create() - def _LoadJSON(self, filename): return json.loads(self._ReadLocalFile(filename)) def testCreateId(self): dict_ = _JSCModel('tester', self._api_models, - self._CreateRefResolver('test_file_data_source.json'), False, _FakeAvailabilityFinder(), self._json_cache, @@ -146,7 +138,6 @@ class APIDataSourceTest(unittest.TestCase): dict_ = _JSCModel('tester', self._api_models, False, - self._CreateRefResolver('test_file_data_source.json'), _FakeAvailabilityFinder(), self._json_cache, _FakeTemplateCache(), @@ -159,28 +150,6 @@ class APIDataSourceTest(unittest.TestCase): self.assertEquals('67', _FormatValue(67)) self.assertEquals('234,567', _FormatValue(234567)) - def testFormatDescription(self): - dict_ = _JSCModel('ref_test', - self._api_models, - self._CreateRefResolver('ref_test_data_source.json'), - False, - _FakeAvailabilityFinder(), - self._json_cache, - _FakeTemplateCache(), - self._features_bundle, - None).ToDict() - self.assertEquals(_MakeLink('ref_test#type-type2', 'type2'), - _GetType(dict_, 'type1')['description']) - self.assertEquals( - 'A %s, or %s' % (_MakeLink('ref_test#type-type3', 'type3'), - _MakeLink('ref_test#type-type2', 'type2')), - _GetType(dict_, 'type2')['description']) - self.assertEquals( - '%s != %s' % (_MakeLink('other#type-type2', 'other.type2'), - _MakeLink('ref_test#type-type2', 'type2')), - _GetType(dict_, 'type3')['description']) - - def testGetApiAvailability(self): api_availabilities = { 'bluetooth': ChannelInfo('dev', CANNED_BRANCHES[28], 28), @@ -193,7 +162,6 @@ class APIDataSourceTest(unittest.TestCase): for api_name, availability in api_availabilities.iteritems(): model = _JSCModel(api_name, self._avail_api_models, - None, True, self._avail_finder, self._avail_json_cache, @@ -205,7 +173,6 @@ class APIDataSourceTest(unittest.TestCase): def testGetIntroList(self): model = _JSCModel('tester', self._api_models, - self._CreateRefResolver('test_file_data_source.json'), False, _FakeAvailabilityFinder(), self._json_cache, @@ -278,7 +245,6 @@ class APIDataSourceTest(unittest.TestCase): def testAddRules(self): dict_ = _JSCModel('add_rules_tester', self._api_models, - self._CreateRefResolver('test_file_data_source.json'), False, _FakeAvailabilityFinder(), self._json_cache, diff --git a/chrome/common/extensions/docs/server2/cron_servlet_test.py b/chrome/common/extensions/docs/server2/cron_servlet_test.py index 303f548..0847c56 100755 --- a/chrome/common/extensions/docs/server2/cron_servlet_test.py +++ b/chrome/common/extensions/docs/server2/cron_servlet_test.py @@ -109,6 +109,12 @@ class CronServletTest(unittest.TestCase): 'static.txt': 'static.txt contents' }, 'templates': { + 'articles': { + 'activeTab.html': 'activeTab.html contents' + }, + 'intros': { + 'browserAction.html': 'activeTab.html contents' + }, 'private': { 'table_of_contents.html': 'table_of_contents.html contents', }, diff --git a/chrome/common/extensions/docs/server2/document_renderer.py b/chrome/common/extensions/docs/server2/document_renderer.py index e6c63db..e254908 100644 --- a/chrome/common/extensions/docs/server2/document_renderer.py +++ b/chrome/common/extensions/docs/server2/document_renderer.py @@ -30,7 +30,7 @@ class DocumentRenderer(object): ''' START_REF = '$(ref:' END_REF = ')' - MAX_REF_LENGTH = 100 + MAX_REF_LENGTH = 256 new_document = [] diff --git a/chrome/common/extensions/docs/server2/document_renderer_test.py b/chrome/common/extensions/docs/server2/document_renderer_test.py index 757f472..0c5862f 100755 --- a/chrome/common/extensions/docs/server2/document_renderer_test.py +++ b/chrome/common/extensions/docs/server2/document_renderer_test.py @@ -116,14 +116,20 @@ class DocumentRendererUnittest(unittest.TestCase): self.assertEqual(['Expected a title'], warnings) def testInvalidRef(self): - # There needs to be more than 100 characters between the invalid ref - # and the next ref - document = ('An invalid $(ref:foo.foo_t3 a title with some long ' - 'text containing a valid reference pointing to ' + # DocumentRenderer attempts to detect unclosed $(ref:...) tags by limiting + # how far it looks ahead. Lorem Ipsum should be long enough to trigger that. + _LOREM_IPSUM = ( + 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do ' + 'eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ' + 'ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut ' + 'aliquip ex ea commodo consequat. Duis aute irure dolor in ' + 'reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla ' + 'pariatur. Excepteur sint occaecat cupidatat non proident, sunt in ' + 'culpa qui officia deserunt mollit anim id est laborum.') + document = ('An invalid $(ref:foo.foo_t3 a title ' + _LOREM_IPSUM + '$(ref:baz.baz_e1) here') - expected_document = ('An invalid $(ref:foo.foo_t3 a title with some long ' - 'text containing a valid reference pointing to <a' - ' href=#type-baz_e1>baz.baz_e1</a> here') + expected_document = ('An invalid $(ref:foo.foo_t3 a title ' + _LOREM_IPSUM + + '<a href=#type-baz_e1>baz.baz_e1</a> here') path = 'some/path/to/document_api.html' text, warnings = self._renderer.Render(document, path) diff --git a/chrome/common/extensions/docs/server2/reference_resolver.py b/chrome/common/extensions/docs/server2/reference_resolver.py index 0f1cb2a..32d2eea 100644 --- a/chrome/common/extensions/docs/server2/reference_resolver.py +++ b/chrome/common/extensions/docs/server2/reference_resolver.py @@ -60,21 +60,6 @@ class ReferenceResolver(object): # Matches after a $ref: that doesn't have []s. _bare_ref = re.compile('\w+(\.\w+)*') - class Factory(object): - def __init__(self, - api_data_source_factory, - api_models, - object_store_creator): - self._api_data_source_factory = api_data_source_factory - self._api_models = api_models - self._object_store_creator = object_store_creator - - def Create(self): - return ReferenceResolver( - self._api_data_source_factory.Create(None), - self._api_models, - self._object_store_creator.Create(ReferenceResolver)) - def __init__(self, api_data_source, api_models, object_store): self._api_data_source = api_data_source self._api_models = api_models diff --git a/chrome/common/extensions/docs/server2/samples_data_source.py b/chrome/common/extensions/docs/server2/samples_data_source.py index 591993f..203f2c5 100644 --- a/chrome/common/extensions/docs/server2/samples_data_source.py +++ b/chrome/common/extensions/docs/server2/samples_data_source.py @@ -27,11 +27,11 @@ class SamplesDataSource(object): host_file_system, app_samples_file_system, compiled_fs_factory, - ref_resolver_factory, + ref_resolver, base_path): self._host_file_system = host_file_system self._app_samples_file_system = app_samples_file_system - self._ref_resolver = ref_resolver_factory.Create() + self._ref_resolver = ref_resolver self._base_path = base_path self._extensions_cache = compiled_fs_factory.Create( host_file_system, diff --git a/chrome/common/extensions/docs/server2/server_instance.py b/chrome/common/extensions/docs/server2/server_instance.py index 7894f77..95cb56b 100644 --- a/chrome/common/extensions/docs/server2/server_instance.py +++ b/chrome/common/extensions/docs/server2/server_instance.py @@ -101,13 +101,10 @@ class ServerInstance(object): self.features_bundle, self.object_store_creator) - self.ref_resolver_factory = ReferenceResolver.Factory( - self.api_data_source_factory, + self.ref_resolver = ReferenceResolver( + self.api_data_source_factory.Create(None), self.api_models, - object_store_creator) - - self.api_data_source_factory.SetReferenceResolverFactory( - self.ref_resolver_factory) + self.object_store_creator.Create(ReferenceResolver)) # Note: samples are super slow in the dev server because it doesn't support # async fetch, so disable them. @@ -124,7 +121,7 @@ class ServerInstance(object): extension_samples_fs, app_samples_fs, CompiledFileSystem.Factory(object_store_creator), - self.ref_resolver_factory, + self.ref_resolver, base_path) self.api_data_source_factory.SetSamplesDataSourceFactory( @@ -149,7 +146,7 @@ class ServerInstance(object): TableOfContentsRenderer(host_fs_at_trunk, compiled_fs_factory, self.template_renderer), - self.ref_resolver_factory.Create()) + self.ref_resolver) @staticmethod def ForTest(file_system=None, file_system_provider=None, base_path='/'): diff --git a/chrome/common/extensions/docs/templates/private/ref_link.html b/chrome/common/extensions/docs/templates/private/ref_link.html index 98408be..bd3817f 100644 --- a/chrome/common/extensions/docs/templates/private/ref_link.html +++ b/chrome/common/extensions/docs/templates/private/ref_link.html @@ -1 +1 @@ -<a href="{{link.href}}">{{link.text}}</a> +$(ref:{{link.ref}} {{link.text}}) |