testsAndMisc/python_pkg/brother_printer/data_classes.py

108 lines
2.3 KiB
Python
Raw Permalink Normal View History

"""Data classes for Brother printer status information."""
from __future__ import annotations
from dataclasses import dataclass, field
@dataclass
class CUPSJob:
"""A single CUPS print job."""
job_id: str
user: str
size: str
date: str
@dataclass
class CUPSQueueStatus:
"""Status of the CUPS print queue for a printer."""
printer_name: str = ""
enabled: bool = True
reason: str = ""
jobs: list[CUPSJob] = field(default_factory=list)
has_backend_errors: bool = False
last_backend_error: str = ""
@dataclass
class PageCountEstimate:
"""Estimated consumable life based on CUPS page count."""
total_pages: int = 0
toner_pages: int = 0
drum_pages: int = 0
toner_pct_remaining: int = 100
drum_pct_remaining: int = 100
toner_exhausted: bool = False
toner_low: bool = False
drum_near_end: bool = False
@dataclass
class USBPortStatus:
"""IEEE 1284 USB printer port status bits."""
paper_empty: bool = False
online: bool = True
error: bool = False
raw_byte: int = 0
@dataclass
class USBResult:
"""Result from a USB PJL query."""
connection: str = "usb"
device: str = ""
product: str = "Brother Laser Printer"
serial: str = ""
status_code: str = ""
display: str = ""
online: str = ""
economode: str = ""
error: str = ""
port_status: USBPortStatus | None = None
@dataclass
class SupplyReadings:
"""Parallel SNMP supply tables (descriptions, capacities, current levels).
The three lists are always populated and indexed together, so they travel
as one object rather than three loose fields on NetworkResult.
"""
descriptions: list[str] = field(default_factory=list)
max_values: list[str] = field(default_factory=list)
levels: list[str] = field(default_factory=list)
@dataclass
class NetworkResult:
"""Result from an SNMP network query."""
connection: str = "network"
ip: str = ""
product: str = "Unknown"
serial: str = ""
printer_status: str = ""
device_status: str = ""
display: str = ""
page_count: str = ""
supplies: SupplyReadings = field(default_factory=SupplyReadings)
error: str = ""
@dataclass
class SupplyStatus:
"""Processed supply level info for display."""
color: str
bar_text: str
status_text: str
warning: str
needs_replacement: bool