From 9d07de1bca62a14b1d7717b940dbd89749f6f5ac Mon Sep 17 00:00:00 2001 From: forbes-0023 Date: Thu, 19 Feb 2026 12:37:04 -0600 Subject: [PATCH] feat(client): add merge_bom_json method for assembly BOM merge Forward-looking JSON merge endpoint for POST /api/items/{pn}/bom/merge. Not called by Phase 1 (which uses individual CRUD calls). Ready for Phase 2 when the server endpoint ships. Refs: #276 --- silo_client/__init__.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/silo_client/__init__.py b/silo_client/__init__.py index 05fcd0a..fd84a09 100644 --- a/silo_client/__init__.py +++ b/silo_client/__init__.py @@ -803,6 +803,24 @@ class SiloClient: pn = urllib.parse.quote(part_number, safe="") return self._upload_ods(f"/items/{pn}/bom/merge", ods_bytes, filename) + def merge_bom_json(self, part_number: str, entries: list) -> Dict[str, Any]: + """Submit a JSON BOM merge from assembly extraction. + + Calls ``POST /api/items/{partNumber}/bom/merge`` with a JSON body + containing assembly-derived BOM entries. The server applies adds + and quantity changes, flags removed items as unreferenced, and + returns the diff. + + Not used by Phase 1 (which calls add/update individually). + Ready for Phase 2 when the server endpoint ships. + """ + pn = urllib.parse.quote(part_number, safe="") + return self._request( + "POST", + f"/items/{pn}/bom/merge", + {"source": "assembly", "entries": entries}, + ) + # -- Schemas ------------------------------------------------------------ def list_schemas(self) -> list: