openspoolman/spoolman_service.py
2024-12-15 03:39:27 +01:00

63 lines
2.4 KiB
Python

from config import PRINTER_ID
import json
from spoolman_client import consumeSpool, patchExtraTags, fetchSpoolList
def trayUid(ams_id, tray_id):
return f"{PRINTER_ID}_{ams_id}_{tray_id}"
def augmentTrayDataWithSpoolMan(spool_list, tray_data, tray_id):
tray_data["matched"] = False
for spool in spool_list:
if spool.get("extra") and spool["extra"].get("active_tray") and spool["extra"]["active_tray"] == json.dumps(tray_id):
#TODO: check for mismatch
tray_data["remaining_weight"] = spool["remaining_weight"]
tray_data["matched"] = True
break
if tray_data.get("tray_type") and tray_data["tray_type"] != "" and tray_data["matched"] == False:
tray_data["issue"] = True
else:
tray_data["issue"] = False
def spendFilaments(filaments_usage):
print(filaments_usage)
ams_usage = {}
for tray_id, usage in filaments_usage:
if tray_id != -1:
#TODO: hardcoded ams_id
if ams_usage.get(trayUid(0, tray_id)):
ams_usage[trayUid(0, tray_id)] += float(usage)
else:
ams_usage[trayUid(0, tray_id)] = float(usage)
for spool in fetchSpools():
#TODO: What if there is a mismatch between AMS and SpoolMan?
if spool.get("extra") and spool.get("extra").get("active_tray") and ams_usage.get(json.loads(spool.get("extra").get("active_tray"))):
consumeSpool(spool["id"], ams_usage.get(json.loads(spool.get("extra").get("active_tray"))))
def setActiveTray(spool_id, spool_extra, ams_id, tray_id):
if spool_extra == None:
spool_extra = {}
if not spool_extra.get("active_tray") or json.loads(spool_extra.get("active_tray")) != trayUid(ams_id, tray_id):
patchExtraTags(spool_id, spool_extra, {
"active_tray": json.dumps(trayUid(ams_id, tray_id)),
})
# Remove active tray from inactive spools
for old_spool in fetchSpools(cached=True):
if spool_id != old_spool["id"] and old_spool.get("extra") and old_spool["extra"].get("active_tray") and json.loads(old_spool["extra"]["active_tray"]) == trayUid(ams_id, tray_id):
patchExtraTags(old_spool["id"], old_spool["extra"], {"active_tray": json.dumps("")})
else:
print("Skipping set active tray")
# Fetch spools from spoolman
def fetchSpools(cached=False):
global SPOOLS
if not cached:
SPOOLS = fetchSpoolList()
return SPOOLS
SPOOLS = fetchSpools() # Global variable storing latest spool from spoolman