[Bf-blender-cvs] [08dbc4f996e] master: PyAPI: use postponed annotations to support Python 3.10

Campbell Barton noreply at git.blender.org
Sun Feb 21 12:39:24 CET 2021


Commit: 08dbc4f996e4e95f3ab64f7bb3e1193700c585f5
Author: Campbell Barton
Date:   Sun Feb 21 21:21:18 2021 +1100
Branches: master
https://developer.blender.org/rB08dbc4f996e4e95f3ab64f7bb3e1193700c585f5

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

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

M	intern/cycles/blender/addon/__init__.py
M	intern/cycles/blender/addon/engine.py
M	intern/cycles/blender/addon/operators.py
M	intern/cycles/blender/addon/osl.py
M	intern/cycles/blender/addon/presets.py
M	intern/cycles/blender/addon/properties.py
M	intern/cycles/blender/addon/ui.py
M	intern/cycles/blender/addon/version_update.py
M	release/scripts/modules/bpy_extras/object_utils.py
M	release/scripts/startup/bl_operators/__init__.py
M	release/scripts/startup/bl_operators/add_mesh_torus.py
M	release/scripts/startup/bl_operators/anim.py
M	release/scripts/startup/bl_operators/assets.py
M	release/scripts/startup/bl_operators/console.py
M	release/scripts/startup/bl_operators/constraint.py
M	release/scripts/startup/bl_operators/node.py
M	release/scripts/startup/bl_operators/wm.py
M	source/blender/python/intern/bpy_props.c
M	source/blender/python/intern/bpy_rna.c

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

diff --git a/intern/cycles/blender/addon/__init__.py b/intern/cycles/blender/addon/__init__.py
index b1deb5cb64e..10b95133912 100644
--- a/intern/cycles/blender/addon/__init__.py
+++ b/intern/cycles/blender/addon/__init__.py
@@ -15,6 +15,7 @@
 #
 
 # <pep8 compliant>
+from __future__ import annotations
 
 bl_info = {
     "name": "Cycles Render Engine",
diff --git a/intern/cycles/blender/addon/engine.py b/intern/cycles/blender/addon/engine.py
index 7595261f523..dfa696714fb 100644
--- a/intern/cycles/blender/addon/engine.py
+++ b/intern/cycles/blender/addon/engine.py
@@ -15,6 +15,7 @@
 #
 
 # <pep8 compliant>
+from __future__ import annotations
 
 
 def _is_using_buggy_driver():
diff --git a/intern/cycles/blender/addon/operators.py b/intern/cycles/blender/addon/operators.py
index 087e5b666a5..dca727e316e 100644
--- a/intern/cycles/blender/addon/operators.py
+++ b/intern/cycles/blender/addon/operators.py
@@ -15,6 +15,7 @@
 #
 
 # <pep8 compliant>
+from __future__ import annotations
 
 import bpy
 from bpy.types import Operator
diff --git a/intern/cycles/blender/addon/osl.py b/intern/cycles/blender/addon/osl.py
index 4c6e7952491..d4c3c447951 100644
--- a/intern/cycles/blender/addon/osl.py
+++ b/intern/cycles/blender/addon/osl.py
@@ -15,6 +15,7 @@
 #
 
 # <pep8 compliant>
+from __future__ import annotations
 
 import bpy
 import _cycles
diff --git a/intern/cycles/blender/addon/presets.py b/intern/cycles/blender/addon/presets.py
index 78a8605e93f..04b18b38927 100644
--- a/intern/cycles/blender/addon/presets.py
+++ b/intern/cycles/blender/addon/presets.py
@@ -15,6 +15,7 @@
 #
 
 # <pep8 compliant>
+from __future__ import annotations
 
 from bl_operators.presets import AddPresetBase
 from bpy.types import Operator
diff --git a/intern/cycles/blender/addon/properties.py b/intern/cycles/blender/addon/properties.py
index dd218d93d32..0708c371a0e 100644
--- a/intern/cycles/blender/addon/properties.py
+++ b/intern/cycles/blender/addon/properties.py
@@ -15,6 +15,7 @@
 #
 
 # <pep8 compliant>
+from __future__ import annotations
 
 import bpy
 from bpy.props import (
@@ -841,7 +842,7 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
             ('MEGA', "Mega", ""),
             ('SPLIT', "Split", ""),
         ),
-        update=_devices_update_callback
+        update=CyclesRenderSettings._devices_update_callback
     )
 
     debug_opencl_device_type: EnumProperty(
@@ -855,11 +856,9 @@ class CyclesRenderSettings(bpy.types.PropertyGroup):
             ('GPU', "GPU", ""),
             ('ACCELERATOR', "Accelerator", ""),
         ),
