Skip to content

Commit 7267e94

Browse files
Cartuchoalalek
authored andcommitted
Merge pull request opencv#9736 from Cartucho/const_and_class_to_json
* Adding constants to json file * adding sub-module to constants name * adding namespace to functions * adding namespace to classes * remove namespace from methods * static methods * python signatures generation * python: more fixes for signatures generation Python names existence can be checked via command: python -c "import cv2 as cv; print(repr(<py_name>))"
1 parent d7a1d22 commit 7267e94

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

modules/python/src2/gen2.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
from __future__ import print_function
44
import hdr_parser, sys, re, os
55
from string import Template
6+
from pprint import pprint
67

78
if sys.version_info[0] >= 3:
89
from io import StringIO
@@ -806,12 +807,26 @@ def gen_code(self, codegen):
806807
code += "\n return %s;\n}\n\n" % def_ret
807808

808809
cname = self.cname
810+
classinfo = None
811+
#dump = False
812+
#if dump: pprint(vars(self))
813+
#if dump: pprint(vars(self.variants[0]))
809814
if self.classname:
810815
classinfo = all_classes[self.classname]
811-
cname = classinfo.cname + '::' + cname
816+
#if dump: pprint(vars(classinfo))
817+
if self.isconstructor:
818+
py_name = 'cv.' + classinfo.wname
819+
elif self.isclassmethod:
820+
py_name = '.'.join([self.namespace, classinfo.sname + '_' + self.variants[0].wname])
821+
else:
822+
cname = classinfo.cname + '::' + cname
823+
py_name = 'cv.' + classinfo.wname + '.' + self.variants[0].wname
824+
else:
825+
py_name = '.'.join([self.namespace, self.variants[0].wname])
826+
#if dump: print(cname + " => " + py_name)
812827
py_signatures = codegen.py_signatures.setdefault(cname, [])
813828
for v in self.variants:
814-
s = dict(name=v.name, arg=v.py_arg_str, ret=v.py_return_str)
829+
s = dict(name=py_name, arg=v.py_arg_str, ret=v.py_return_str)
815830
for old in py_signatures:
816831
if s == old:
817832
break
@@ -855,6 +870,16 @@ def add_class(self, stype, name, decl):
855870
sys.exit(-1)
856871
self.classes[classinfo.name] = classinfo
857872

873+
# Add Class to json file.
874+
namespace, classes, name = self.split_decl_name(name)
875+
namespace = '.'.join(namespace)
876+
name = '_'.join(classes+[name])
877+
878+
py_name = 'cv.' + classinfo.wname # use wrapper name
879+
py_signatures = self.py_signatures.setdefault(classinfo.cname, [])
880+
py_signatures.append(dict(name=py_name))
881+
#print('class: ' + classinfo.cname + " => " + py_name)
882+
858883
def split_decl_name(self, name):
859884
chunks = name.split('.')
860885
namespace = chunks[:-1]
@@ -876,6 +901,12 @@ def add_const(self, name, decl):
876901
sys.exit(-1)
877902
ns.consts[name] = cname
878903

904+
value = decl[1]
905+
py_name = '.'.join([namespace, name])
906+
py_signatures = self.py_signatures.setdefault(cname, [])
907+
py_signatures.append(dict(name=py_name, value=value))
908+
#print(cname + ' => ' + str(py_name) + ' (value=' + value + ')')
909+
879910
def add_func(self, decl):
880911
namespace, classes, barename = self.split_decl_name(decl[0])
881912
cname = "::".join(namespace+classes+[barename])

0 commit comments

Comments
 (0)