error handling and refactor

This commit is contained in:
Hendrik Schutter 2022-11-23 18:38:27 +01:00
parent b16d72415e
commit 2cfe957473
3 changed files with 87 additions and 47 deletions

View File

@ -10,6 +10,7 @@ Generate label and print them via brother_ql to
```
`brother_ql print -l 62 Untitled.png`
## Printer/Paper Info ##
@ -23,5 +24,6 @@ Paper With: 62mm or 696px
see https://github.com/pklaus/brother_ql
pip install qrcode

View File

@ -3,31 +3,18 @@
""" Author: Hendrik Schutter, localhorst@mosad.xyz
Date of creation: 2022/11/16
Date of last modification: 2022/11/16
pip install qrcode
Date of last modification: 2022/11/23
"""
import re
import os
import sys
import time
import subprocess
import shlex
import shutil
import dataclasses
import glob
import PIL
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
import datetime
import json
import qrcode
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
@dataclasses.dataclass
class DriveData:
@ -64,13 +51,6 @@ class ReHddInfo:
class DriveDataJson:
drive: DriveData
rehdd: ReHddInfo
rehdd_info = ReHddInfo("https://git.mosad.xyz/localhorst/reHDD", "bV0.2.2") # read this from rehdd process
temp_drive = DriveData(drive_index=0, drive_state="shredded", modelfamiliy="Toshiba 2.5\\ HDD MK..65GSSX",\
modelname="TOSHIBA MK3265GSDX", capacity=343597383680, serialnumber="YG6742U56UDRL123", power_on_hours=7074,\
power_cycle=4792, smart_error_count=1, shred_timestamp=1647937421, shred_duration=81718)
def get_font_path_regular():
path = "/usr/share/fonts"
@ -99,17 +79,6 @@ def cut_string(max_lenght, data):
return data
def format_to_printable(drive):
#print(cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelfamiliy)))
#print(cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelname)))
#print(cut_string(20, human_readable_capacity(drive.capacity)))
#print(cut_string(20, re.sub(r"[^a-zA-Z0-9.-_]", "", drive.serialnumber)))
#print(cut_string(30, human_readable_power_on_hours(drive.power_on_hours)))
#print(cut_string(10, str(drive.power_cycle)))
#print(cut_string(10, str(drive.smart_error_count)))
#print(cut_string(30, datetime.datetime.utcfromtimestamp(drive.shred_timestamp).strftime('%Y-%m-%d %H:%M:%S')))
#print(cut_string(30, str(datetime.timedelta(seconds = drive.shred_duration))))
return DriveDataPrintable(
cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelfamiliy)),\
cut_string(20, re.sub(r"[^a-zA-Z0-9. ]", "", drive.modelname)),\
@ -122,8 +91,13 @@ def format_to_printable(drive):
cut_string(30, str(datetime.timedelta(seconds = drive.shred_duration))))
def draw_text(drawable, printable_data, text_x_offset):
font_file_regular = get_font_path_regular()
font_file_bold = get_font_path_bold()
try:
font_file_regular = get_font_path_regular()
font_file_bold = get_font_path_bold()
except Exception as ex:
print("unable to find font: " + str(ex))
return
font_size = 20
text_y_offset = 10
text_y_offset_increment = 25
@ -172,27 +146,57 @@ def draw_qr_code(image, data):
image.paste(qr_img, (7, 7))
def main():
output_width = 696
output_height = 300
def generate_image(drive, rehdd_info, output_file):
output_width = 696 #in px set by used paper
output_height = 300 #in px
text_x_offset= 300 #in px
printable_data = format_to_printable(temp_drive)
qr_data = DriveDataJson(temp_drive, rehdd_info)
json_qr_daten = json.dumps(dataclasses.asdict(qr_data))
qr_data = DriveDataJson(drive, rehdd_info)
try:
json_qr_daten = json.dumps(dataclasses.asdict(qr_data))
except Exception as ex:
print("unable to generate json: " + str(ex))
return
try:
printable_data = format_to_printable(drive)
except Exception as ex:
print("unable to format data: " + str(ex))
return
#print(printable_data)
text_x_offset= 300
#create black and white (binary) image with white background
output_image = Image.new('1', (output_width, output_height), "white")
#create draw pane
draw = ImageDraw.Draw(output_image)
draw_outline(draw, 1, 4, output_width, output_height)
draw_text(draw, printable_data, text_x_offset)
draw_qr_code(output_image, str(json_qr_daten).replace(" ", ""))
output_image.save("output.png")
output_image.save(output_file)
def main():
rehdd_info = ReHddInfo("https://git.mosad.xyz/localhorst/reHDD", "bV0.2.2") # read this from rehdd process
temp_drive = DriveData(
drive_index=0,\
drive_state="shredded",\
modelfamiliy="Toshiba 2.5\\ HDD MK..65GSSX",\
modelname="TOSHIBA MK3265GSDX",\
capacity=343597383680,\
serialnumber="YG6742U56UDRL123",\
power_on_hours=7074,\
power_cycle=4792,\
smart_error_count=1,\
shred_timestamp=1647937421,\
shred_duration=81718)
generate_image(temp_drive, rehdd_info, "output.png")
if __name__ == "__main__":

34
reHDDPrinter.py Normal file
View File

@ -0,0 +1,34 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
""" Author: Hendrik Schutter, localhorst@mosad.xyz
Date of creation: 2022/11/23
Date of last modification: 2022/11/23
"""
import layouter
def main():
rehdd_info = layouter.ReHddInfo("https://git.mosad.xyz/localhorst/reHDD", "bV0.2.2") # read this from rehdd process
temp_drive = layouter.DriveData(
drive_index=0,\
drive_state="shredded",\
modelfamiliy="Toshiba 2.5\\ HDD MK..65GSSX",\
modelname="TOSHIBA MK3265GSDX",\
capacity=343597383680,\
serialnumber="YG6742U56UDRL123",\
power_on_hours=7074,\
power_cycle=4792,\
smart_error_count=1,\
shred_timestamp=1647937421,\
shred_duration=81718)
layouter.generate_image(temp_drive, rehdd_info, "output.png")
if __name__ == "__main__":
main()