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:
Campbell Barton 2018-10-30 16:11:39 +11:00
parent 0973ea5132
commit f711c44b8d
2 changed files with 21 additions and 2 deletions

@ -1165,7 +1165,8 @@ PropertyRNA *RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier
case PROP_STRING:
{
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 = "";
break;
}

@ -1729,7 +1729,25 @@ static int pyrna_py_to_prop(
const int subtype = RNA_property_subtype(prop);
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 */