Apply black formatting and ruff isort fixes

Pre-commit checklist: black + ruff check.

Generated with the assistance of an AI coding tool.
This commit is contained in:
Gorgious56
2026-06-22 11:03:47 +02:00
parent 6367de6102
commit 27b0b920a9
11 changed files with 67 additions and 149 deletions
@@ -44,13 +44,9 @@ class TestAddClipBoxForSourceSpatial(NewFile):
storey = ifc.create_entity("IfcBuildingStorey")
wall_a, _ = _make_ifc_cube(ifc, "IfcWall", location=(0.0, 0.0, 0.0), size=2.0)
wall_b, _ = _make_ifc_cube(ifc, "IfcWall", location=(4.0, 0.0, 0.0), size=2.0)
ifcopenshell.api.spatial.assign_container(
ifc, products=[wall_a, wall_b], relating_structure=storey
)
ifcopenshell.api.spatial.assign_container(ifc, products=[wall_a, wall_b], relating_structure=storey)
result = bpy.ops.bim.add_clip_box_for_source(
source_kind="SPATIAL", source_id=str(storey.id())
)
result = bpy.ops.bim.add_clip_box_for_source(source_kind="SPATIAL", source_id=str(storey.id()))
assert result == {"FINISHED"}
scene_props = tool.ClipBox.get_scene_props()
@@ -71,9 +67,7 @@ class TestAddClipBoxForSourceClass(NewFile):
_make_ifc_cube(ifc, "IfcWall", location=(4.0, 0.0, 0.0), size=2.0)
_make_ifc_cube(ifc, "IfcWindow", location=(20.0, 0.0, 0.0), size=2.0)
result = bpy.ops.bim.add_clip_box_for_source(
source_kind="CLASS", source_id="IfcWall"
)
result = bpy.ops.bim.add_clip_box_for_source(source_kind="CLASS", source_id="IfcWall")
assert result == {"FINISHED"}
scene_props = tool.ClipBox.get_scene_props()
@@ -93,9 +87,7 @@ class TestAddClipBoxForSourceEmpty(NewFile):
walltype = ifc.create_entity("IfcWallType")
# No occurrences linked — TYPE source resolves to 0 elements.
with pytest.raises(RuntimeError, match="No elements found"):
bpy.ops.bim.add_clip_box_for_source(
source_kind="TYPE", source_id=str(walltype.id())
)
bpy.ops.bim.add_clip_box_for_source(source_kind="TYPE", source_id=str(walltype.id()))
scene_props = tool.ClipBox.get_scene_props()
assert len(scene_props.clip_boxes) == 0
@@ -105,9 +97,7 @@ class TestAddClipBoxForSourceEmpty(NewFile):
from bonsai.bim.module.clip_box import data as clip_data
with pytest.raises(RuntimeError, match="No source selected"):
bpy.ops.bim.add_clip_box_for_source(
source_kind="SPATIAL", source_id=clip_data.NO_OPTIONS_ID
)
bpy.ops.bim.add_clip_box_for_source(source_kind="SPATIAL", source_id=clip_data.NO_OPTIONS_ID)
scene_props = tool.ClipBox.get_scene_props()
assert len(scene_props.clip_boxes) == 0
@@ -153,9 +153,7 @@ def _exec_align_view(axis: int, is_max: bool):
if region is None:
continue
with bpy.context.temp_override(area=area, region=region):
result = bpy.ops.bim.align_view_to_clip_face(
"EXEC_DEFAULT", axis=axis, is_max=is_max
)
result = bpy.ops.bim.align_view_to_clip_face("EXEC_DEFAULT", axis=axis, is_max=is_max)
assert result == {"FINISHED"}
return bpy.context.space_data.region_3d
pytest.skip("No VIEW_3D area available")
@@ -190,7 +188,9 @@ class TestAlignViewToClipFace(NewFile):
expected_up = (clip_box.matrix_world.to_quaternion() @ Vector((0.0, 0.0, 1.0))).normalized()
up_world = rv3d.view_rotation @ Vector((0.0, 1.0, 0.0))
assert (up_world - expected_up).length < 1e-3, (
assert (
up_world - expected_up
).length < 1e-3, (
f"Side-face view must have box-local +Z as up; expected {tuple(expected_up)}, got {tuple(up_world)}"
)
@@ -217,9 +217,9 @@ class TestAlignViewToClipFace(NewFile):
expected_up = (clip_box.matrix_world.to_quaternion() @ Vector((0.0, 0.0, 1.0))).normalized()
up_world = rv3d.view_rotation @ Vector((0.0, 1.0, 0.0))
assert (up_world - expected_up).length < 1e-3, (
f"X-rotated box must use box-local Z; expected {tuple(expected_up)}, got {tuple(up_world)}"
)
assert (
up_world - expected_up
).length < 1e-3, f"X-rotated box must use box-local Z; expected {tuple(expected_up)}, got {tuple(up_world)}"
def test_align_view_uses_box_local_y_up_for_top_face(self):
# Top face (local +Z outward) follows Blender's numpad-7
@@ -257,9 +257,9 @@ class TestNotPersistedToProjectPset(NewFile):
# Whatever the pset stores, it must not carry this scene-only toggle.
for key in pset:
assert "clip_only_ifc" not in key.lower(), (
f"Project pset unexpectedly carries the scene-only toggle (key {key!r})"
)
assert (
"clip_only_ifc" not in key.lower()
), f"Project pset unexpectedly carries the scene-only toggle (key {key!r})"
def test_load_from_pset_does_not_touch_clip_only_ifc_products(self):
# Round-trip: set the toggle on the Scene, simulate a pset load, and
@@ -154,9 +154,7 @@ class TestFrontFacingFaceMask:
def test_wrong_length_raises(self):
with pytest.raises(ValueError, match="expected 6 face normals"):
face_quad.front_facing_face_mask(
[(1.0, 0.0, 0.0), (-1.0, 0.0, 0.0)], (0.0, 0.0, -1.0)
)
face_quad.front_facing_face_mask([(1.0, 0.0, 0.0), (-1.0, 0.0, 0.0)], (0.0, 0.0, -1.0))
# ----------------------------------------------------- apply_face_quad_layout (front/back) ---
@@ -259,9 +257,7 @@ class TestApplyFaceQuadLayout:
quads = [_FakeQuad() for _ in range(6)]
outlines = [_FakeOutline() for _ in range(6)]
# View toward +X: the +X face is at world +X for a standard box.
view_rotation = Vector((0.0, 0.0, -1.0)).rotation_difference(
Vector((-1.0, 0.0, 0.0))
)
view_rotation = Vector((0.0, 0.0, -1.0)).rotation_difference(Vector((-1.0, 0.0, 0.0)))
rv3d = _FakeRV3D(view_rotation, Matrix.Identity(4))
# Negative X scale (mirroring the cube along world X).
mw = Matrix.Diagonal((-1.0, 1.0, 1.0, 1.0))
@@ -48,16 +48,14 @@ def test_every_dispatch_target_lives_in_data_module():
# against typos in the dispatch table that would otherwise only surface
# at the first dialog open.
for kind, fn in operator._SOURCE_ID_DISPATCH.items():
assert getattr(data, fn.__name__, None) is fn, (
f"Dispatch target for {kind} ({fn.__name__}) is not exported from data.py"
)
assert (
getattr(data, fn.__name__, None) is fn
), f"Dispatch target for {kind} ({fn.__name__}) is not exported from data.py"
def test_every_menu_entry_is_a_known_kind():
for kind, label, icon in ui._SOURCE_MENU_ENTRIES:
assert kind in operator.SOURCE_KIND_LABELS, (
f"Menu kind {kind!r} (label={label!r}) is not in SOURCE_KIND_LABELS"
)
assert kind in operator.SOURCE_KIND_LABELS, f"Menu kind {kind!r} (label={label!r}) is not in SOURCE_KIND_LABELS"
def test_every_label_has_a_menu_entry():
@@ -201,9 +201,7 @@ class TestIterElementsForSource(NewFile):
storey = ifc.create_entity("IfcBuildingStorey")
wall_a = ifc.create_entity("IfcWall")
wall_b = ifc.create_entity("IfcWall")
ifcopenshell.api.spatial.assign_container(
ifc, products=[wall_a, wall_b], relating_structure=storey
)
ifcopenshell.api.spatial.assign_container(ifc, products=[wall_a, wall_b], relating_structure=storey)
result = tool.ClipBox.iter_elements_for_source("SPATIAL", str(storey.id()))
@@ -215,9 +213,7 @@ class TestIterElementsForSource(NewFile):
wall_type = ifc.create_entity("IfcWallType")
wall_a = ifc.create_entity("IfcWall")
wall_b = ifc.create_entity("IfcWall")
ifcopenshell.api.type.assign_type(
ifc, related_objects=[wall_a, wall_b], relating_type=wall_type
)
ifcopenshell.api.type.assign_type(ifc, related_objects=[wall_a, wall_b], relating_type=wall_type)
result = tool.ClipBox.iter_elements_for_source("TYPE", str(wall_type.id()))
@@ -263,9 +259,7 @@ class TestComputeMatrixForSource(NewFile):
storey = ifc.create_entity("IfcBuildingStorey")
wall_a, _ = _make_ifc_cube(ifc, "IfcWall", location=(0.0, 0.0, 0.0), size=2.0)
wall_b, _ = _make_ifc_cube(ifc, "IfcWall", location=(4.0, 0.0, 0.0), size=2.0)
ifcopenshell.api.spatial.assign_container(
ifc, products=[wall_a, wall_b], relating_structure=storey
)
ifcopenshell.api.spatial.assign_container(ifc, products=[wall_a, wall_b], relating_structure=storey)
matrix = tool.ClipBox.compute_matrix_for_source("SPATIAL", str(storey.id()))