forked from bartvdbraak/blender
PyAPI: Support for 'None' string args from Python
This is needed because some RNA functions differentiate a NULL 'char *' argument from an empty string. Previously a NULL argument could be passed when the C definition defined the default as NULL and the argument wasn't passed which is a fairly hidden way of handling things. Now strings use `PROP_NEVER_NULL` by default which can be cleared for function arguments that allow None -> NULL.
This commit is contained in:
parent
0973ea5132
commit
f711c44b8d
@ -1165,7 +1165,8 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
|
|||||||
case PROP_STRING:
|
case PROP_STRING:
|
||||||
{
|
{
|
||||||
StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
|
StringPropertyRNA *sprop = (StringPropertyRNA *)prop;
|
||||||
|
/* By default don't allow NULL string args, callers may clear. */
|
||||||
|
RNA_def_property_flag(prop, PROP_NEVER_NULL);
|
||||||
sprop->defaultvalue = "";
|
sprop->defaultvalue = "";
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1729,7 +1729,25 @@ static int pyrna_py_to_prop(
|
|||||||
const int subtype = RNA_property_subtype(prop);
|
const int subtype = RNA_property_subtype(prop);
|
||||||
const char *param;
|
const char *param;
|
||||||
|
|
||||||
if (subtype == PROP_BYTESTRING) {
|
if (value == Py_None) {
|
||||||
|
if ((RNA_property_flag(prop) & PROP_NEVER_NULL) == 0) {
|
||||||
|
if (data) {
|
||||||
|
*((char **)data) = (char *)NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
RNA_property_string_set(ptr, prop, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
PyC_Err_Format_Prefix(
|
||||||
|
PyExc_TypeError,
|
||||||
|
"%.200s %.200s.%.200s doesn't support None from string types",
|
||||||
|
error_prefix, RNA_struct_identifier(ptr->type),
|
||||||
|
RNA_property_identifier(prop));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (subtype == PROP_BYTESTRING) {
|
||||||
|
|
||||||
/* Byte String */
|
/* Byte String */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user