Files
pyGUI/backend/local_settings.py
T
Jack.Le e43bf258e3 Add initial backend structure with models, utilities, and settings management
- Introduced .gitignore to exclude common Python artifacts and IDE files.
- Added contour models for contour generation.
- Implemented cryptographic utilities for data encryption and decryption.
- Created CSV metadata model for handling wafer data.
- Developed time-indexed data segment model.
- Established local settings model for application configuration.
- Added Z-wafer data models and parser for CSV file handling.
- Implemented Marching Squares algorithm for contour generation.
2026-04-23 11:40:47 -07:00

94 lines
3.0 KiB
Python

import json
import os
from pathlib import Path
# ===== Settings Persistence Model =====
class LocalSettings:
# ===== Defaults =====
def __init__(self):
self.chamber_id = ""
self.reverse_z_wafer = False
self.master = {} # Dict[str, str]
self.wafer_data_size = {} # Dict[str, int]
self.debug = False
self.wafer_read_retries = 8
# Timeout in msec for reading from the wafer (default 2 min)
self.wafer_read_timeout = 120000
self.wafer_detect_timeout = 5000
self.split_threshold = 40.0
# ===== File Path Helpers =====
@classmethod
def _settings_path(cls, directory: str) -> Path:
return Path(directory) / "settings.json"
# ===== Load/Save =====
@classmethod
def read_settings(cls, directory: str) -> "LocalSettings":
"""Read settings from settings.json in the provided directory."""
settings = cls()
path = cls._settings_path(directory)
if not path.exists():
return settings
try:
with open(path, "r", encoding="utf-8") as f:
data = json.load(f)
for key, value in data.items():
if hasattr(settings, key):
setattr(settings, key, value)
except Exception as e:
print(f"Error reading setting file: {e}")
return settings
@classmethod
def save_settings(cls, directory: str, settings: "LocalSettings") -> None:
"""Save the current settings instance to settings.json."""
path = cls._settings_path(directory)
path.parent.mkdir(parents=True, exist_ok=True)
data = settings.__dict__.copy()
try:
with open(path, "w", encoding="utf-8") as f:
json.dump(data, f, indent=4)
except Exception as e:
print(f"Error saving settings: {e}")
# ===== Master File Helpers =====
@classmethod
def get_master(cls, directory: str, wtype: str) -> str:
"""Return the full path to a master file if it exists."""
settings = cls.read_settings(directory)
if wtype not in settings.master:
return ""
file_path = Path(directory) / settings.master[wtype]
if file_path.exists():
return str(file_path)
return ""
@classmethod
def set_master(cls, directory: str, wtype: str, filename: str) -> None:
"""Store a master filename for a wafer type and save settings."""
settings = cls.read_settings(directory)
settings.master[wtype] = os.path.basename(filename)
cls.save_settings(directory, settings)
# ===== Wafer Sizing =====
def get_wafer_data_size(self, wtype: str) -> int:
"""Return the expected transfer size in bytes for a wafer type."""
if not wtype:
return 393216
if wtype in self.wafer_data_size:
return self.wafer_data_size[wtype]
if wtype == "P":
return 393216
if wtype == "X":
return 1310720
return 393216