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

Unified Diff: mojo/public/tools/bindings/generators/mojom_python_generator.py

Issue 683583002: Update mojo sdk to rev e083961bf11fd0c94d40be8853761da529b6d444 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: geolocation Created 6 years, 2 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
Index: mojo/public/tools/bindings/generators/mojom_python_generator.py
diff --git a/mojo/public/tools/bindings/generators/mojom_python_generator.py b/mojo/public/tools/bindings/generators/mojom_python_generator.py
index db5e8b696b06e1c2f5e3578e1c81091638c9c4bc..295c656f4c5bf742a1f33b4a584c8bd42c288606 100644
--- a/mojo/public/tools/bindings/generators/mojom_python_generator.py
+++ b/mojo/public/tools/bindings/generators/mojom_python_generator.py
@@ -90,9 +90,13 @@ def ConstantStyle(name):
components = components[1:]
return '_'.join([x.upper() for x in components])
+def FieldStyle(name):
+ components = NameToComponent(name)
+ return '_'.join([x.lower() for x in components])
+
def GetNameForElement(element):
if (mojom.IsEnumKind(element) or mojom.IsInterfaceKind(element) or
- mojom.IsStructKind(element)):
+ mojom.IsStructKind(element) or isinstance(element, mojom.Method)):
return UpperCamelCase(element.name)
if isinstance(element, mojom.EnumValue):
return (GetNameForElement(element.enum) + '.' +
@@ -100,7 +104,9 @@ def GetNameForElement(element):
if isinstance(element, (mojom.NamedValue,
mojom.Constant)):
return ConstantStyle(element.name)
- raise Exception('Unexpected element: ' % element)
+ if isinstance(element, mojom.Field):
+ return FieldStyle(element.name)
+ raise Exception('Unexpected element: %s' % element)
def ExpressionToText(token):
if isinstance(token, (mojom.EnumValue, mojom.NamedValue)):
@@ -120,7 +126,7 @@ def ExpressionToText(token):
return token
-def GetStructClass(kind):
+def GetFullyQualifiedName(kind):
name = []
if kind.imported_from:
name.append(kind.imported_from['python_module'])
@@ -155,7 +161,7 @@ def GetFieldType(kind, field=None):
return '_descriptor.MapType(%s)' % ', '.join(arguments)
if mojom.IsStructKind(kind):
- arguments = [ 'lambda: %s' % GetStructClass(kind) ]
+ arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ]
if mojom.IsNullableKind(kind):
arguments.append('nullable=True')
return '_descriptor.StructType(%s)' % ', '.join(arguments)
@@ -170,7 +176,7 @@ def GetFieldDescriptor(packed_field):
class_name = 'SingleFieldGroup'
if field.kind == mojom.BOOL:
class_name = 'FieldDescriptor'
- arguments = [ '%r' % field.name ]
+ arguments = [ '%r' % GetNameForElement(field) ]
arguments.append(GetFieldType(field.kind, field))
arguments.append(str(packed_field.index))
arguments.append(str(packed_field.ordinal))
@@ -182,12 +188,20 @@ def GetFieldDescriptor(packed_field):
return '_descriptor.%s(%s)' % (class_name, ', '.join(arguments))
def GetFieldGroup(byte):
- if len(byte.packed_fields) > 1:
+ if byte.packed_fields[0].field.kind == mojom.BOOL:
descriptors = map(GetFieldDescriptor, byte.packed_fields)
return '_descriptor.BooleanGroup([%s])' % ', '.join(descriptors)
assert len(byte.packed_fields) == 1
return GetFieldDescriptor(byte.packed_fields[0])
+def GetResponseStructFromMethod(method):
+ return generator.GetDataHeader(
+ False, generator.GetResponseStructFromMethod(method))
+
+def GetStructFromMethod(method):
+ return generator.GetDataHeader(
+ False, generator.GetStructFromMethod(method))
+
def ComputeStaticValues(module):
in_progress = set()
computed = set()
@@ -274,14 +288,18 @@ class Generator(generator.Generator):
python_filters = {
'expression_to_text': ExpressionToText,
'field_group': GetFieldGroup,
+ 'fully_qualified_name': GetFullyQualifiedName,
'name': GetNameForElement,
+ 'response_struct_from_method': GetResponseStructFromMethod,
+ 'struct_from_method': GetStructFromMethod,
}
@UseJinja('python_templates/module.py.tmpl', filters=python_filters)
def GeneratePythonModule(self):
return {
- 'imports': self.GetImports(),
'enums': self.module.enums,
+ 'imports': self.GetImports(),
+ 'interfaces': self.GetQualifiedInterfaces(),
'module': ComputeStaticValues(self.module),
'structs': self.GetStructs(),
}
@@ -296,6 +314,25 @@ class Generator(generator.Generator):
each['python_module'] = MojomToPythonImport(each['module_name'])
return self.module.imports
+ def GetQualifiedInterfaces(self):
+ """
+ Returns the list of interfaces of the module. Each interface that has a
+ client will have a reference to the representation of the client interface
+ in the 'qualified_client' field.
+ """
+ interfaces = self.module.interfaces
+ all_interfaces = [] + interfaces
+ for each in self.module.imports:
+ all_interfaces += each['module'].interfaces
+ interfaces_by_name = dict((x.name, x) for x in all_interfaces)
+ for interface in interfaces:
+ if interface.client:
+ assert interface.client in interfaces_by_name, (
+ 'Unable to find interface %s declared as client of %s.' %
+ (interface.client, interface.name))
+ interface.qualified_client = interfaces_by_name[interface.client]
+ return sorted(interfaces, key=lambda i: (bool(i.client), i.name))
+
def GetJinjaParameters(self):
return {
'lstrip_blocks': True,

Powered by Google App Engine
This is Rietveld 408576698