refactor: reorganize backend modules into sub-packages for models, data, visualization, wafer, and controllers

This commit is contained in:
jack
2026-06-11 12:15:00 -07:00
parent b9f8032203
commit 72334795da
47 changed files with 155 additions and 60 deletions
+46
View File
@@ -0,0 +1,46 @@
"""Append live frames"""
from __future__ import annotations
from datetime import datetime
from pathlib import Path
from typing import Optional, TextIO
from pygui.backend.models.frame import Frame
from pygui.backend.wafer.zwafer_models import Sensor
class CsvRecorder:
def __init__(self) -> None:
self._file_handle: Optional[TextIO] = None
self._oath: Optional[str] = None
@property
def is_recording(self) -> bool:
return self._file_handle is not None
def start(self, path: str, sensors:list[Sensor], serial: str = "") -> None:
Path(path).parent.mkdir(parents=True, exist_ok=True)
file_handle = open(path, "w", encoding="utf-8", newline ="")
file_handle.write(f"Wafer ID={serial}\n")
file_handle.write(f"Acquisition Date={datetime.now():%m/%d/%Y}\n")
file_handle.write("Label," + ",".join(s.label for s in sensors) + "\n")
file_handle.write("X (mm)," + ",".join(str(s.x) for s in sensors) + "\n")
file_handle.write("Y (mm)," + ",".join(str(s.y) for s in sensors) + "\n")
file_handle.write("data\n")
file_handle.flush()
self._file_handle, self._path = file_handle, path
def write(self, frame: Frame) -> None:
if self._file_handle is None:
return
row = [f"{frame.time:.3f}"] + [f"{v:.3f}" for v in frame.values]
self._file_handle.write(",".join(row) + "\n")
self._file_handle.flush()
def stop(self) -> Optional[str]:
if self._file_handle is None:
return None
self._file_handle.close()
path, self._file_handle, self._path = self._path, None, None
return path