| OLD | NEW |
| 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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 139 | 139 |
| 140 if mojom.IsMapKind(kind): | 140 if mojom.IsMapKind(kind): |
| 141 arguments = [ | 141 arguments = [ |
| 142 GetFieldType(kind.key_kind), | 142 GetFieldType(kind.key_kind), |
| 143 GetFieldType(kind.value_kind), | 143 GetFieldType(kind.value_kind), |
| 144 ] | 144 ] |
| 145 if mojom.IsNullableKind(kind): | 145 if mojom.IsNullableKind(kind): |
| 146 arguments.append('nullable=True') | 146 arguments.append('nullable=True') |
| 147 return '_descriptor.MapType(%s)' % ', '.join(arguments) | 147 return '_descriptor.MapType(%s)' % ', '.join(arguments) |
| 148 | 148 |
| 149 if mojom.IsStructKind(kind) or mojom.IsUnionKind(kind): | 149 if mojom.IsUnionKind(kind): |
| 150 arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] | 150 arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] |
| 151 if mojom.IsNullableKind(kind): | 151 if mojom.IsNullableKind(kind): |
| 152 arguments.append('nullable=True') | 152 arguments.append('nullable=True') |
| 153 return '_descriptor.UnionType(%s)' % ', '.join(arguments) |
| 154 |
| 155 if mojom.IsStructKind(kind): |
| 156 arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] |
| 157 if mojom.IsNullableKind(kind): |
| 158 arguments.append('nullable=True') |
| 153 return '_descriptor.StructType(%s)' % ', '.join(arguments) | 159 return '_descriptor.StructType(%s)' % ', '.join(arguments) |
| 154 | 160 |
| 155 if mojom.IsEnumKind(kind): | 161 if mojom.IsEnumKind(kind): |
| 156 return GetFieldType(mojom.INT32) | 162 return GetFieldType(mojom.INT32) |
| 157 | 163 |
| 158 if mojom.IsInterfaceKind(kind): | 164 if mojom.IsInterfaceKind(kind): |
| 159 arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] | 165 arguments = [ 'lambda: %s' % GetFullyQualifiedName(kind) ] |
| 160 if mojom.IsNullableKind(kind): | 166 if mojom.IsNullableKind(kind): |
| 161 arguments.append('nullable=True') | 167 arguments.append('nullable=True') |
| 162 return '_descriptor.InterfaceType(%s)' % ', '.join(arguments) | 168 return '_descriptor.InterfaceType(%s)' % ', '.join(arguments) |
| 163 | 169 |
| 164 if mojom.IsInterfaceRequestKind(kind): | 170 if mojom.IsInterfaceRequestKind(kind): |
| 165 arguments = [] | 171 arguments = [] |
| 166 if mojom.IsNullableKind(kind): | 172 if mojom.IsNullableKind(kind): |
| 167 arguments.append('nullable=True') | 173 arguments.append('nullable=True') |
| 168 return '_descriptor.InterfaceRequestType(%s)' % ', '.join(arguments) | 174 return '_descriptor.InterfaceRequestType(%s)' % ', '.join(arguments) |
| 169 | 175 |
| 170 return _kind_to_type[kind] | 176 return _kind_to_type[kind] |
| 171 | 177 |
| 172 def GetFieldDescriptor(packed_field): | 178 def GetFieldDescriptor(field, index, min_version): |
| 173 field = packed_field.field | |
| 174 class_name = 'SingleFieldGroup' | 179 class_name = 'SingleFieldGroup' |
| 175 if field.kind == mojom.BOOL: | 180 if field.kind == mojom.BOOL: |
| 176 class_name = 'FieldDescriptor' | 181 class_name = 'FieldDescriptor' |
| 177 arguments = [ '%r' % GetNameForElement(field) ] | 182 arguments = [ '%r' % GetNameForElement(field) ] |
| 178 arguments.append(GetFieldType(field.kind, field)) | 183 arguments.append(GetFieldType(field.kind, field)) |
| 179 arguments.append(str(packed_field.index)) | 184 arguments.append(str(index)) |
| 180 arguments.append(str(packed_field.min_version)) | 185 arguments.append(str(min_version)) |
| 181 if field.default: | 186 if field.default: |
| 182 if mojom.IsStructKind(field.kind): | 187 if mojom.IsStructKind(field.kind): |
| 183 arguments.append('default_value=True') | 188 arguments.append('default_value=True') |
| 184 else: | 189 else: |
| 185 arguments.append('default_value=%s' % ExpressionToText(field.default)) | 190 arguments.append('default_value=%s' % ExpressionToText(field.default)) |
| 186 return '_descriptor.%s(%s)' % (class_name, ', '.join(arguments)) | 191 return '_descriptor.%s(%s)' % (class_name, ', '.join(arguments)) |
| 187 | 192 |
| 193 def GetStructFieldDescriptor(packed_field): |
| 194 return GetFieldDescriptor( |
| 195 packed_field.field, packed_field.index, packed_field.min_version) |
| 196 |
| 197 def GetUnionFieldDescriptor(field): |
| 198 return GetFieldDescriptor(field, field.ordinal, 0) |
| 199 |
| 188 def GetFieldGroup(byte): | 200 def GetFieldGroup(byte): |
| 189 if byte.packed_fields[0].field.kind == mojom.BOOL: | 201 if byte.packed_fields[0].field.kind == mojom.BOOL: |
| 190 descriptors = map(GetFieldDescriptor, byte.packed_fields) | 202 descriptors = map(GetStructFieldDescriptor, byte.packed_fields) |
| 191 return '_descriptor.BooleanGroup([%s])' % ', '.join(descriptors) | 203 return '_descriptor.BooleanGroup([%s])' % ', '.join(descriptors) |
| 192 assert len(byte.packed_fields) == 1 | 204 assert len(byte.packed_fields) == 1 |
| 193 return GetFieldDescriptor(byte.packed_fields[0]) | 205 return GetStructFieldDescriptor(byte.packed_fields[0]) |
| 194 | 206 |
| 195 def MojomToPythonImport(mojom): | 207 def MojomToPythonImport(mojom): |
| 196 return mojom.replace('.mojom', '_mojom') | 208 return mojom.replace('.mojom', '_mojom') |
| 197 | 209 |
| 198 class Generator(generator.Generator): | 210 class Generator(generator.Generator): |
| 199 | 211 |
| 200 python_filters = { | 212 python_filters = { |
| 201 'expression_to_text': ExpressionToText, | 213 'expression_to_text': ExpressionToText, |
| 202 'field_group': GetFieldGroup, | 214 'field_group': GetFieldGroup, |
| 215 'union_field_descriptor': GetUnionFieldDescriptor, |
| 203 'fully_qualified_name': GetFullyQualifiedName, | 216 'fully_qualified_name': GetFullyQualifiedName, |
| 204 'name': GetNameForElement, | 217 'name': GetNameForElement, |
| 205 } | 218 } |
| 206 | 219 |
| 207 @UseJinja('python_templates/module.py.tmpl', filters=python_filters) | 220 @UseJinja('python_templates/module.py.tmpl', filters=python_filters) |
| 208 def GeneratePythonModule(self): | 221 def GeneratePythonModule(self): |
| 209 return { | 222 return { |
| 210 'enums': self.module.enums, | 223 'enums': self.module.enums, |
| 211 'imports': self.GetImports(), | 224 'imports': self.GetImports(), |
| 212 'interfaces': self.GetInterfaces(), | 225 'interfaces': self.GetInterfaces(), |
| 213 'module': resolver.ResolveConstants(self.module, ExpressionToText), | 226 'module': resolver.ResolveConstants(self.module, ExpressionToText), |
| 214 'namespace': self.module.namespace, | 227 'namespace': self.module.namespace, |
| 215 'structs': self.GetStructs(), | 228 'structs': self.GetStructs(), |
| 229 'unions': self.GetUnions(), |
| 216 } | 230 } |
| 217 | 231 |
| 218 def GenerateFiles(self, args): | 232 def GenerateFiles(self, args): |
| 219 import_path = MojomToPythonImport(self.module.name) | 233 import_path = MojomToPythonImport(self.module.name) |
| 220 self.Write(self.GeneratePythonModule(), | 234 self.Write(self.GeneratePythonModule(), |
| 221 self.MatchMojomFilePath('%s.py' % import_path)) | 235 self.MatchMojomFilePath('%s.py' % import_path)) |
| 222 | 236 |
| 223 def GetImports(self): | 237 def GetImports(self): |
| 224 for each in self.module.imports: | 238 for each in self.module.imports: |
| 225 each['python_module'] = MojomToPythonImport(each['module_name']) | 239 each['python_module'] = MojomToPythonImport(each['module_name']) |
| 226 return self.module.imports | 240 return self.module.imports |
| 227 | 241 |
| 228 def GetJinjaParameters(self): | 242 def GetJinjaParameters(self): |
| 229 return { | 243 return { |
| 230 'lstrip_blocks': True, | 244 'lstrip_blocks': True, |
| 231 'trim_blocks': True, | 245 'trim_blocks': True, |
| 232 } | 246 } |
| OLD | NEW |