File indexing completed on 2024-05-19 05:42:15
0001 import sys 0002 from handlers import HANDLERS 0003 0004 0005 if __name__ == "__main__": 0006 # Note: Please don't use JINJA for code generation, since some users don't have it installed. 0007 output_path = sys.argv[1] 0008 filename = 'ct_lvtplg_handlerbindings.inc.cpp' 0009 0010 contents = [] 0011 contents.append("// This file is automatically generated. Do not modify it directly - Use the generator file instead.") 0012 contents.append(f'') 0013 contents.append(f'template <typename ModuleType>') 0014 contents.append(f'void exportHandlers(ModuleType& m)') 0015 contents.append(f'{{') 0016 contents.append(f'using namespace Codethink::lvtplg;') 0017 contents.append(f'') 0018 0019 for handler in HANDLERS: 0020 contents.append(f'{{') 0021 contents.append(f'using T = {handler.name};') 0022 contents.append(f'py::class_<T>(m, "{handler.name}")') 0023 for f in handler.functions: 0024 if f.bind_f == 'no_bindings': 0025 continue 0026 0027 if f.bind_f == 'as_lambda': 0028 params = ','.join(['T const& self'] + [f'{p.type} {p.name}' for p in f.params]) 0029 args = ','.join([f'{p.name}' for p in f.params]) 0030 bind_f = f'[]({params}) {{ return self.{f.name}({args}); }}' 0031 else: 0032 bind_f = f'&{f.bind_f}' 0033 if f.params: 0034 pyargs_names = ','.join([f'py::arg("{p.name}")' for p in f.params]) 0035 pyargs_names = ', ' + pyargs_names 0036 else: 0037 pyargs_names = '' 0038 contents.append(f' .def("{f.name}", {bind_f}{pyargs_names})') 0039 contents.append(f';') 0040 contents.append(f'}}') 0041 0042 contents.append(f'}}') 0043 contents.append('') 0044 0045 with open(output_path + "/" + filename, 'w') as f: 0046 f.write('\n'.join(contents))