Compare commits
2 Commits
a6ac3d4d06
...
feat/dag-a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb658c5a24 | ||
|
|
68a4139251 |
@@ -844,16 +844,7 @@ class SiloClient:
|
||||
def delete_bom_entry(self, parent_pn: str, child_pn: str) -> None:
|
||||
ppn = urllib.parse.quote(parent_pn, safe="")
|
||||
cpn = urllib.parse.quote(child_pn, safe="")
|
||||
url = f"{self.base_url}/items/{ppn}/bom/{cpn}"
|
||||
headers = {"Content-Type": "application/json"}
|
||||
headers.update(self._auth_headers())
|
||||
req = urllib.request.Request(url, headers=headers, method="DELETE")
|
||||
try:
|
||||
urllib.request.urlopen(req, context=self._ssl_context())
|
||||
except urllib.error.HTTPError as e:
|
||||
raise RuntimeError(f"API error {e.code}: {e.read().decode()}")
|
||||
except urllib.error.URLError as e:
|
||||
raise RuntimeError(f"Connection error: {e.reason}")
|
||||
self._request("DELETE", f"/items/{ppn}/bom/{cpn}", raw=True)
|
||||
|
||||
# -- Schemas ------------------------------------------------------------
|
||||
|
||||
@@ -911,3 +902,42 @@ class SiloClient:
|
||||
self, ods_bytes: bytes, filename: str = "sheet.ods"
|
||||
) -> Dict[str, Any]:
|
||||
return self._upload_ods("/sheets/diff", ods_bytes, filename)
|
||||
|
||||
# -- DAG (feature tree) -------------------------------------------------
|
||||
|
||||
def push_dag(
|
||||
self,
|
||||
part_number: str,
|
||||
revision_number: int,
|
||||
nodes: List[Dict[str, Any]],
|
||||
edges: List[Dict[str, Any]],
|
||||
) -> Dict[str, Any]:
|
||||
"""Push a feature DAG to the server.
|
||||
|
||||
Calls ``PUT /api/items/{partNumber}/dag`` with the payload
|
||||
described in ``MULTI_USER_CLIENT.md`` Section 2.
|
||||
"""
|
||||
pn = urllib.parse.quote(part_number, safe="")
|
||||
return self._request(
|
||||
"PUT",
|
||||
f"/items/{pn}/dag",
|
||||
{
|
||||
"revision_number": revision_number,
|
||||
"nodes": nodes,
|
||||
"edges": edges,
|
||||
},
|
||||
)
|
||||
|
||||
def get_dag(
|
||||
self, part_number: str, revision_number: Optional[int] = None
|
||||
) -> Dict[str, Any]:
|
||||
"""Fetch the stored DAG for an item.
|
||||
|
||||
Calls ``GET /api/items/{partNumber}/dag``, optionally filtered
|
||||
by *revision_number*.
|
||||
"""
|
||||
pn = urllib.parse.quote(part_number, safe="")
|
||||
path = f"/items/{pn}/dag"
|
||||
if revision_number is not None:
|
||||
path += f"?revision={revision_number}"
|
||||
return self._request("GET", path)
|
||||
|
||||
Reference in New Issue
Block a user