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 <campbell@blender.org>2022-04-08 05:49:02 +0300
committerCampbell Barton <campbell@blender.org>2022-04-08 06:28:55 +0300
commitee292a1d66b22d8707a493550138ead91b3c0ccc (patch)
treece67a52e01e4dc3bbc1841b01615b3641f431bcc
parent982aea88e0d74020c62c2054a45eeafa56c8ca30 (diff)
PyAPI: use keyword only arguments for Text.region_{from/to} string
This is the convention for most parts of Blender Python API.
-rw-r--r--source/blender/python/intern/bpy_rna_text.c52
-rw-r--r--tests/python/bl_pyapi_text.py8
2 files changed, 41 insertions, 19 deletions
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))", &region.curl, &region.curc, &region.sell, &region.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, &region.curl, &region.curc, &region.sell, &region.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,
- &region.curl,
- &region.curc,
- &region.sell,
- &region.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,
+ &region.curl,
+ &region.curc,
+ &region.sell,
+ &region.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")