[LayerMappedView] reject None layer mappings early

This commit is contained in:
Jan Petykiewicz 2026-07-16 08:36:14 -07:00
commit 4b0a899e17
2 changed files with 11 additions and 0 deletions

View file

@ -1829,6 +1829,8 @@ def map_layers(
new_elements: defaultdict[layer_t, list[TT]] = defaultdict(list) new_elements: defaultdict[layer_t, list[TT]] = defaultdict(list)
for old_layer, seq in elements.items(): for old_layer, seq in elements.items():
new_layer = map_layer(old_layer) new_layer = map_layer(old_layer)
if new_layer is None:
raise PatternError(f'Layer mapping returned None for source layer {old_layer!r}')
new_elements[new_layer].extend(seq) new_elements[new_layer].extend(seq)
return new_elements return new_elements

View file

@ -673,6 +673,15 @@ def test_layer_mapped_view_detaches_and_maps_shapes_and_labels() -> None:
assert not hasattr(masque.library, 'PortsLibraryView') assert not hasattr(masque.library, 'PortsLibraryView')
def test_layer_mapped_view_preflight_rejects_none_layer() -> None:
pattern = Pattern()
pattern.polygon((1, 0), vertices=[[0, 0], [1, 0], [0, 1]])
mapped = LayerMappedView(Library({'top': pattern}), lambda _layer: None) # type: ignore[arg-type]
with pytest.raises(PatternError, match=r"returned None for source layer \(1, 0\)"):
preflight_source_aware(mapped)
def test_layer_mapped_view_materialization_and_copy_through() -> None: def test_layer_mapped_view_materialization_and_copy_through() -> None:
pattern = Pattern() pattern = Pattern()
pattern.polygon('A', vertices=[[0, 0], [1, 0], [0, 1]]) pattern.polygon('A', vertices=[[0, 0], [1, 0], [0, 1]])