mirror of
https://github.com/opencv/opencv.git
synced 2025-08-06 14:36:36 +08:00
fix: add _ suffix to properties having reserved keyword names
This commit is contained in:
parent
c2ecbc76ce
commit
3f5f09e730
@ -213,6 +213,17 @@ AsyncArray testAsyncException()
|
||||
return p.getArrayResult();
|
||||
}
|
||||
|
||||
struct CV_EXPORTS_W_SIMPLE ClassWithKeywordProperties {
|
||||
CV_PROP_RW int lambda;
|
||||
CV_PROP int except;
|
||||
|
||||
CV_WRAP explicit ClassWithKeywordProperties(int lambda_arg = 24, int except_arg = 42)
|
||||
{
|
||||
lambda = lambda_arg;
|
||||
except = except_arg;
|
||||
}
|
||||
};
|
||||
|
||||
namespace nested {
|
||||
CV_WRAP static inline bool testEchoBooleanFunction(bool flag) {
|
||||
return flag;
|
||||
|
@ -169,10 +169,10 @@ static int pyopencv_${name}_set_${member}(pyopencv_${name}_t* p, PyObject *value
|
||||
|
||||
|
||||
gen_template_prop_init = Template("""
|
||||
{(char*)"${member}", (getter)pyopencv_${name}_get_${member}, NULL, (char*)"${member}", NULL},""")
|
||||
{(char*)"${export_member_name}", (getter)pyopencv_${name}_get_${member}, NULL, (char*)"${export_member_name}", NULL},""")
|
||||
|
||||
gen_template_rw_prop_init = Template("""
|
||||
{(char*)"${member}", (getter)pyopencv_${name}_get_${member}, (setter)pyopencv_${name}_set_${member}, (char*)"${member}", NULL},""")
|
||||
{(char*)"${export_member_name}", (getter)pyopencv_${name}_get_${member}, (setter)pyopencv_${name}_set_${member}, (char*)"${export_member_name}", NULL},""")
|
||||
|
||||
gen_template_overloaded_function_call = Template("""
|
||||
{
|
||||
@ -242,6 +242,13 @@ class ClassProp(object):
|
||||
if "/RW" in decl[3]:
|
||||
self.readonly = False
|
||||
|
||||
@property
|
||||
def export_name(self):
|
||||
if self.name in python_reserved_keywords:
|
||||
return self.name + "_"
|
||||
return self.name
|
||||
|
||||
|
||||
class ClassInfo(object):
|
||||
def __init__(self, name, decl=None, codegen=None):
|
||||
# Scope name can be a module or other class e.g. cv::SimpleBlobDetector::Params
|
||||
@ -357,13 +364,13 @@ class ClassInfo(object):
|
||||
else:
|
||||
getset_code.write(gen_template_get_prop.substitute(name=self.name, member=pname, membertype=p.tp, access=access_op))
|
||||
if p.readonly:
|
||||
getset_inits.write(gen_template_prop_init.substitute(name=self.name, member=pname))
|
||||
getset_inits.write(gen_template_prop_init.substitute(name=self.name, member=pname, export_member_name=p.export_name))
|
||||
else:
|
||||
if self.isalgorithm:
|
||||
getset_code.write(gen_template_set_prop_algo.substitute(name=self.name, cname=self.cname, member=pname, membertype=p.tp, access=access_op))
|
||||
else:
|
||||
getset_code.write(gen_template_set_prop.substitute(name=self.name, member=pname, membertype=p.tp, access=access_op))
|
||||
getset_inits.write(gen_template_rw_prop_init.substitute(name=self.name, member=pname))
|
||||
getset_inits.write(gen_template_rw_prop_init.substitute(name=self.name, member=pname, export_member_name=p.export_name))
|
||||
|
||||
methods_code = StringIO()
|
||||
methods_inits = StringIO()
|
||||
|
@ -119,6 +119,23 @@ class Bindings(NewOpenCVTests):
|
||||
test_overload_resolution('rect with float coordinates', (4.5, 4, 2, 1))
|
||||
test_overload_resolution('rect with wrong number of coordinates', (4, 4, 1))
|
||||
|
||||
def test_properties_with_reserved_keywords_names_are_transformed(self):
|
||||
obj = cv.utils.ClassWithKeywordProperties(except_arg=23)
|
||||
self.assertTrue(hasattr(obj, "lambda_"),
|
||||
msg="Class doesn't have RW property with converted name")
|
||||
try:
|
||||
obj.lambda_ = 32
|
||||
except Exception as e:
|
||||
self.fail("Failed to set value to RW property. Error: {}".format(e))
|
||||
|
||||
self.assertTrue(hasattr(obj, "except_"),
|
||||
msg="Class doesn't have readonly property with converted name")
|
||||
self.assertEqual(obj.except_, 23,
|
||||
msg="Can't access readonly property value")
|
||||
with self.assertRaises(AttributeError):
|
||||
obj.except_ = 32
|
||||
|
||||
|
||||
|
||||
class Arguments(NewOpenCVTests):
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user