Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2018-05-05 10:48:06 +0300
committerCampbell Barton <ideasman42@gmail.com>2018-05-05 10:48:06 +0300
commitd2591e5c2de5d4fd02e6a74d0f48d6b0d5050cc4 (patch)
tree11bf88bc76cf05a874622ded89f7874e45b0eda7 /source/blender/python
parent86c2c4d513f122da86524483f33182189aacf75a (diff)
IDProp Py API: Add default argument to pop
Match dict.pop behavior.
Diffstat (limited to 'source/blender/python')
-rw-r--r--source/blender/python/generic/idprop_py_api.c44
1 files changed, 23 insertions, 21 deletions
diff --git a/source/blender/python/generic/idprop_py_api.c b/source/blender/python/generic/idprop_py_api.c
index 164fe656129..c35472026fa 100644
--- a/source/blender/python/generic/idprop_py_api.c
+++ b/source/blender/python/generic/idprop_py_api.c
@@ -855,7 +855,7 @@ static PyObject *BPy_IDGroup_MapDataToPy(IDProperty *prop)
}
PyDoc_STRVAR(BPy_IDGroup_pop_doc,
-".. method:: pop(key)\n"
+".. method:: pop(key, default)\n"
"\n"
" Remove an item from the group, returning a Python representation.\n"
"\n"
@@ -863,38 +863,40 @@ PyDoc_STRVAR(BPy_IDGroup_pop_doc,
"\n"
" :arg key: Name of item to remove.\n"
" :type key: string\n"
+" :arg default: Value to return when key isn't found, otherwise raise an exception.\n"
+" :type default: Undefined\n"
);
-static PyObject *BPy_IDGroup_pop(BPy_IDProperty *self, PyObject *value)
+static PyObject *BPy_IDGroup_pop(BPy_IDProperty *self, PyObject *args)
{
IDProperty *idprop;
PyObject *pyform;
- const char *name = _PyUnicode_AsString(value);
- if (!name) {
- PyErr_Format(PyExc_TypeError,
- "pop expected at least a string argument, not %.200s",
- Py_TYPE(value)->tp_name);
+ char *key;
+ PyObject *def = NULL;
+
+ if (!PyArg_ParseTuple(args, "s|O:get", &key, &def)) {
return NULL;
}
- idprop = IDP_GetPropertyFromGroup(self->prop, name);
-
- if (idprop) {
- pyform = BPy_IDGroup_MapDataToPy(idprop);
-
- if (!pyform) {
- /* ok something bad happened with the pyobject,
- * so don't remove the prop from the group. if pyform is
- * NULL, then it already should have raised an exception.*/
+ idprop = IDP_GetPropertyFromGroup(self->prop, key);
+ if (idprop == NULL) {
+ if (def == NULL) {
+ PyErr_SetString(PyExc_KeyError, "item not in group");
return NULL;
}
+ return Py_INCREF_RET(def);
+ }
- IDP_RemoveFromGroup(self->prop, idprop);
- return pyform;
+ pyform = BPy_IDGroup_MapDataToPy(idprop);
+ if (pyform == NULL) {
+ /* ok something bad happened with the pyobject,
+ * so don't remove the prop from the group. if pyform is
+ * NULL, then it already should have raised an exception.*/
+ return NULL;
}
- PyErr_SetString(PyExc_KeyError, "item not in group");
- return NULL;
+ IDP_RemoveFromGroup(self->prop, idprop);
+ return pyform;
}
PyDoc_STRVAR(BPy_IDGroup_iter_items_doc,
@@ -1126,7 +1128,7 @@ static PyObject *BPy_IDGroup_get(BPy_IDProperty *self, PyObject *args)
}
static struct PyMethodDef BPy_IDGroup_methods[] = {
- {"pop", (PyCFunction)BPy_IDGroup_pop, METH_O, BPy_IDGroup_pop_doc},
+ {"pop", (PyCFunction)BPy_IDGroup_pop, METH_VARARGS, BPy_IDGroup_pop_doc},
{"iteritems", (PyCFunction)BPy_IDGroup_iter_items, METH_NOARGS, BPy_IDGroup_iter_items_doc},
{"keys", (PyCFunction)BPy_IDGroup_keys, METH_NOARGS, BPy_IDGroup_keys_doc},
{"values", (PyCFunction)BPy_IDGroup_values, METH_NOARGS, BPy_IDGroup_values_doc},