Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(617)

Unified Diff: tools/json_schema_compiler/model.py

Issue 9456007: Add wider support to json_schema_compiler (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: reupload Created 8 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tools/json_schema_compiler/h_generator.py ('k') | tools/json_schema_compiler/test/array.json » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/json_schema_compiler/model.py
diff --git a/tools/json_schema_compiler/model.py b/tools/json_schema_compiler/model.py
index 5ff394af46c471d16ad770a8261580091b1e2ac9..d839ab977be318601d9a79232b1903271fc3ad2e 100644
--- a/tools/json_schema_compiler/model.py
+++ b/tools/json_schema_compiler/model.py
@@ -60,13 +60,22 @@ class Type(object):
- |name| the type name
- |description| the description of the type (if provided)
- |properties| a map of property names to their model.Property
+ - |from_client| indicates that instances of the Type can originate from the
+ users of generated code, such as top-level types and function results
+ - |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
"""
def __init__(self, json):
self.name = json['id']
self.description = json.get('description')
+ self.from_json = True
+ self.from_client = True
self.properties = {}
for prop_name, prop_json in json['properties'].items():
- self.properties[prop_name] = Property(prop_name, prop_json)
+ self.properties[prop_name] = Property(prop_name, prop_json,
+ from_json=True,
+ from_client=True)
class Callback(object):
"""A callback parameter to a Function.
@@ -81,7 +90,8 @@ class Callback(object):
return
elif len(params) == 1:
param = params[0]
- self.params.append(Property(param['name'], param))
+ self.params.append(Property(param['name'], param,
+ from_client=True))
else:
raise AssertionError("Callbacks can have at most a single parameter")
@@ -106,8 +116,8 @@ class Function(object):
assert (not self.callback), self.name + " has more than one callback"
self.callback = Callback(param)
else:
- self.params.append(Property(param['name'], param))
- assert (self.callback), self.name + " does not support callback"
+ self.params.append(Property(param['name'], param,
+ from_json=True))
class Property(object):
"""A property of a type OR a parameter to a function.
@@ -125,9 +135,17 @@ class Property(object):
ARRAY
- |properties| the properties of an OBJECT parameter
"""
- def __init__(self, name, json):
- if not re.match('^[a-z][a-zA-Z0-9]*$', name):
- raise AssertionError('Name %s must be lowerCamelCase' % name)
+ def __init__(self, name, json,
+ from_json=False,
+ from_client=False):
+ """
+ Parameters:
+ - |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
+ - |from_client| indicates that instances of the Type can originate from the
+ users of generated code, such as top-level types and function results
+ """
self.name = name
self._unix_name = _UnixName(self.name)
self._unix_name_used = False
@@ -154,13 +172,20 @@ class Property(object):
elif json_type == 'number':
self.type_ = PropertyType.DOUBLE
elif json_type == 'array':
- self.item_type = Property(name + "Element", json['items'])
+ self.item_type = Property(name + "Element", json['items'],
+ from_json,
+ from_client)
self.type_ = PropertyType.ARRAY
elif json_type == 'object':
- self.properties = {}
self.type_ = PropertyType.OBJECT
- for key, val in json['properties'].items():
- self.properties[key] = Property(key, val)
+ # These members are read when this OBJECT Property is used as a Type
+ self.properties = {}
+ self.from_json = from_json
+ self.from_client = from_client
+ for key, val in json.get('properties', {}).items():
+ self.properties[key] = Property(key, val,
+ from_json,
+ from_client)
else:
raise NotImplementedError(json_type)
elif 'choices' in json:
@@ -168,7 +193,9 @@ class Property(object):
self.choices = {}
self.type_ = PropertyType.CHOICES
for choice_json in json['choices']:
- choice = Property(self.name, choice_json)
+ choice = Property(self.name, choice_json,
+ from_json,
+ from_client)
# A choice gets its unix_name set in
# cpp_type_generator.GetExpandedChoicesInParams
choice._unix_name = None
« no previous file with comments | « tools/json_schema_compiler/h_generator.py ('k') | tools/json_schema_compiler/test/array.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698