Sync print weight and time parameters
This commit is contained in:
@@ -15,6 +15,7 @@ class InvenTreeClient:
|
||||
|
||||
self.settings = settings
|
||||
self.base_url = base_url
|
||||
self._parameter_template_cache: dict[str, int] = {}
|
||||
self.client = httpx.AsyncClient(
|
||||
base_url=self.base_url,
|
||||
headers={
|
||||
@@ -78,6 +79,62 @@ class InvenTreeClient:
|
||||
}
|
||||
return await self._request("POST", "/stock/", json=payload)
|
||||
|
||||
async def upsert_part_parameter(
|
||||
self,
|
||||
*,
|
||||
part_id: int,
|
||||
template_name: str,
|
||||
data: str,
|
||||
data_numeric: float | None,
|
||||
note: str,
|
||||
) -> dict[str, Any]:
|
||||
template_id = await self.get_parameter_template_id(template_name)
|
||||
existing = await self.find_part_parameter(part_id=part_id, template_id=template_id)
|
||||
payload: dict[str, Any] = {
|
||||
"template": template_id,
|
||||
"model_type": "part.part",
|
||||
"model_id": part_id,
|
||||
"data": data[:500],
|
||||
"data_numeric": data_numeric,
|
||||
"note": note[:500],
|
||||
}
|
||||
|
||||
if existing:
|
||||
parameter_id = int(existing.get("pk") or existing.get("id"))
|
||||
return await self._request("PATCH", f"/parameter/{parameter_id}/", json=payload)
|
||||
|
||||
return await self._request("POST", "/parameter/", json=payload)
|
||||
|
||||
async def get_parameter_template_id(self, name: str) -> int:
|
||||
cache_key = name.lower()
|
||||
if cache_key in self._parameter_template_cache:
|
||||
return self._parameter_template_cache[cache_key]
|
||||
|
||||
data = await self._request("GET", "/parameter/template/", params={"search": name, "limit": 100})
|
||||
for item in self._items(data):
|
||||
if str(item.get("name", "")).lower() == cache_key:
|
||||
template_id = int(item.get("pk") or item.get("id"))
|
||||
self._parameter_template_cache[cache_key] = template_id
|
||||
return template_id
|
||||
|
||||
raise ExternalApiError(f"InvenTree parameter template '{name}' was not found")
|
||||
|
||||
async def find_part_parameter(self, *, part_id: int, template_id: int) -> dict[str, Any] | None:
|
||||
data = await self._request(
|
||||
"GET",
|
||||
"/parameter/",
|
||||
params={
|
||||
"model_type": "part.part",
|
||||
"model_id": part_id,
|
||||
"template": template_id,
|
||||
"limit": 100,
|
||||
},
|
||||
)
|
||||
for item in self._items(data):
|
||||
if item.get("model_type") == "part.part" and item.get("model_id") == part_id and item.get("template") == template_id:
|
||||
return item
|
||||
return None
|
||||
|
||||
@staticmethod
|
||||
def batch_for_archive(archive_id: int) -> str:
|
||||
return f"bambuddy-{archive_id}"
|
||||
|
||||
Reference in New Issue
Block a user