From 4b07bb9e25ad4b2b886d59386e781eb57d9e4824 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Tue, 31 Mar 2026 21:42:49 -0700 Subject: [PATCH] [OASIS] raise PatternError for unsuppored caps --- masque/file/oasis.py | 4 +++- masque/test/test_oasis.py | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/masque/file/oasis.py b/masque/file/oasis.py index 95a2039..b5d0cd8 100644 --- a/masque/file/oasis.py +++ b/masque/file/oasis.py @@ -562,7 +562,9 @@ def _shapes_to_elements( xy = rint_cast(shape.offset + shape.vertices[0] + rep_offset) deltas = rint_cast(numpy.diff(shape.vertices, axis=0)) half_width = rint_cast(shape.width / 2) - path_type = next(k for k, v in path_cap_map.items() if v == shape.cap) # reverse lookup + path_type = next((k for k, v in path_cap_map.items() if v == shape.cap), None) # reverse lookup + if path_type is None: + raise PatternError(f'OASIS writer does not support path cap {shape.cap}') extension_start = (path_type, shape.cap_extensions[0] if shape.cap_extensions is not None else None) extension_end = (path_type, shape.cap_extensions[1] if shape.cap_extensions is not None else None) path = fatrec.Path( diff --git a/masque/test/test_oasis.py b/masque/test/test_oasis.py index ad9bbf9..f549db7 100644 --- a/masque/test/test_oasis.py +++ b/masque/test/test_oasis.py @@ -1,9 +1,12 @@ +import io from pathlib import Path import pytest from numpy.testing import assert_equal +from ..error import PatternError from ..pattern import Pattern from ..library import Library +from ..shapes import Path as MPath def test_oasis_roundtrip(tmp_path: Path) -> None: @@ -42,3 +45,16 @@ def test_oasis_properties_to_annotations_merges_repeated_keys() -> None: ) assert annotations == {"k": [1, 2, 3]} + + +def test_oasis_write_rejects_circle_path_caps() -> None: + pytest.importorskip("fatamorgana") + from ..file import oasis + + lib = Library() + pat = Pattern() + pat.path((1, 0), vertices=[[0, 0], [10, 0]], width=2, cap=MPath.Cap.Circle) + lib["cell1"] = pat + + with pytest.raises(PatternError, match="does not support path cap"): + oasis.write(lib, io.BytesIO(), units_per_micron=1000)