order and api and more

This commit is contained in:
2025-04-17 00:09:16 -04:00
parent 593e8960b7
commit 21408af48c
31 changed files with 1924 additions and 542 deletions

View File

@ -27,6 +27,13 @@ class LabelPrinterService:
self._session = None
self._lock = asyncio.Lock()
async def cleanup(self):
"""Clean up resources, particularly the aiohttp session."""
if self._session:
await self._session.close()
self._session = None
logger.info("Label printer service session closed")
@asynccontextmanager
async def _get_session(self):
"""Context manager for aiohttp session."""
@ -64,8 +71,16 @@ class LabelPrinterService:
elif response.status == 404:
logger.error(f"Printer status endpoint not found at {self.status_url}")
return False
elif response.status == 500:
data = await response.json()
error_msg = data.get('message', 'Unknown printer error')
logger.error(f"Printer error: {error_msg}")
raise Exception(f"Printer error: {error_msg}")
except aiohttp.ClientError as e:
logger.warning(f"Error checking printer status: {e}")
if "Cannot connect to host" in str(e):
logger.error("Printer reciever is not available")
raise Exception("Printer reciever is not available")
except Exception as e:
logger.error(f"Unexpected error in _wait_for_printer_ready: {e}")
return False
@ -109,6 +124,11 @@ class LabelPrinterService:
elif response.status == 429:
logger.error("Printer is busy")
return False
elif response.status == 500:
data = await response.json()
error_msg = data.get('message', 'Unknown printer error')
logger.error(f"Printer error: {error_msg}")
raise Exception(f"Printer error: {error_msg}")
else:
data = await response.json()
logger.error(f"Print request failed with status {response.status}: {data.get('message')}")
@ -121,13 +141,13 @@ class LabelPrinterService:
logger.error(f"Unexpected error in _send_print_request: {e}")
return False
async def print_file(self, file_path: Union[str, Path], label_size: Literal["dk1201", "dk1241"], label_type: Optional[Literal["address_label", "packing_slip"]] = None) -> bool:
async def print_file(self, file_path: Union[str, Path], label_size: Literal["dk1201", "dk1241"], label_type: Optional[Literal["address_label", "packing_slip", "set_label"]] = None) -> bool:
"""Print a PDF or PNG file to the label printer.
Args:
file_path: Path to the PDF or PNG file
label_size: Size of label to use ("dk1201" or "dk1241")
label_type: Type of label to use ("address_label" or "packing_slip")
label_type: Type of label to use ("address_label" or "packing_slip" or "set_label")
Returns:
bool: True if print was successful, False otherwise
@ -177,14 +197,16 @@ class LabelPrinterService:
resized_image = resized_image.resize((1660, 1164), Image.Resampling.LANCZOS)
else:
resized_image = resized_image.resize((1164, 1660), Image.Resampling.LANCZOS)
elif original_label_size == "dk1201" and label_type == "address_label":
elif original_label_size == "dk1201":
resized_image = resized_image.resize((991, 306), Image.Resampling.LANCZOS)
# if file path contains address_label, rotate image 90 degrees
if label_type == "address_label":
if label_type == "address_label" or label_type == "set_label":
rotate = "90"
cut = False
else:
rotate = "0"
cut = True
# Convert to label format
qlr = BrotherQLRaster("QL-1100")
@ -205,7 +227,7 @@ class LabelPrinterService:
dpi_600=False,
#hq=True,
hq=False,
cut=True
cut=cut
)
# Cache the converted binary data