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:
Diffstat (limited to 'source/blender/python/generic/py_capi_utils.c')
-rw-r--r--source/blender/python/generic/py_capi_utils.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/source/blender/python/generic/py_capi_utils.c b/source/blender/python/generic/py_capi_utils.c
index ca9f15ed01a..a6983c38f0e 100644
--- a/source/blender/python/generic/py_capi_utils.c
+++ b/source/blender/python/generic/py_capi_utils.c
@@ -231,6 +231,37 @@ int PyC_ParseBool(PyObject *o, void *p)
return 1;
}
+/**
+ * Use with PyArg_ParseTuple's "O&" formatting.
+ */
+int PyC_ParseStringEnum(PyObject *o, void *p)
+{
+ struct PyC_StringEnum *e = p;
+ const char *value = _PyUnicode_AsString(o);
+ if (value == NULL) {
+ PyErr_Format(PyExc_ValueError, "expected a string, got %s", Py_TYPE(o)->tp_name);
+ return 0;
+ }
+ int i;
+ for (i = 0; e->items[i].id; i++) {
+ if (STREQ(e->items[i].id, value)) {
+ e->value_found = e->items[i].value;
+ return 1;
+ }
+ }
+
+ /* Set as a precaution. */
+ e->value_found = -1;
+
+ PyObject *enum_items = PyTuple_New(i);
+ for (i = 0; e->items[i].id; i++) {
+ PyTuple_SET_ITEM(enum_items, i, PyUnicode_FromString(e->items[i].id));
+ }
+ PyErr_Format(PyExc_ValueError, "expected a string in %S, got '%s'", enum_items, value);
+ Py_DECREF(enum_items);
+ return 0;
+}
+
/* silly function, we dont use arg. just check its compatible with __deepcopy__ */
int PyC_CheckArgs_DeepCopy(PyObject *args)
{