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))