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

Side by Side Diff: mojo/public/tools/bindings/generators/mojom_python_generator.py

Issue 1413033011: Fix bug whereby booleans in unions could not be serialized in python. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 years, 1 month 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 unified diff | Download patch
OLDNEW
1 # Copyright 2014 The Chromium Authors. All rights reserved. 1 # Copyright 2014 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 """Generates Python source files from a mojom.Module.""" 5 """Generates Python source files from a mojom.Module."""
6 6
7 import re 7 import re
8 8
9 import mojom.generate.constant_resolver as resolver 9 import mojom.generate.constant_resolver as resolver
10 import mojom.generate.generator as generator 10 import mojom.generate.generator as generator
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
168 return '_descriptor.InterfaceType(%s)' % ', '.join(arguments) 168 return '_descriptor.InterfaceType(%s)' % ', '.join(arguments)
169 169
170 if mojom.IsInterfaceRequestKind(kind): 170 if mojom.IsInterfaceRequestKind(kind):
171 arguments = [] 171 arguments = []
172 if mojom.IsNullableKind(kind): 172 if mojom.IsNullableKind(kind):
173 arguments.append('nullable=True') 173 arguments.append('nullable=True')
174 return '_descriptor.InterfaceRequestType(%s)' % ', '.join(arguments) 174 return '_descriptor.InterfaceRequestType(%s)' % ', '.join(arguments)
175 175
176 return _kind_to_type[kind] 176 return _kind_to_type[kind]
177 177
178 def GetFieldDescriptor(field, index, min_version): 178 def GetFieldDescriptor(field, index, min_version, union_field=False):
179 class_name = 'SingleFieldGroup' 179 class_name = 'SingleFieldGroup'
180 if field.kind == mojom.BOOL: 180 if field.kind == mojom.BOOL and not union_field:
181 class_name = 'FieldDescriptor' 181 class_name = 'FieldDescriptor'
182 arguments = [ '%r' % GetNameForElement(field) ] 182 arguments = [ '%r' % GetNameForElement(field) ]
183 arguments.append(GetFieldType(field.kind, field)) 183 arguments.append(GetFieldType(field.kind, field))
184 arguments.append(str(index)) 184 arguments.append(str(index))
185 arguments.append(str(min_version)) 185 arguments.append(str(min_version))
186 if field.default: 186 if field.default:
187 if mojom.IsStructKind(field.kind): 187 if mojom.IsStructKind(field.kind):
188 arguments.append('default_value=True') 188 arguments.append('default_value=True')
189 else: 189 else:
190 arguments.append('default_value=%s' % ExpressionToText(field.default)) 190 arguments.append('default_value=%s' % ExpressionToText(field.default))
191 return '_descriptor.%s(%s)' % (class_name, ', '.join(arguments)) 191 return '_descriptor.%s(%s)' % (class_name, ', '.join(arguments))
192 192
193 def GetStructFieldDescriptor(packed_field): 193 def GetStructFieldDescriptor(packed_field):
194 return GetFieldDescriptor( 194 return GetFieldDescriptor(
195 packed_field.field, packed_field.index, packed_field.min_version) 195 packed_field.field, packed_field.index, packed_field.min_version)
196 196
197 def GetUnionFieldDescriptor(field): 197 def GetUnionFieldDescriptor(field):
198 return GetFieldDescriptor(field, field.ordinal, 0) 198 return GetFieldDescriptor(field, field.ordinal, 0, union_field=True)
199 199
200 def GetFieldGroup(byte): 200 def GetFieldGroup(byte):
201 if byte.packed_fields[0].field.kind == mojom.BOOL: 201 if byte.packed_fields[0].field.kind == mojom.BOOL:
202 descriptors = map(GetStructFieldDescriptor, byte.packed_fields) 202 descriptors = map(GetStructFieldDescriptor, byte.packed_fields)
203 return '_descriptor.BooleanGroup([%s])' % ', '.join(descriptors) 203 return '_descriptor.BooleanGroup([%s])' % ', '.join(descriptors)
204 assert len(byte.packed_fields) == 1 204 assert len(byte.packed_fields) == 1
205 return GetStructFieldDescriptor(byte.packed_fields[0]) 205 return GetStructFieldDescriptor(byte.packed_fields[0])
206 206
207 def MojomToPythonImport(mojom): 207 def MojomToPythonImport(mojom):
208 return mojom.replace('.mojom', '_mojom') 208 return mojom.replace('.mojom', '_mojom')
(...skipping 28 matching lines...) Expand all
237 def GetImports(self): 237 def GetImports(self):
238 for each in self.module.imports: 238 for each in self.module.imports:
239 each['python_module'] = MojomToPythonImport(each['module_name']) 239 each['python_module'] = MojomToPythonImport(each['module_name'])
240 return self.module.imports 240 return self.module.imports
241 241
242 def GetJinjaParameters(self): 242 def GetJinjaParameters(self):
243 return { 243 return {
244 'lstrip_blocks': True, 244 'lstrip_blocks': True,
245 'trim_blocks': True, 245 'trim_blocks': True,
246 } 246 }
OLDNEW
« no previous file with comments | « mojo/public/python/mojo_bindings/descriptor.py ('k') | mojo/python/tests/bindings_unions_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698