summaryrefslogtreecommitdiffstats
path: root/tools/json_schema_compiler
diff options
context:
space:
mode:
authorcduvall@chromium.org <cduvall@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-05 01:58:47 +0000
committercduvall@chromium.org <cduvall@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-10-05 01:58:47 +0000
commit0b255f0081c4be8323946fa21e3b746724a8301f (patch)
treeb7bcba00a623e5ea76fd7c1eb0b5642ffce6afda /tools/json_schema_compiler
parentec20739532a9f77c21fa7738db6178d976bf1eea (diff)
downloadchromium_src-0b255f0081c4be8323946fa21e3b746724a8301f.zip
chromium_src-0b255f0081c4be8323946fa21e3b746724a8301f.tar.gz
chromium_src-0b255f0081c4be8323946fa21e3b746724a8301f.tar.bz2
Extensions Docs Server: Server code for showing properties of properties
This is a separate patch with just the server code for showing properties of properties. HandlebarDictGenerator now generates IDs for all API items, which are used in the table of contents. Template changes are here: https://codereview.chromium.org/10985071/ BUG=151866 Review URL: https://codereview.chromium.org/11018003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@160300 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/json_schema_compiler')
-rw-r--r--tools/json_schema_compiler/model.py99
1 files changed, 70 insertions, 29 deletions
diff --git a/tools/json_schema_compiler/model.py b/tools/json_schema_compiler/model.py
index 38a70ac..9e29726 100644
--- a/tools/json_schema_compiler/model.py
+++ b/tools/json_schema_compiler/model.py
@@ -51,10 +51,10 @@ class Namespace(object):
self.source_file = source_file
self.source_file_dir, self.source_file_filename = os.path.split(source_file)
self.parent = None
- _AddTypes(self, json)
- _AddFunctions(self, json)
- _AddEvents(self, json)
- _AddProperties(self, json)
+ _AddTypes(self, json, self)
+ _AddFunctions(self, json, self)
+ _AddEvents(self, json, self)
+ _AddProperties(self, json, self)
class Type(object):
"""A Type defined in the json.
@@ -72,11 +72,15 @@ class Type(object):
parameters
- |type_| the PropertyType of this Type
- |item_type| if this is an array, the type of items in the array
+ - |simple_name| the name of this Type without a namespace
"""
- def __init__(self, parent, name, json):
+ def __init__(self, parent, name, json, namespace):
if json.get('type') == 'array':
self.type_ = PropertyType.ARRAY
- self.item_type = Property(self, name + "Element", json['items'],
+ self.item_type = Property(self,
+ name + "Element",
+ json['items'],
+ namespace,
from_json=True,
from_client=True)
elif 'enum' in json:
@@ -95,15 +99,16 @@ class Type(object):
raise ParseException(self, name + " has no properties or functions")
self.type_ = PropertyType.OBJECT
self.name = name
+ self.simple_name = _StripNamespace(self.name, namespace)
self.unix_name = UnixName(self.name)
self.description = json.get('description')
self.from_json = True
self.from_client = True
self.parent = parent
self.instance_of = json.get('isInstanceOf', None)
- _AddFunctions(self, json)
- _AddEvents(self, json)
- _AddProperties(self, json, from_json=True, from_client=True)
+ _AddFunctions(self, json, namespace)
+ _AddEvents(self, json, namespace)
+ _AddProperties(self, json, namespace, from_json=True, from_client=True)
additional_properties_key = 'additionalProperties'
additional_properties = json.get(additional_properties_key)
@@ -112,6 +117,7 @@ class Type(object):
self,
additional_properties_key,
additional_properties,
+ namespace,
is_additional_properties=True)
class Function(object):
@@ -126,9 +132,16 @@ class Function(object):
one
- |optional| whether the Function is "optional"; this only makes sense to be
present when the Function is representing a callback property.
+ - |simple_name| the name of this Function without a namespace
"""
- def __init__(self, parent, json, from_json=False, from_client=False):
+ def __init__(self,
+ parent,
+ json,
+ namespace,
+ from_json=False,
+ from_client=False):
self.name = json['name']
+ self.simple_name = _StripNamespace(self.name, namespace)
self.params = []
self.description = json.get('description')
self.callback = None
@@ -143,6 +156,7 @@ class Function(object):
def GeneratePropertyFromParam(p):
return Property(self,
p['name'], p,
+ namespace,
from_json=from_json,
from_client=from_client)
@@ -161,11 +175,14 @@ class Function(object):
self.params.append(GeneratePropertyFromParam(param))
if callback_param:
- self.callback = Function(self, callback_param, from_client=True)
+ self.callback = Function(self,
+ callback_param,
+ namespace,
+ from_client=True)
self.returns = None
if 'returns' in json:
- self.returns = Property(self, 'return', json['returns'])
+ self.returns = Property(self, 'return', json['returns'], namespace)
class Property(object):
"""A property of a type OR a parameter to a function.
@@ -189,11 +206,19 @@ class Property(object):
- |from_json| indicates that instances of the Type can originate from the
JSON (as described by the schema), such as top-level types and function
parameters
+ - |simple_name| the name of this Property without a namespace
"""
- def __init__(self, parent, name, json, is_additional_properties=False,
- from_json=False, from_client=False):
+ def __init__(self,
+ parent,
+ name,
+ json,
+ namespace,
+ is_additional_properties=False,
+ from_json=False,
+ from_client=False):
self.name = name
+ self.simple_name = _StripNamespace(self.name, namespace)
self._unix_name = UnixName(self.name)
self._unix_name_used = False
self.optional = json.get('optional', False)
@@ -204,7 +229,7 @@ class Property(object):
self.from_json = from_json
self.from_client = from_client
self.instance_of = json.get('isInstanceOf', None)
- _AddProperties(self, json)
+ _AddProperties(self, json, namespace)
if is_additional_properties:
self.type_ = PropertyType.ADDITIONAL_PROPERTIES
elif '$ref' in json:
@@ -220,12 +245,15 @@ class Property(object):
elif 'type' in json:
self.type_ = self._JsonTypeToPropertyType(json['type'])
if self.type_ == PropertyType.ARRAY:
- self.item_type = Property(self, name + "Element", json['items'],
- from_json=from_json,
- from_client=from_client)
+ self.item_type = Property(self,
+ name + "Element",
+ json['items'],
+ namespace,
+ from_json=from_json,
+ from_client=from_client)
elif self.type_ == PropertyType.OBJECT:
# These members are read when this OBJECT Property is used as a Type
- type_ = Type(self, self.name, json)
+ type_ = Type(self, self.name, json, namespace)
# self.properties will already have some value from |_AddProperties|.
self.properties.update(type_.properties)
self.functions = type_.functions
@@ -236,9 +264,12 @@ class Property(object):
self.type_ = PropertyType.CHOICES
self.compiled_type = self.type_
for choice_json in json['choices']:
- choice = Property(self, self.name, choice_json,
- from_json=from_json,
- from_client=from_client)
+ choice = Property(self,
+ self.name,
+ choice_json,
+ namespace,
+ from_json=from_json,
+ from_client=from_client)
choice.unix_name = UnixName(self.name + choice.type_.name)
# The existence of any single choice is optional
choice.optional = True
@@ -353,6 +384,11 @@ def UnixName(name):
# Finally, replace any remaining periods, and make lowercase.
return s2.replace('.', '_').lower()
+def _StripNamespace(name, namespace):
+ if name.startswith(namespace.name + '.'):
+ return name[len(namespace.name + '.'):]
+ return name
+
def _GetModelHierarchy(entity):
"""Returns the hierarchy of the given model entity."""
hierarchy = []
@@ -365,32 +401,36 @@ def _GetModelHierarchy(entity):
hierarchy.reverse()
return hierarchy
-def _AddTypes(model, json):
+def _AddTypes(model, json, namespace):
"""Adds Type objects to |model| contained in the 'types' field of |json|.
"""
model.types = {}
for type_json in json.get('types', []):
- type_ = Type(model, type_json['id'], type_json)
+ type_ = Type(model, type_json['id'], type_json, namespace)
model.types[type_.name] = type_
-def _AddFunctions(model, json):
+def _AddFunctions(model, json, namespace):
"""Adds Function objects to |model| contained in the 'functions' field of
|json|.
"""
model.functions = {}
for function_json in json.get('functions', []):
- function = Function(model, function_json, from_json=True)
+ function = Function(model, function_json, namespace, from_json=True)
model.functions[function.name] = function
-def _AddEvents(model, json):
+def _AddEvents(model, json, namespace):
"""Adds Function objects to |model| contained in the 'events' field of |json|.
"""
model.events = {}
for event_json in json.get('events', []):
- event = Function(model, event_json, from_client=True)
+ event = Function(model, event_json, namespace, from_client=True)
model.events[event.name] = event
-def _AddProperties(model, json, from_json=False, from_client=False):
+def _AddProperties(model,
+ json,
+ namespace,
+ from_json=False,
+ from_client=False):
"""Adds model.Property objects to |model| contained in the 'properties' field
of |json|.
"""
@@ -400,5 +440,6 @@ def _AddProperties(model, json, from_json=False, from_client=False):
model,
name,
property_json,
+ namespace,
from_json=from_json,
from_client=from_client)