diff options
author | Campbell Barton <ideasman42@gmail.com> | 2021-02-21 13:21:18 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2021-02-21 14:37:53 +0300 |
commit | 08dbc4f996e4e95f3ab64f7bb3e1193700c585f5 (patch) | |
tree | 8f9d121258c5f88cf825aa6e3030ccc7bbe983cd /source/blender/python/intern/bpy_props.c | |
parent | de67e3c0c02e9d08022cff58338099d287505f91 (diff) |
PyAPI: use postponed annotations to support Python 3.10
Support Python 3.10a5 or 3.9x with support explicitly enabled.
- Enable Python's postponed annotations for Blender's RNA classes
types registered on startup.
- Using postponed annotations has implications for how they are defined,
since they must evaluate in the modules name-space instead of the
classes name-space. See changes to annotations in `release/scripts`.
- Use `from __future__ import annotations` at the top of the module
to ensure the script will run with Python 3.10.
- Old logic is kept since it could be used if PEP-649 is supported.
Resolves T83626
Ref D10474
Diffstat (limited to 'source/blender/python/intern/bpy_props.c')
-rw-r--r-- | source/blender/python/intern/bpy_props.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/python/intern/bpy_props.c b/source/blender/python/intern/bpy_props.c index 2b3599df86e..3cc894826bd 100644 --- a/source/blender/python/intern/bpy_props.c +++ b/source/blender/python/intern/bpy_props.c @@ -227,6 +227,20 @@ static PyObject *bpy_prop_deferred_repr(BPy_PropDeferred *self) return PyUnicode_FromFormat("<%.200s, %R, %R>", Py_TYPE(self)->tp_name, self->fn, self->kw); } +/** + * HACK: needed by `typing.get_type_hints` + * with `from __future__ import annotations` enabled or when using Python 3.10 or newer. + * + * When callable this object type passes the test for being an acceptable annotation. + */ +static PyObject *bpy_prop_deferred_call(BPy_PropDeferred *UNUSED(self), + PyObject *UNUSED(args), + PyObject *UNUSED(kw)) +{ + /* Dummy value. */ + Py_RETURN_NONE; +} + /* Get/Set Items. */ /** @@ -257,7 +271,6 @@ static PyGetSetDef bpy_prop_deferred_getset[] = { {NULL, NULL, NULL, NULL, NULL} /* Sentinel */ }; - PyTypeObject bpy_prop_deferred_Type = { PyVarObject_HEAD_INIT(NULL, 0) @@ -265,6 +278,7 @@ PyTypeObject bpy_prop_deferred_Type = { .tp_basicsize = sizeof(BPy_PropDeferred), .tp_dealloc = (destructor)bpy_prop_deferred_dealloc, .tp_repr = (reprfunc)bpy_prop_deferred_repr, + .tp_call = (ternaryfunc)bpy_prop_deferred_call, .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, |