diff --git a/modules/python/src2/gen2.py b/modules/python/src2/gen2.py index 8794a29150..c0cc83ca79 100755 --- a/modules/python/src2/gen2.py +++ b/modules/python/src2/gen2.py @@ -3,6 +3,7 @@ from __future__ import print_function import hdr_parser, sys, re, os from string import Template +from pprint import pprint if sys.version_info[0] >= 3: from io import StringIO @@ -806,12 +807,26 @@ class FuncInfo(object): code += "\n return %s;\n}\n\n" % def_ret cname = self.cname + classinfo = None + #dump = False + #if dump: pprint(vars(self)) + #if dump: pprint(vars(self.variants[0])) if self.classname: classinfo = all_classes[self.classname] - cname = classinfo.cname + '::' + cname + #if dump: pprint(vars(classinfo)) + if self.isconstructor: + py_name = 'cv.' + classinfo.wname + elif self.isclassmethod: + py_name = '.'.join([self.namespace, classinfo.sname + '_' + self.variants[0].wname]) + else: + cname = classinfo.cname + '::' + cname + py_name = 'cv.' + classinfo.wname + '.' + self.variants[0].wname + else: + py_name = '.'.join([self.namespace, self.variants[0].wname]) + #if dump: print(cname + " => " + py_name) py_signatures = codegen.py_signatures.setdefault(cname, []) for v in self.variants: - s = dict(name=v.name, arg=v.py_arg_str, ret=v.py_return_str) + s = dict(name=py_name, arg=v.py_arg_str, ret=v.py_return_str) for old in py_signatures: if s == old: break @@ -855,6 +870,16 @@ class PythonWrapperGenerator(object): sys.exit(-1) self.classes[classinfo.name] = classinfo + # Add Class to json file. + namespace, classes, name = self.split_decl_name(name) + namespace = '.'.join(namespace) + name = '_'.join(classes+[name]) + + py_name = 'cv.' + classinfo.wname # use wrapper name + py_signatures = self.py_signatures.setdefault(classinfo.cname, []) + py_signatures.append(dict(name=py_name)) + #print('class: ' + classinfo.cname + " => " + py_name) + def split_decl_name(self, name): chunks = name.split('.') namespace = chunks[:-1] @@ -876,6 +901,12 @@ class PythonWrapperGenerator(object): sys.exit(-1) ns.consts[name] = cname + value = decl[1] + py_name = '.'.join([namespace, name]) + py_signatures = self.py_signatures.setdefault(cname, []) + py_signatures.append(dict(name=py_name, value=value)) + #print(cname + ' => ' + str(py_name) + ' (value=' + value + ')') + def add_func(self, decl): namespace, classes, barename = self.split_decl_name(decl[0]) cname = "::".join(namespace+classes+[barename])