[Bf-blender-cvs] [d2591e5c2de] master: IDProp Py API: Add default argument to pop

Campbell Barton noreply at git.blender.org
Sat May 5 09:57:20 CEST 2018


Commit: d2591e5c2de5d4fd02e6a74d0f48d6b0d5050cc4
Author: Campbell Barton
Date:   Sat May 5 09:48:06 2018 +0200
Branches: master
https://developer.blender.org/rBd2591e5c2de5d4fd02e6a74d0f48d6b0d5050cc4

IDProp Py API: Add default argument to pop

Match dict.pop behavior.

===================================================================

M	source/blender/python/generic/idprop_py_api.c

===================================================================

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},



More information about the Bf-blender-cvs mailing list