Cleanup: Move Blender utility functions from `dumper.py` to `utils.py`

refactor
Jonas Holzman 2025-03-24 16:11:59 +01:00
parent fc34669af7
commit fb1caf9174
2 changed files with 21 additions and 21 deletions

View File

@ -8,15 +8,6 @@ import bpy
from . import utils from . import utils
def get_default(prop: bpy.types.Property):
"""Get the default value of a Blender property"""
if getattr(prop, "is_array", False):
return list(prop.default_array)
elif hasattr(prop, "default"):
return prop.default
def get_dumper(bl_object: bpy.types.bpy_struct) -> type[Dumper]: def get_dumper(bl_object: bpy.types.bpy_struct) -> type[Dumper]:
"""Get the corresponding dumper for a given Blender object, or its closest base type using its MRO""" """Get the corresponding dumper for a given Blender object, or its closest base type using its MRO"""
@ -53,13 +44,6 @@ def load_nodes(data, node_tree):
Dumper.pointers.clear() Dumper.pointers.clear()
def set_attribute(bl_object, attr, value):
try:
setattr(bl_object, attr, value)
except Exception as e:
print(e)
class Dumper: class Dumper:
pointers = {} pointers = {}
includes = [] includes = []
@ -118,7 +102,7 @@ class Dumper:
value = cls.pointers[value] value = cls.pointers[value]
elif value is None: elif value is None:
set_attribute(bl_object, key, value) utils.set_bl_attribute(bl_object, key, value)
else: else:
bl_type = prop.fixed_type.bl_rna.type_recast() bl_type = prop.fixed_type.bl_rna.type_recast()
@ -137,14 +121,14 @@ class Dumper:
value = attr value = attr
if not prop.is_readonly: if not prop.is_readonly:
set_attribute(bl_object, key, value) utils.set_bl_attribute(bl_object, key, value)
# Some coll needs a manual update like curve mapping # Some coll needs a manual update like curve mapping
if hasattr(attr, "update"): if hasattr(attr, "update"):
attr.update() attr.update()
elif not prop.is_readonly: elif not prop.is_readonly:
set_attribute(bl_object, key, value) utils.set_bl_attribute(bl_object, key, value)
continue continue
# return bl_object # return bl_object
@ -231,7 +215,7 @@ class PropCollection(Dumper):
params = value["_new"] params = value["_new"]
else: else:
params = { params = {
k: value.get(k, get_default(v)) k: value.get(k, utils.get_bl_default(v))
for k, v in new_func.parameters.items()[:-1] for k, v in new_func.parameters.items()[:-1]
} }
@ -531,7 +515,7 @@ class Points(PropCollection):
@classmethod @classmethod
def load(cls, values, coll): def load(cls, values, coll):
new_func = coll.bl_rna.functions["new"] new_func = coll.bl_rna.functions["new"]
params = {k: get_default(v) + 1.1 for k, v in new_func.parameters.items()[:-1]} params = {k: utils.get_bl_default(v) + 1.1 for k, v in new_func.parameters.items()[:-1]}
# Match the same number of elements in collection # Match the same number of elements in collection
if len(values) > len(coll): if len(values) > len(coll):

View File

@ -1,6 +1,22 @@
import bpy
def all_subclasses(cls): def all_subclasses(cls):
return set(cls.__subclasses__()).union( return set(cls.__subclasses__()).union(
[s for c in cls.__subclasses__() for s in all_subclasses(c)] [s for c in cls.__subclasses__() for s in all_subclasses(c)]
) )
def get_bl_default(prop: bpy.types.Property):
"""Get the default value of a Blender property"""
if getattr(prop, "is_array", False):
return list(prop.default_array)
elif hasattr(prop, "default"):
return prop.default
def set_bl_attribute(bl_object, attr, value):
try:
setattr(bl_object, attr, value)
except Exception as e:
print(e)