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

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

Issue 538613005: mojo: Start generating structs for python bindings (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Make structs immutable. Created 6 years, 3 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 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.generator as generator 9 import mojom.generate.generator as generator
10 import mojom.generate.module as mojom 10 import mojom.generate.module as mojom
(...skipping 16 matching lines...) Expand all
27 uccc = UpperCamelCase(name) 27 uccc = UpperCamelCase(name)
28 return uccc[0].lower() + uccc[1:] 28 return uccc[0].lower() + uccc[1:]
29 29
30 def ConstantStyle(name): 30 def ConstantStyle(name):
31 components = NameToComponent(name) 31 components = NameToComponent(name)
32 if components[0] == 'k': 32 if components[0] == 'k':
33 components = components[1:] 33 components = components[1:]
34 return '_'.join([x.upper() for x in components]) 34 return '_'.join([x.upper() for x in components])
35 35
36 def GetNameForElement(element): 36 def GetNameForElement(element):
37 if (mojom.IsEnumKind(element) or mojom.IsInterfaceKind(element) or
38 mojom.IsStructKind(element)):
39 return UpperCamelCase(element.name)
37 if isinstance(element, mojom.EnumValue): 40 if isinstance(element, mojom.EnumValue):
38 return (UpperCamelCase(element.enum_name) + '.' + 41 return (UpperCamelCase(element.enum_name) + '.' +
39 ConstantStyle(element.name)) 42 ConstantStyle(element.name))
40 if isinstance(element, (mojom.NamedValue, 43 if isinstance(element, (mojom.NamedValue,
41 mojom.Constant)): 44 mojom.Constant)):
42 return ConstantStyle(element.name) 45 return ConstantStyle(element.name)
43 raise Exception('Unexpected element: ' % element) 46 raise Exception('Unexpected element: ' % element)
44 47
45 def ExpressionToText(token): 48 def ExpressionToText(token):
46 if isinstance(token, (mojom.EnumValue, mojom.NamedValue)): 49 if isinstance(token, (mojom.EnumValue, mojom.NamedValue)):
(...skipping 28 matching lines...) Expand all
75 'expression_to_text': ExpressionToText, 78 'expression_to_text': ExpressionToText,
76 'name': GetNameForElement, 79 'name': GetNameForElement,
77 } 80 }
78 81
79 @UseJinja('python_templates/module.py.tmpl', filters=python_filters) 82 @UseJinja('python_templates/module.py.tmpl', filters=python_filters)
80 def GeneratePythonModule(self): 83 def GeneratePythonModule(self):
81 return { 84 return {
82 'imports': self.GetImports(), 85 'imports': self.GetImports(),
83 'enums': self.module.enums, 86 'enums': self.module.enums,
84 'module': self.module, 87 'module': self.module,
88 'structs': self.GetStructs(),
85 } 89 }
86 90
87 def GenerateFiles(self, args): 91 def GenerateFiles(self, args):
88 self.Write(self.GeneratePythonModule(), 92 self.Write(self.GeneratePythonModule(),
89 '%s.py' % self.module.name.replace('.mojom', '_mojom')) 93 '%s.py' % self.module.name.replace('.mojom', '_mojom'))
90 94
91 def GetImports(self): 95 def GetImports(self):
92 for each in self.module.imports: 96 for each in self.module.imports:
93 each['python_module'] = each['module_name'].replace('.mojom', '_mojom') 97 each['python_module'] = each['module_name'].replace('.mojom', '_mojom')
94 return self.module.imports 98 return self.module.imports
95 99
96 def GetJinjaParameters(self): 100 def GetJinjaParameters(self):
97 return { 101 return {
98 'lstrip_blocks': True, 102 'lstrip_blocks': True,
99 'trim_blocks': True, 103 'trim_blocks': True,
100 } 104 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698