-        update=_devices_update_callback
+        update=CyclesRenderSettings._devices_update_callback
     )
 
-    del _devices_update_callback
-
     debug_use_opencl_debug: BoolProperty(name="Debug OpenCL", default=False)
 
     debug_opencl_mem_limit: IntProperty(
@@ -1481,7 +1480,7 @@ class CyclesPreferences(bpy.types.AddonPreferences):
     compute_device_type: EnumProperty(
         name="Compute Device Type",
         description="Device to use for computation (rendering with Cycles)",
-        items=get_device_types,
+        items=CyclesPreferences.get_device_types,
     )
 
     devices: bpy.props.CollectionProperty(type=CyclesDeviceSettings)
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 4576cf4e413..68f6291b373 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -15,6 +15,7 @@
 #
 
 # <pep8 compliant>
+from __future__ import annotations
 
 import bpy
 from bpy_extras.node_utils import find_node_input
diff --git a/intern/cycles/blender/addon/version_update.py b/intern/cycles/blender/addon/version_update.py
index cdff3c2b915..aeecc265399 100644
--- a/intern/cycles/blender/addon/version_update.py
+++ b/intern/cycles/blender/addon/version_update.py
@@ -15,6 +15,7 @@
 #
 
 # <pep8 compliant>
+from __future__ import annotations
 
 import bpy
 import math
diff --git a/release/scripts/modules/bpy_extras/object_utils.py b/release/scripts/modules/bpy_extras/object_utils.py
index 977cbc20f0d..8afb09882fd 100644
--- a/release/scripts/modules/bpy_extras/object_utils.py
+++ b/release/scripts/modules/bpy_extras/object_utils.py
@@ -17,6 +17,7 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8-80 compliant>
+from __future__ import annotations
 
 __all__ = (
     "add_object_align_init",
@@ -180,7 +181,7 @@ class AddObjectHelper:
             ('CURSOR', "3D Cursor", "Use the 3D cursor orientation for the new object"),
         ),
         default='WORLD',
-        update=align_update_callback,
+        update=AddObjectHelper.align_update_callback,
     )
     location: FloatVectorProperty(
         name="Location",
diff --git a/release/scripts/startup/bl_operators/__init__.py b/release/scripts/startup/bl_operators/__init__.py
index e91d3b3ce60..7e6f14a0a51 100644
--- a/release/scripts/startup/bl_operators/__init__.py
+++ b/release/scripts/startup/bl_operators/__init__.py
@@ -17,6 +17,7 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8 compliant>
+from __future__ import annotations
 
 # support reloading sub-modules
 if "bpy" in locals():
diff --git a/release/scripts/startup/bl_operators/add_mesh_torus.py b/release/scripts/startup/bl_operators/add_mesh_torus.py
index c2f9a4189cf..0ebb6ae27e1 100644
--- a/release/scripts/startup/bl_operators/add_mesh_torus.py
+++ b/release/scripts/startup/bl_operators/add_mesh_torus.py
@@ -17,6 +17,8 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8-80 compliant>
+from __future__ import annotations
+
 import bpy
 from bpy.types import Operator
 
@@ -156,7 +158,7 @@ class AddTorus(Operator, object_utils.AddObjectHelper):
             ('EXT_INT', "Exterior/Interior",
              "Use the exterior/interior radii for torus dimensions"),
         ),
