From fbe138d4430a86ecf42627e2ce8352a14c29c781 Mon Sep 17 00:00:00 2001 From: Jan Petykiewicz Date: Wed, 1 Apr 2026 19:22:16 -0700 Subject: [PATCH] [data_to_ports] warn on invalid angle --- masque/test/test_ports2data.py | 14 ++++++++++++++ masque/utils/ports2data.py | 9 ++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/masque/test/test_ports2data.py b/masque/test/test_ports2data.py index 514ab9a..3f642ab 100644 --- a/masque/test/test_ports2data.py +++ b/masque/test/test_ports2data.py @@ -116,3 +116,17 @@ def test_data_to_ports_hierarchical_collision_is_atomic() -> None: data_to_ports([layer], lib, parent, max_depth=1) assert not parent.ports + + +def test_data_to_ports_flat_bad_angle_warns_and_skips( + caplog: pytest.LogCaptureFixture, + ) -> None: + layer = (10, 0) + pat = Pattern() + pat.label(layer=layer, string="A:type1 nope", offset=(5, 0)) + + caplog.set_level("WARNING") + data_to_ports([layer], {}, pat) + + assert not pat.ports + assert any('bad angle' in record.message for record in caplog.records) diff --git a/masque/utils/ports2data.py b/masque/utils/ports2data.py index 119ead1..44a0ec3 100644 --- a/masque/utils/ports2data.py +++ b/masque/utils/ports2data.py @@ -184,7 +184,14 @@ def data_to_ports_flat( name, property_string = label.string.split(':', 1) properties = property_string.split() ptype = properties[0] if len(properties) > 0 else 'unk' - angle_deg = float(properties[1]) if len(properties) > 1 else numpy.inf + if len(properties) > 1: + try: + angle_deg = float(properties[1]) + except ValueError: + logger.warning(f'Invalid port label "{label.string}" in pattern "{pstr}" (bad angle)') + continue + else: + angle_deg = numpy.inf xy = label.offset angle = numpy.deg2rad(angle_deg) if numpy.isfinite(angle_deg) else None