refactor: extract schematic handlers into SchematicHandlersMixin

kicad_interface.py had grown to 8,596 lines. Most domains already delegate to
classes in commands/, but the schematic domain (43 _handle_* methods + the
schematic-only _svg_to_png helper, ~3,100 lines) was still inline. Move it into
commands/schematic_handlers.py as SchematicHandlersMixin and have KiCADInterface
inherit from it.

Pure mechanical relocation — no logic change:
- Methods stay bound to the same instance via the mixin, so every self.board,
  self._auto_save_board(), cross-handler call, and the command_routes table
  resolve exactly as before.
- Verified all 159 functions/methods (116 kept + 43 moved + _svg_to_png) are
  AST-identical between the original and the split.
- tests/test_sync_schematic_to_board_footprints.py patch targets updated to
  follow the moved module (commands.schematic_handlers.pcbnew).
- Full suite at the exact current main baseline (8 failed / 1044 passed; the 8
  are the pre-existing Java-not-installed freerouting/autoroute set).

Regenerated against main after the June merge wave (#226-229, #231-234, #238,
#252, #253); deliberately excludes the 19 _handle_export_* kicad-cli handlers
from #253 and the datasheet delegators.
This commit is contained in:
mixelpixx
2026-06-12 12:29:46 -04:00
parent 07bad447c1
commit 602d76af23
3 changed files with 3111 additions and 3075 deletions

View File

@@ -74,7 +74,7 @@ class TestAddMissingFootprintsFromSchematic:
}
],
),
patch("kicad_interface.pcbnew") as mock_pcbnew,
patch("commands.schematic_handlers.pcbnew") as mock_pcbnew,
patch("commands.library.LibraryManager") as mock_lm_cls,
):
mock_pcbnew.FootprintLoad.return_value = loaded_module
@@ -113,7 +113,7 @@ class TestAddMissingFootprintsFromSchematic:
}
],
),
patch("kicad_interface.pcbnew"),
patch("commands.schematic_handlers.pcbnew"),
patch("commands.library.LibraryManager") as mock_lm_cls,
):
lm = MagicMock()
@@ -144,7 +144,7 @@ class TestAddMissingFootprintsFromSchematic:
{"reference": "#FLG0001", "value": "PWR_FLAG", "footprint": ""},
],
),
patch("kicad_interface.pcbnew"),
patch("commands.schematic_handlers.pcbnew"),
patch("commands.library.LibraryManager") as mock_lm_cls,
):
mock_lm_cls.return_value = MagicMock(libraries={})
@@ -172,7 +172,7 @@ class TestAddMissingFootprintsFromSchematic:
"_extract_components_from_schematic",
return_value=[{"reference": "R1", "value": "10k", "footprint": ""}],
),
patch("kicad_interface.pcbnew"),
patch("commands.schematic_handlers.pcbnew"),
patch("commands.library.LibraryManager") as mock_lm_cls,
):
mock_lm_cls.return_value = MagicMock(libraries={})
@@ -205,7 +205,7 @@ class TestAddMissingFootprintsFromSchematic:
}
],
),
patch("kicad_interface.pcbnew"),
patch("commands.schematic_handlers.pcbnew"),
patch("commands.library.LibraryManager") as mock_lm_cls,
):
mock_lm_cls.return_value = MagicMock(libraries={}) # MyVendor not present