-        update=mode_update_callback,
+        update=AddTorus.mode_update_callback,
     )
     major_radius: FloatProperty(
         name="Major Radius",
diff --git a/release/scripts/startup/bl_operators/anim.py b/release/scripts/startup/bl_operators/anim.py
index 279b66a0833..85290bfe3f0 100644
--- a/release/scripts/startup/bl_operators/anim.py
+++ b/release/scripts/startup/bl_operators/anim.py
@@ -17,6 +17,7 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8-80 compliant>
+from __future__ import annotations
 
 if "bpy" in locals():
     from importlib import reload
diff --git a/release/scripts/startup/bl_operators/assets.py b/release/scripts/startup/bl_operators/assets.py
index 317555280e5..e7fbb155b2f 100644
--- a/release/scripts/startup/bl_operators/assets.py
+++ b/release/scripts/startup/bl_operators/assets.py
@@ -16,6 +16,9 @@
 #
 # ##### END GPL LICENSE BLOCK #####
 
+# <pep8 compliant>
+from __future__ import annotations
+
 import bpy
 
 from bpy_extras.asset_utils import (
diff --git a/release/scripts/startup/bl_operators/console.py b/release/scripts/startup/bl_operators/console.py
index bffac4eef55..231dade820d 100644
--- a/release/scripts/startup/bl_operators/console.py
+++ b/release/scripts/startup/bl_operators/console.py
@@ -17,6 +17,7 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8-80 compliant>
+from __future__ import annotations
 
 import bpy
 from bpy.types import Operator
diff --git a/release/scripts/startup/bl_operators/constraint.py b/release/scripts/startup/bl_operators/constraint.py
index 213122952ae..49fc6a04112 100644
--- a/release/scripts/startup/bl_operators/constraint.py
+++ b/release/scripts/startup/bl_operators/constraint.py
@@ -17,6 +17,7 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8-80 compliant>
+from __future__ import annotations
 
 from bpy.types import (
     Operator,
diff --git a/release/scripts/startup/bl_operators/node.py b/release/scripts/startup/bl_operators/node.py
index 1c5ebb4fa17..7884a7287b7 100644
--- a/release/scripts/startup/bl_operators/node.py
+++ b/release/scripts/startup/bl_operators/node.py
@@ -17,6 +17,7 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8-80 compliant>
+from __future__ import annotations
 
 import bpy
 import nodeitems_utils
@@ -218,7 +219,7 @@ class NODE_OT_add_search(NodeAddOperator, Operator):
     node_item: EnumProperty(
         name="Node Type",
         description="Node type",
-        items=node_enum_items,
+        items=NODE_OT_add_search.node_enum_items,
     )
 
     def execute(self, context):
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index c5457713d36..db15f4597bf 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -17,6 +17,7 @@
 # ##### END GPL LICENSE BLOCK #####
 
 # <pep8 compliant>
+from __future__ import annotations
 
 import bpy
 from bpy.types import (
@@ -859,9 +860,7 @@ class WM_OT_url_open_preset(Operator):
 
     type: EnumProperty(
         name="Site",
-        items=lambda self, _context: (
-            item for (item, _) in WM_OT_url_open_preset.preset_items
-        ),
+        items=WM_OT_url_open_preset._preset_items,
     )
 
     id: StringProperty(
@@ -916,6 +915,10 @@ class WM_OT_url_open_preset(Operator):
          "https://www.blender.org/about/credits/"),
     ]
 
+    @staticmethod
+    def _preset_items(_self, _context):
+        return (item for (item, _) in WM_OT_url_open_preset.preset_items)
+
     def execute(self, context):
         url = None
         type = self.type
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

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list