ifcurl/tests
Bruno Postle 96aa1a2377 diff rendering: two-pass IFC diff with green/blue/red colouring
Implements the ifcgit/Bonsai diff algorithm for the preview service:

diff.py: step_ids_from_diff() parses git diff text (regex on +#NNN= / -#NNN=
lines) to classify step IDs as added/modified/removed.  expand_step_ids()
walks IfcShapeRepresentation, IfcObjectPlacement, IfcPropertySet, and
IfcTypeProduct relationships to promote changed sub-entities to the parent
IfcProduct that is visually affected.

render.py: render_diff() does two passes over the same camera.  Pass 1 renders
the head model with green=added, blue=modified, ghost=unchanged.  Pass 2
renders only the removed elements from the base model in red, using the camera
auto-fitted to pass 1.  PIL composites the passes: wherever pass 2 is not
white background it stamps onto pass 1.  Moved elements (modified) appear once
in blue with no doubling artefact.

git.py: diff_text() runs git diff against the cached bare repo clone and
returns the raw text for diff.py to parse.

service.py: GET+POST /render_diff endpoint.  Fetches both commits, gets
diff text, runs the full pipeline sandboxed.  Caches on disk when both refs
are immutable.  Pillow added to render/service extras.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-25 06:52:01 +01:00
..
conftest.py Authentication and test coverage 2026-04-15 23:21:13 +01:00
test_auth.py Authentication and test coverage 2026-04-15 23:21:13 +01:00
test_bcf.py Fix 7 issues from deep review 2026-04-24 11:57:06 +01:00
test_diff.py diff rendering: two-pass IFC diff with green/blue/red colouring 2026-04-25 06:52:01 +01:00
test_git.py git.py: LRU disk cache eviction; service.py: configurable in-memory limits 2026-04-24 09:06:56 +01:00
test_render.py Authentication and test coverage 2026-04-15 23:21:13 +01:00
test_sandbox.py sandbox.py: subprocess isolation for ifcopenshell parse + render 2026-04-24 17:38:07 +01:00
test_service.py sandbox.py: subprocess isolation for ifcopenshell parse + render 2026-04-24 17:38:07 +01:00
test_url.py Fix port preservation and HTTP fallback for local Gitea 2026-04-15 23:50:54 +01:00
test_viewer_url.mjs viewer: extract URL logic to viewer-url.js, add JS tests 2026-04-24 07:31:19 +01:00