From e06d10caee932c6fd50483ce6dcd832da577e1f0 Mon Sep 17 00:00:00 2001 From: localhorst Date: Sun, 22 Jun 2025 13:32:56 +0200 Subject: [PATCH] shorten qrcode data --- layouter.py | 41 +++++++++++++++++++++++++++++++++++------ output.png | Bin 4792 -> 4530 bytes 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/layouter.py b/layouter.py index f8dc7f3..3e9f38f 100644 --- a/layouter.py +++ b/layouter.py @@ -29,6 +29,7 @@ logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" ) + @dataclasses.dataclass class DriveData: drive_index: int @@ -44,6 +45,20 @@ class DriveData: shred_duration: int +@dataclasses.dataclass +class DriveDataJson: + state: str + fam: str + name: str + cap: int + sn: str + poh: int + pc: int + err: int + time: int + dur: int + + @dataclasses.dataclass class DriveDataPrintable: modelfamily: str @@ -59,13 +74,13 @@ class DriveDataPrintable: @dataclasses.dataclass class ReHddInfo: - link: str - version: str + ref: str + ver: str @dataclasses.dataclass -class DriveDataJson: - drive: DriveData +class QrDataJson: + drive: DriveDataJson rehdd: ReHddInfo @@ -288,7 +303,21 @@ def draw_outline(drawable, margin, width, output_width, output_height): def generate_image(drive, rehdd_info, output_file): """Generates an image containing drive data and a QR code.""" try: - qr_data = json.dumps(dataclasses.asdict(DriveDataJson(drive, rehdd_info))) + + drive_json = DriveDataJson( + state=drive.drive_state, + fam=drive.modelfamily, + name=drive.modelname, + cap=drive.capacity, + sn=drive.serialnumber, + poh=drive.power_on_hours, + pc=drive.power_cycle, + err=drive.smart_error_count, + time=int(drive.shred_timestamp), + dur=drive.shred_duration, + ) + + qr_data = json.dumps(dataclasses.asdict(QrDataJson(drive_json, rehdd_info))) printable_data = format_to_printable(drive) except Exception as e: logging.error(f"Error preparing data: {e}") @@ -301,7 +330,7 @@ def generate_image(drive, rehdd_info, output_file): font_bold = ImageFont.truetype(find_font_path(DEFAULT_FONT_BOLD), 20) font_bold_bigger = ImageFont.truetype(find_font_path(DEFAULT_FONT_BOLD), 42) - draw_outline(draw, 0, 3, OUTPUT_WIDTH+1, OUTPUT_HEIGHT+1) + draw_outline(draw, 0, 3, OUTPUT_WIDTH + 1, OUTPUT_HEIGHT + 1) draw_text(draw, printable_data, font_regular, font_bold, font_bold_bigger) draw_qr_code(output_image, qr_data) diff --git a/output.png b/output.png index 57e971ca9725b3caaaacbf29700fe6a9180dbdbe..7f9d9dc9308fb55d22e15eeb4fef43c8b265cc95 100644 GIT binary patch literal 4530 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 SEvje$0000