From 12c08b0697c43f7a09af06aa06fe33ce57eae3f7 Mon Sep 17 00:00:00 2001 From: Andrej730 Date: Mon, 25 Nov 2024 18:15:35 +0500 Subject: [PATCH] typing --- src/bonsai/bonsai/bim/module/drawing/operator.py | 2 ++ src/bonsai/bonsai/bim/module/model/opening.py | 6 +++--- src/bonsai/bonsai/bim/module/tester/data.py | 9 +++++---- src/bonsai/bonsai/tool/collector.py | 4 ++-- src/bonsai/bonsai/tool/model.py | 1 + src/bonsai/bonsai/tool/tester.py | 8 ++++++-- src/ifcopenshell-python/ifcopenshell/util/element.py | 4 ++-- 7 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/bonsai/bonsai/bim/module/drawing/operator.py b/src/bonsai/bonsai/bim/module/drawing/operator.py index 5da4678890..f6bb367392 100644 --- a/src/bonsai/bonsai/bim/module/drawing/operator.py +++ b/src/bonsai/bonsai/bim/module/drawing/operator.py @@ -3036,6 +3036,8 @@ class EditSheet(bpy.types.Operator, tool.Ifc.Operator): identification: bpy.props.StringProperty() name: bpy.props.StringProperty() + document_type: Literal["SHEET", "TITLEBLOCK", "EMBEDDED"] + def invoke(self, context, event): self.props = context.scene.DocProperties sheet = tool.Ifc.get().by_id(self.props.sheets[self.props.active_sheet_index].ifc_definition_id) diff --git a/src/bonsai/bonsai/bim/module/model/opening.py b/src/bonsai/bonsai/bim/module/model/opening.py index 6b91a6056b..9520439ac8 100644 --- a/src/bonsai/bonsai/bim/module/model/opening.py +++ b/src/bonsai/bonsai/bim/module/model/opening.py @@ -610,7 +610,7 @@ class ShowBooleans(Operator, tool.Ifc.Operator, AddObjectHelper): obj = context.active_object unit_scale = ifcopenshell.util.unit.calculate_unit_scale(tool.Ifc.get()) representation = tool.Ifc.get().by_id(obj.data.BIMMeshProperties.ifc_definition_id) - booleans = [] + booleans: list[ifcopenshell.entity_instance] = [] for item in representation.Items: booleans.extend(self.get_booleans(item)) @@ -668,14 +668,14 @@ class ShowBooleans(Operator, tool.Ifc.Operator, AddObjectHelper): DecorationsHandler.install(bpy.context) return {"FINISHED"} - def get_booleans(self, item): + def get_booleans(self, item: ifcopenshell.entity_instance) -> list[ifcopenshell.entity_instance]: results = [] if item.is_a("IfcBooleanResult"): results.extend(self.get_booleans(item.FirstOperand)) results.append(item.SecondOperand) return results - def create_half_space_solid(self): + def create_half_space_solid(self) -> bpy.types.Object: bm = bmesh.new() bmesh.ops.create_grid(bm, size=0.5) bm.verts.ensure_lookup_table() diff --git a/src/bonsai/bonsai/bim/module/tester/data.py b/src/bonsai/bonsai/bim/module/tester/data.py index fb5ad0fd35..4538475d79 100644 --- a/src/bonsai/bonsai/bim/module/tester/data.py +++ b/src/bonsai/bonsai/bim/module/tester/data.py @@ -18,6 +18,7 @@ import bpy import bonsai.tool as tool +import ifctester.reporter def refresh(): @@ -34,12 +35,12 @@ class TesterData: cls.is_loaded = True @classmethod - def has_report(cls): - return tool.Tester.report + def has_report(cls) -> bool: + return bool(tool.Tester.report) @classmethod - def specification(cls): + def specification(cls) -> list[ifctester.reporter.ResultsSpecification]: if not tool.Tester.report: - return {} + return [] props = bpy.context.scene.IfcTesterProperties return tool.Tester.report[props.active_specification_index] diff --git a/src/bonsai/bonsai/tool/collector.py b/src/bonsai/bonsai/tool/collector.py index 40382258cd..2754f708ad 100644 --- a/src/bonsai/bonsai/tool/collector.py +++ b/src/bonsai/bonsai/tool/collector.py @@ -164,7 +164,7 @@ class Collector(bonsai.core.tool.Collector): pass @classmethod - def set_layer_collection_visibility(cls, layer_collection): + def set_layer_collection_visibility(cls, layer_collection: bpy.types.LayerCollection) -> None: name = layer_collection.collection.name if name in ( "IfcTypeProduct", @@ -178,7 +178,7 @@ class Collector(bonsai.core.tool.Collector): layer_collection.hide_viewport = False @classmethod - def reset_default_visibility(cls): + def reset_default_visibility(cls) -> None: project = tool.Ifc.get_object(tool.Ifc.get().by_type("IfcProject")[0]) project_collection = project.BIMObjectProperties.collection for layer_collection in bpy.context.view_layer.layer_collection.children: diff --git a/src/bonsai/bonsai/tool/model.py b/src/bonsai/bonsai/tool/model.py index 76d0d24198..5ee1ff193d 100644 --- a/src/bonsai/bonsai/tool/model.py +++ b/src/bonsai/bonsai/tool/model.py @@ -490,6 +490,7 @@ class Model(bonsai.core.tool.Model): @classmethod def clear_scene_openings(cls) -> None: + """Clear removed scene openings.""" props = bpy.context.scene.BIMModelProperties has_deleted_opening = True while has_deleted_opening: diff --git a/src/bonsai/bonsai/tool/tester.py b/src/bonsai/bonsai/tool/tester.py index e806251437..2d2992444a 100644 --- a/src/bonsai/bonsai/tool/tester.py +++ b/src/bonsai/bonsai/tool/tester.py @@ -16,7 +16,11 @@ # You should have received a copy of the GNU General Public License # along with Bonsai. If not, see . +import ifctester.ids +import ifctester.reporter +from typing import Union + class Tester: - specs = None - report = {} + specs: Union[ifctester.ids.Ids, None] = None + report: list[ifctester.reporter.ResultsSpecification] = [] diff --git a/src/ifcopenshell-python/ifcopenshell/util/element.py b/src/ifcopenshell-python/ifcopenshell/util/element.py index 353634d81c..9f297ff673 100644 --- a/src/ifcopenshell-python/ifcopenshell/util/element.py +++ b/src/ifcopenshell-python/ifcopenshell/util/element.py @@ -20,7 +20,7 @@ import ifcopenshell import ifcopenshell.guid import ifcopenshell.util.element import ifcopenshell.util.representation -from typing import Any, Callable, Optional, Union, Literal, overload +from typing import Any, Callable, Optional, Union, Literal, overload, Sequence from collections import namedtuple @@ -1518,7 +1518,7 @@ def copy(ifc_file: ifcopenshell.file, element: ifcopenshell.entity_instance) -> def copy_deep( ifc_file: ifcopenshell.file, element: ifcopenshell.entity_instance, - exclude: Optional[list[str]] = None, + exclude: Optional[Sequence[str]] = None, exclude_callback: Optional[Callable[[ifcopenshell.entity_instance], bool]] = None, copied_entities: Optional[dict[int, ifcopenshell.entity_instance]] = None, ) -> ifcopenshell.entity_instance: