[Bf-blender-cvs] [3bf7f06a268] temp-T96710-pbvh-pixels: PyAPI: use keyword only arguments for Text.region_{from/to} string
Campbell Barton
noreply at git.blender.org
Fri Apr 8 11:07:50 CEST 2022
Commit: 3bf7f06a2688b0ea2853ea14e69acfdc5f414e3f
Author: Campbell Barton
Date: Fri Apr 8 12:49:02 2022 +1000
Branches: temp-T96710-pbvh-pixels
https://developer.blender.org/rB3bf7f06a2688b0ea2853ea14e69acfdc5f414e3f
PyAPI: use keyword only arguments for Text.region_{from/to} string
This is the convention for most parts of Blender Python API.
===================================================================
M source/blender/python/intern/bpy_rna_text.c
M tests/python/bl_pyapi_text.py
===================================================================
diff --git a/source/blender/python/intern/bpy_rna_text.c b/source/blender/python/intern/bpy_rna_text.c
index fedb914256a..7ccc70cc7fa 100644
--- a/source/blender/python/intern/bpy_rna_text.c
+++ b/source/blender/python/intern/bpy_rna_text.c
@@ -36,6 +36,8 @@ typedef struct TextRegion {
int selc;
} TextRegion;
+/** \} */
+
/* -------------------------------------------------------------------- */
/** \name Text Editor Get / Set region text API
* \{ */
@@ -53,18 +55,27 @@ PyDoc_STRVAR(bpy_rna_region_as_string_doc,
" :return: The specified region as a string.\n"
" :rtype: str.\n");
/* Receive a Python Tuple as parameter to represent the region range. */
-static PyObject *bpy_rna_region_as_string(PyObject *self, PyObject *args)
+static PyObject *bpy_rna_region_as_string(PyObject *self, PyObject *args, PyObject *kwds)
{
BPy_StructRNA *pyrna = (BPy_StructRNA *)self;
Text *text = pyrna->ptr.data;
/* Parse the region range. */
TextRegion region;
- if (!PyArg_ParseTuple(
- args, "|((ii)(ii))", ®ion.curl, ®ion.curc, ®ion.sell, ®ion.selc)) {
+
+ static const char *_keywords[] = {"range", NULL};
+ static _PyArg_Parser _parser = {
+ "|$" /* Optional keyword only arguments. */
+ "((ii)(ii))" /* `range` */
+ ":region_as_string",
+ _keywords,
+ 0,
+ };
+ if (!_PyArg_ParseTupleAndKeywordsFast(
+ args, kwds, &_parser, ®ion.curl, ®ion.curc, ®ion.sell, ®ion.selc)) {
return NULL;
}
- if (PyTuple_GET_SIZE(args) > 0) {
+ if (PyDict_GET_SIZE(kwds) > 0) {
txt_sel_set(text, region.curl, region.curc, region.sell, region.selc);
}
@@ -98,7 +109,7 @@ PyDoc_STRVAR(bpy_rna_region_from_string_doc,
" The values match Python's slicing logic "
"(negative values count backwards from the end, the end value is not inclusive).\n"
" :type range: Two pairs of ints\n");
-static PyObject *bpy_rna_region_from_string(PyObject *self, PyObject *args)
+static PyObject *bpy_rna_region_from_string(PyObject *self, PyObject *args, PyObject *kwds)
{
BPy_StructRNA *pyrna = (BPy_StructRNA *)self;
Text *text = pyrna->ptr.data;
@@ -107,18 +118,29 @@ static PyObject *bpy_rna_region_from_string(PyObject *self, PyObject *args)
const char *buf;
Py_ssize_t buf_len;
TextRegion region;
- if (!PyArg_ParseTuple(args,
- "s#|((ii)(ii))",
- &buf,
- &buf_len,
- ®ion.curl,
- ®ion.curc,
- ®ion.sell,
- ®ion.selc)) {
+
+ static const char *_keywords[] = {"", "range", NULL};
+ static _PyArg_Parser _parser = {
+ "s#" /* `buf` (positional). */
+ "|$" /* Optional keyword only arguments. */
+ "((ii)(ii))" /* `range` */
+ ":region_from_string",
+ _keywords,
+ 0,
+ };
+ if (!_PyArg_ParseTupleAndKeywordsFast(args,
+ kwds,
+ &_parser,
+ &buf,
+ &buf_len,
+ ®ion.curl,
+ ®ion.curc,
+ ®ion.sell,
+ ®ion.selc)) {
return NULL;
}
- if (PyTuple_GET_SIZE(args) > 1) {
+ if (PyDict_GET_SIZE(kwds) > 0) {
txt_sel_set(text, region.curl, region.curc, region.sell, region.selc);
}
@@ -133,7 +155,7 @@ static PyObject *bpy_rna_region_from_string(PyObject *self, PyObject *args)
PyMethodDef BPY_rna_region_from_string_method_def = {
"region_from_string",
(PyCFunction)bpy_rna_region_from_string,
- METH_VARARGS,
+ METH_VARARGS | METH_KEYWORDS,
bpy_rna_region_from_string_doc,
};
diff --git a/tests/python/bl_pyapi_text.py b/tests/python/bl_pyapi_text.py
index 67e07e7d907..0d8987fb69d 100644
--- a/tests/python/bl_pyapi_text.py
+++ b/tests/python/bl_pyapi_text.py
@@ -40,9 +40,9 @@ class TestText(unittest.TestCase):
)
self.text.write(tmp_text)
# Get string in the middle of the text.
- self.assertEqual(self.text.region_as_string(((1, 0), (1, -1))), "Line 2: test line 2")
+ self.assertEqual(self.text.region_as_string(range=((1, 0), (1, -1))), "Line 2: test line 2")
# Big range test.
- self.assertEqual(self.text.region_as_string(((-10000, -10000), (10000, 10000))), tmp_text)
+ self.assertEqual(self.text.region_as_string(range=((-10000, -10000), (10000, 10000))), tmp_text)
def test_text_region_from_string(self):
tmp_text = (
@@ -52,10 +52,10 @@ class TestText(unittest.TestCase):
)
self.text.write(tmp_text)
# Set string in the middle of the text.
- self.text.region_from_string("line 2", ((1, 0), (1, -1)))
+ self.text.region_from_string("line 2", range=((1, 0), (1, -1)))
self.assertEqual(self.text.as_string(), tmp_text.replace("Line 2: test line 2", "line 2") + "\n")
# Large range test.
- self.text.region_from_string("New Text", ((-10000, -10000), (10000, 10000)))
+ self.text.region_from_string("New Text", range=((-10000, -10000), (10000, 10000)))
self.assertEqual(self.text.as_string(), "New Text\n")
More information about the Bf-blender-cvs
mailing list