diff options
Diffstat (limited to 'chrome/common/extensions/docs/server2/reference_resolver.py')
-rw-r--r-- | chrome/common/extensions/docs/server2/reference_resolver.py | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/chrome/common/extensions/docs/server2/reference_resolver.py b/chrome/common/extensions/docs/server2/reference_resolver.py index fe06eeb..7ffb034 100644 --- a/chrome/common/extensions/docs/server2/reference_resolver.py +++ b/chrome/common/extensions/docs/server2/reference_resolver.py @@ -7,9 +7,10 @@ import logging import re from file_system import FileNotFoundError +from third_party.json_schema_compiler.model import PropertyType -def _ClassifySchemaNode(node_name, api): +def _ClassifySchemaNode(node_name, node): """Attempt to classify |node_name| in an API, determining whether |node_name| refers to a type, function, event, or property in |api|. """ @@ -21,8 +22,8 @@ def _ClassifySchemaNode(node_name, api): ('functions', 'method'), ('events', 'event'), ('properties', 'property')]: - for item in api.get(key, []): - if item['name'] == node_name: + for item in getattr(node, key, {}).itervalues(): + if item.simple_name == node_name: if rest is not None: ret = _ClassifySchemaNode(rest, item) if ret is not None: @@ -60,8 +61,7 @@ class ReferenceResolver(object): # Matches after a $ref: that doesn't have []s. _bare_ref = re.compile('\w+(\.\w+)*') - def __init__(self, api_data_source, api_models, object_store): - self._api_data_source = api_data_source + def __init__(self, api_models, object_store): self._api_models = api_models self._object_store = object_store @@ -73,24 +73,24 @@ class ReferenceResolver(object): if api_name not in api_list: continue try: - api = self._api_data_source.get(api_name, disable_refs=True) + api_model = self._api_models.GetModel(api_name).Get() except FileNotFoundError: continue name = '.'.join(parts[i:]) # Attempt to find |name| in the API. - node_info = _ClassifySchemaNode(name, api) + node_info = _ClassifySchemaNode(name, api_model) if node_info is None: # Check to see if this ref is a property. If it is, we want the ref to # the underlying type the property is referencing. - for prop in api.get('properties', []): + for prop in api_model.properties.itervalues(): # If the name of this property is in the ref text, replace the # property with its type, and attempt to classify it. - if prop['name'] in name and 'link' in prop: - name_as_prop_type = name.replace(prop['name'], prop['link']['name']) - node_info = _ClassifySchemaNode(name_as_prop_type, api) + if prop.name in name and prop.type_.property_type == PropertyType.REF: + name_as_prop_type = name.replace(prop.name, prop.type_.ref_type) + node_info = _ClassifySchemaNode(name_as_prop_type, api_model) if node_info is not None: name = name_as_prop_type - text = ref.replace(prop['name'], prop['link']['name']) + text = ref.replace(prop.name, prop.type_.ref_type) break if node_info is None: continue |