From 11df5065e449b28afb5d46ff57fac5b336200f94 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 27 Nov 2023 11:18:38 +0500 Subject: [PATCH] bim.validate_ifc_file to detect if there where no validation errors --- .../blenderbim/bim/module/debug/operator.py | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/debug/operator.py b/src/blenderbim/blenderbim/bim/module/debug/operator.py index 2b7d767a88..131d35f940 100644 --- a/src/blenderbim/blenderbim/bim/module/debug/operator.py +++ b/src/blenderbim/blenderbim/bim/module/debug/operator.py @@ -146,16 +146,33 @@ class ValidateIfcFile(bpy.types.Operator): @classmethod def poll(cls, context): - return IfcStore.get_file() + return tool.Ifc.get() def execute(self, context): import ifcopenshell.validate + class LogDetectionHandler(logging.Handler): + message_logged = False + + def emit(self, record): + if not self.message_logged: + self.message_logged = True + logger = logging.getLogger("validate") logger.setLevel(logging.DEBUG) - ifcopenshell.validate.validate(IfcStore.get_file(), logger, express_rules=True) - self.report({"INFO"}, "Check validation results in the system console.") + # use LogDetectionHandler to check whether there were any validation errors + # during `ifcopenshell.validate.validate` + handler = LogDetectionHandler() + logger.addHandler(handler) + ifcopenshell.validate.validate(tool.Ifc.get(), logger, express_rules=True) + logger.removeHandler(handler) + + if handler.message_logged: + self.report({"INFO"}, "Check validation results in the system console.") + else: + self.report({"INFO"}, "No validation issues found.") + return {"FINISHED"}