Clean/Fix remaining cases of props assignments in resgistrable structs def.
We still had a few deprecated assignements of `bpy.props.xxx` to class members in our API documentation and one of our py tests. Annotations are to be used now. Also remove the section about `register_module` utils, this has been removed in 2.8. Fix T71877: Python API overview sample code warning: class MyMaterialProps contains a property which should be an annotation! Fix T71876: Python API overview references old bpy.utils.register_module function
This commit is contained in:
parent
3fa2b85bfd
commit
eb798de101
Notes:
blender-bot
2023-02-14 08:10:06 +01:00
Referenced by commit 627a344635
, Fix (unreported) broken python resgistrable classes checks logic.
Referenced by issue #71876, Python API overview references old bpy.utils.register_module function
Referenced by issue #71877, Python API overview sample code warning: class MyMaterialProps contains a property which should be an annotation!
|
@ -270,32 +270,6 @@ Using ``bl_idname = 1`` will raise.
|
|||
``TypeError: validating class error: Operator.bl_idname expected a string type, not int``
|
||||
|
||||
|
||||
Multiple-Classes
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
Loading classes into Blender is described above,
|
||||
for simple cases calling :mod:`bpy.utils.register_class` (SomeClass) is sufficient,
|
||||
but when there are many classes or a packages submodule has its own
|
||||
classes it can be tedious to list them all for registration.
|
||||
|
||||
For more convenient loading/unloading :mod:`bpy.utils.register_module` (module)
|
||||
and :mod:`bpy.utils.unregister_module` (module) functions exist.
|
||||
|
||||
A script which defines many of its own operators, panels menus etc. you only need to write:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
def register():
|
||||
bpy.utils.register_module(__name__)
|
||||
|
||||
def unregister():
|
||||
bpy.utils.unregister_module(__name__)
|
||||
|
||||
Internally Blender collects subclasses on registrable types, storing them by the module in which they are defined.
|
||||
By passing the module name to :mod:`bpy.utils.register_module`
|
||||
Blender can register all classes created by this module and its submodules.
|
||||
|
||||
|
||||
Inter Classes Dependencies
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
@ -316,11 +290,11 @@ Say you want to store material settings for a custom engine.
|
|||
import bpy
|
||||
|
||||
class MyMaterialProps(bpy.types.PropertyGroup):
|
||||
my_float = bpy.props.FloatProperty()
|
||||
my_float: bpy.props.FloatProperty()
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(MyMaterialProps)
|
||||
bpy.types.Material.my_custom_props = bpy.props.PointerProperty(type=MyMaterialProps)
|
||||
bpy.types.Material.my_custom_props: bpy.props.PointerProperty(type=MyMaterialProps)
|
||||
|
||||
def unregister():
|
||||
del bpy.types.Material.my_custom_props
|
||||
|
@ -343,15 +317,15 @@ Say you want to store material settings for a custom engine.
|
|||
import bpy
|
||||
|
||||
class MyMaterialSubProps(bpy.types.PropertyGroup):
|
||||
my_float = bpy.props.FloatProperty()
|
||||
my_float: bpy.props.FloatProperty()
|
||||
|
||||
class MyMaterialGroupProps(bpy.types.PropertyGroup):
|
||||
sub_group = bpy.props.PointerProperty(type=MyMaterialSubProps)
|
||||
sub_group: bpy.props.PointerProperty(type=MyMaterialSubProps)
|
||||
|
||||
def register():
|
||||
bpy.utils.register_class(MyMaterialSubProps)
|
||||
bpy.utils.register_class(MyMaterialGroupProps)
|
||||
bpy.types.Material.my_custom_props = bpy.props.PointerProperty(type=MyMaterialGroupProps)
|
||||
bpy.types.Material.my_custom_props: bpy.props.PointerProperty(type=MyMaterialGroupProps)
|
||||
|
||||
def unregister():
|
||||
del bpy.types.Material.my_custom_props
|
||||
|
@ -378,7 +352,7 @@ For example:
|
|||
.. code-block:: python
|
||||
|
||||
# add a new property to an existing type
|
||||
bpy.types.Object.my_float = bpy.props.FloatProperty()
|
||||
bpy.types.Object.my_float: bpy.props.FloatProperty()
|
||||
# remove
|
||||
del bpy.types.Object.my_float
|
||||
|
||||
|
@ -388,14 +362,14 @@ This works just as well for PropertyGroup subclasses you define yourself.
|
|||
|
||||
class MyPropGroup(bpy.types.PropertyGroup):
|
||||
pass
|
||||
MyPropGroup.my_float = bpy.props.FloatProperty()
|
||||
MyPropGroup.my_float: bpy.props.FloatProperty()
|
||||
|
||||
...this is equivalent to:
|
||||
|
||||
.. code-block:: python
|
||||
|
||||
class MyPropGroup(bpy.types.PropertyGroup):
|
||||
my_float = bpy.props.FloatProperty()
|
||||
my_float: bpy.props.FloatProperty()
|
||||
|
||||
|
||||
Dynamic Defined-Classes (Advanced)
|
||||
|
|
|
@ -54,8 +54,8 @@ def abort_if_false(expr, msg=None):
|
|||
|
||||
|
||||
class TestClass(bpy.types.PropertyGroup):
|
||||
test_prop = bpy.props.PointerProperty(type=bpy.types.Object)
|
||||
name = bpy.props.StringProperty()
|
||||
test_prop: bpy.props.PointerProperty(type=bpy.types.Object)
|
||||
name: bpy.props.StringProperty()
|
||||
|
||||
|
||||
def get_scene(lib_name, sce_name):
|
||||
|
@ -213,13 +213,14 @@ def test_restrictions1():
|
|||
bl_idname = 'scene.test_op'
|
||||
bl_label = 'Test'
|
||||
bl_options = {"INTERNAL"}
|
||||
str_prop = bpy.props.StringProperty(name="str_prop")
|
||||
|
||||
str_prop: bpy.props.StringProperty(name="str_prop")
|
||||
|
||||
# disallow registration of datablock properties in operators
|
||||
# will be checked in the draw method (test manually)
|
||||
# also, see console:
|
||||
# ValueError: bpy_struct "SCENE_OT_test_op" doesn't support datablock properties
|
||||
id_prop = bpy.props.PointerProperty(type=bpy.types.Object)
|
||||
id_prop: bpy.props.PointerProperty(type=bpy.types.Object)
|
||||
|
||||
def execute(self, context):
|
||||
return {'FINISHED'}
|
||||
|
@ -291,7 +292,7 @@ def test_regressions():
|
|||
# test restrictions for datablock pointers
|
||||
def test_restrictions2():
|
||||
class TestClassCollection(bpy.types.PropertyGroup):
|
||||
prop = bpy.props.CollectionProperty(
|
||||
prop: bpy.props.CollectionProperty(
|
||||
name="prop_array",
|
||||
type=TestClass)
|
||||
bpy.utils.register_class(TestClassCollection)
|
||||
|
@ -299,9 +300,9 @@ def test_restrictions2():
|
|||
class TestPrefs(bpy.types.AddonPreferences):
|
||||
bl_idname = "testprefs"
|
||||
# expecting crash during registering
|
||||
my_prop2 = bpy.props.PointerProperty(type=TestClass)
|
||||
my_prop2: bpy.props.PointerProperty(type=TestClass)
|
||||
|
||||
prop = bpy.props.PointerProperty(
|
||||
prop: bpy.props.PointerProperty(
|
||||
name="prop",
|
||||
type=TestClassCollection,
|
||||
description="test")
|
||||
|
@ -309,7 +310,7 @@ def test_restrictions2():
|
|||
bpy.types.Addon.a = bpy.props.PointerProperty(type=bpy.types.Object)
|
||||
|
||||
class TestUIList(UIList):
|
||||
test = bpy.props.PointerProperty(type=bpy.types.Object)
|
||||
test: bpy.props.PointerProperty(type=bpy.types.Object)
|
||||
|
||||
def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index):
|
||||
layout.prop(item, "name", text="", emboss=False, icon_value=icon)
|
||||
|
|
Loading…
Reference in New Issue