Initial move to app, scanning and reading basic part info works, updating info starting to work

This commit is contained in:
2025-10-02 22:45:58 +10:00
commit aaa1f7520a
15 changed files with 2241 additions and 0 deletions

45
workflows/scan_import.py Normal file
View File

@@ -0,0 +1,45 @@
import os, csv
from typing import Dict
from config import PARTDB_BASE, PARTDB_TOKEN, COM_PORT, BAUD_RATE, SCAN_APPEND_CSV
from apis.partdb_api import PartDB
from parsers.digikey_mh10 import parse_digikey
from devices.scanner_serial import scan_loop
def _row_for_csv(fields: Dict[str,str]) -> Dict[str,str]:
return {
"DigiKeyPart": fields.get("DigiKeyPart",""),
"MfrPart": fields.get("MfrPart",""),
"CustomerPart": fields.get("CustomerPart",""),
"InternalLot1": fields.get("InternalLot1",""),
"InternalLot2": fields.get("InternalLot2",""),
"DateCodeRaw": fields.get("DateCodeRaw",""),
"TraceID": fields.get("TraceID",""),
"PackageSerial": fields.get("PackageSerial",""),
"PickTicket": fields.get("PickTicket",""),
}
def run_scan_import():
pdb = PartDB(PARTDB_BASE, PARTDB_TOKEN)
def on_scan(flat: str):
fields = parse_digikey(flat)
print("\nScan:", flat)
print("", fields)
# Create (very minimal) part record using MPN/DKPN
name = fields.get("MfrPart") or fields.get("DigiKeyPart") or "Unknown"
mpn = fields.get("MfrPart") or ""
# You can enrich with ensure_category/manufacturer/footprint if you want here
# Optional: CSV log
if SCAN_APPEND_CSV:
newfile = not os.path.exists(SCAN_APPEND_CSV)
with open(SCAN_APPEND_CSV, "a", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=list(_row_for_csv(fields).keys()))
if newfile: w.writeheader()
w.writerow(_row_for_csv(fields))
# If you want to insert a stock movement instead of creating parts,
# call your Part-DB stock API here.
scan_loop(COM_PORT, BAUD_RATE, on_scan)