diff options
author | Campbell Barton <ideasman42@gmail.com> | 2018-10-30 08:11:39 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2018-10-30 08:17:46 +0300 |
commit | f711c44b8dc8e10b37b387cefabb7236ae77decd (patch) | |
tree | 51d5021bd6ff0abbbd52913b3ba597d1ed0fdd08 /source/blender/python/intern/bpy_rna.c | |
parent | 0973ea51325ef27ca9c6ed305fd4f3c4ec1184c9 (diff) |
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.
Diffstat (limited to 'source/blender/python/intern/bpy_rna.c')
-rw-r--r-- | source/blender/python/intern/bpy_rna.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 32d8c01be76..b4020c9fc8f 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -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 */ |