From ecee3781e42c22fc307ac1dbb265d7e10c581b27 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Tue, 15 Apr 2025 12:23:36 +0500 Subject: [PATCH] Fix more missing Blender descriptions leading to crashes #6420 --- src/bonsai/bonsai/bim/__init__.py | 6 ++++++ src/bonsai/bonsai/bim/module/alignment/operator.py | 1 + src/bonsai/bonsai/bim/module/cost/operator.py | 1 + src/bonsai/bonsai/bim/module/drawing/operator.py | 1 + src/bonsai/bonsai/bim/module/sequence/operator.py | 7 +++++++ 5 files changed, 16 insertions(+) diff --git a/src/bonsai/bonsai/bim/__init__.py b/src/bonsai/bonsai/bim/__init__.py index 930e067c24..2a86f92f74 100644 --- a/src/bonsai/bonsai/bim/__init__.py +++ b/src/bonsai/bonsai/bim/__init__.py @@ -20,6 +20,7 @@ import os import bpy import bpy.utils.previews import importlib +from bpy_extras.io_utils import ImportHelper, ExportHelper from . import handler, ui, prop, operator from typing import Callable, Union @@ -221,7 +222,12 @@ def on_register(scene): def register(): for cls in classes: + # Prevent crashes in Blender 4.4.0, see #6420. + if issubclass(cls, (ImportHelper, ExportHelper)): + assert getattr(cls, "bl_description", "") or cls.__doc__, cls + bpy.utils.register_class(cls) + bpy.app.handlers.depsgraph_update_post.append(on_register) bpy.app.handlers.undo_post.append(handler.undo_post) bpy.app.handlers.redo_post.append(handler.redo_post) diff --git a/src/bonsai/bonsai/bim/module/alignment/operator.py b/src/bonsai/bonsai/bim/module/alignment/operator.py index fe38ceea40..c11f8ca718 100644 --- a/src/bonsai/bonsai/bim/module/alignment/operator.py +++ b/src/bonsai/bonsai/bim/module/alignment/operator.py @@ -45,6 +45,7 @@ from typing_extensions import assert_never class ImportAlignmentCSV(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): bl_idname = "bim.import_alignment_csv" bl_label = "Import Alignment CSV" + bl_description = " Import alignment from the provided .csv file." bl_options = {"REGISTER", "UNDO"} filename_ext = ".csv" filter_glob: bpy.props.StringProperty(default="*.csv", options={"HIDDEN"}) diff --git a/src/bonsai/bonsai/bim/module/cost/operator.py b/src/bonsai/bonsai/bim/module/cost/operator.py index 7a6bbc4fd6..9a48e7b61c 100644 --- a/src/bonsai/bonsai/bim/module/cost/operator.py +++ b/src/bonsai/bonsai/bim/module/cost/operator.py @@ -536,6 +536,7 @@ class SelectCostScheduleProducts(bpy.types.Operator): class ImportCostScheduleCsv(bpy.types.Operator, ImportHelper, tool.Ifc.Operator): bl_idname = "bim.import_cost_schedule_csv" bl_label = "Import Cost Schedule CSV" + bl_description = "Import cost schdule from the provided .csv file." bl_options = {"REGISTER", "UNDO"} filename_ext = ".csv" filter_glob: bpy.props.StringProperty(default="*.csv", options={"HIDDEN"}) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 71fd2ec299..ad636d5ce3 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -2223,6 +2223,7 @@ class ActivateDrawingFromSheet(bpy.types.Operator, ActivateDrawingBase): class SelectDocIfcFile(bpy.types.Operator, ImportHelper): bl_idname = "bim.select_doc_ifc_file" bl_label = "Select Documentation IFC File" + bl_description = "Selection .ifc file for documentation." bl_options = {"REGISTER", "UNDO"} filter_glob: bpy.props.StringProperty(default="*.ifc;*.ifczip;*.ifcxml", options={"HIDDEN"}) filename_ext = ".ifc" diff --git a/src/bonsai/bonsai/bim/module/sequence/operator.py b/src/bonsai/bonsai/bim/module/sequence/operator.py index dcd80c78e7..ec7d789712 100644 --- a/src/bonsai/bonsai/bim/module/sequence/operator.py +++ b/src/bonsai/bonsai/bim/module/sequence/operator.py @@ -659,6 +659,7 @@ class DisableEditingWorkCalendar(bpy.types.Operator): class ImportCSV(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): bl_idname = "bim.import_csv" bl_label = "Import CSV" + bl_description = "Import work schedule from the provided .csv file." bl_options = {"REGISTER", "UNDO"} filename_ext = ".csv" filter_glob: bpy.props.StringProperty(default="*.csv", options={"HIDDEN"}) @@ -686,6 +687,7 @@ class ImportCSV(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): class ImportP6(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): bl_idname = "bim.import_p6" bl_label = "Import P6" + bl_description = "Import provided .xml P6 file." bl_options = {"REGISTER", "UNDO"} filename_ext = ".xml" filter_glob: bpy.props.StringProperty(default="*.xml", options={"HIDDEN"}) @@ -714,6 +716,7 @@ class ImportP6(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): class ImportP6XER(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): bl_idname = "bim.import_p6xer" bl_label = "Import P6 XER" + bl_description = "Import provided .xer P6 file." bl_options = {"REGISTER", "UNDO"} filename_ext = ".xer" filter_glob: bpy.props.StringProperty(default="*.xer", options={"HIDDEN"}) @@ -742,6 +745,7 @@ class ImportP6XER(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): class ImportPP(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): bl_idname = "bim.import_pp" bl_label = "Import Powerproject .pp" + bl_description = "Import provided .pp file." bl_options = {"REGISTER", "UNDO"} filename_ext = ".pp" filter_glob: bpy.props.StringProperty(default="*.pp", options={"HIDDEN"}) @@ -770,6 +774,7 @@ class ImportPP(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): class ImportMSP(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): bl_idname = "bim.import_msp" bl_label = "Import MSP" + bl_description = "Import provided .xml MSP file." bl_options = {"REGISTER", "UNDO"} filename_ext = ".xml" filter_glob: bpy.props.StringProperty(default="*.xml", options={"HIDDEN"}) @@ -798,6 +803,7 @@ class ImportMSP(bpy.types.Operator, tool.Ifc.Operator, ImportHelper): class ExportMSP(bpy.types.Operator, ExportHelper): bl_idname = "bim.export_msp" bl_label = "Export MSP" + bl_description = "Export work schedule as .xml MSP file." bl_options = {"REGISTER", "UNDO"} filename_ext = ".xml" filter_glob: bpy.props.StringProperty(default="*.xml", options={"HIDDEN"}) @@ -831,6 +837,7 @@ class ExportMSP(bpy.types.Operator, ExportHelper): class ExportP6(bpy.types.Operator, ExportHelper): bl_idname = "bim.export_p6" bl_label = "Export P6" + bl_description = "Export work schedule as .xml P6 file." bl_options = {"REGISTER", "UNDO"} filename_ext = ".xml" filter_glob: bpy.props.StringProperty(default="*.xml", options={"HIDDEN"})