Skip to content

Commit

Permalink
refactor: add label class
Browse files Browse the repository at this point in the history
  • Loading branch information
margau committed Feb 10, 2025
1 parent 5434099 commit e86c6be
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 27 deletions.
26 changes: 26 additions & 0 deletions paperless_asn_qr_codes/label.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
"""This module provides classes for building a single paperless ASN label with a given layout."""
from dataclasses import dataclass, KW_ONLY
from reportlab.lib.units import mm
from reportlab_qrcode import QRCodeImage

@dataclass
class LabelInfo:
"""Class for modeling label sheet info"""

_: KW_ONLY
digits: int

class Label:
"""Class for building the label"""

def __init__(self, start_asn):
self.current = start_asn

def render(self, canvas, x_size, y_size):
barcode_value = f"ASN{self.current:0{7}d}"

qr = QRCodeImage(barcode_value, size=y_size * 0.9)
qr.drawOn(canvas, 1 * mm, y_size* 0.05)
canvas.setFont("Helvetica", 2 * mm)
canvas.drawString(y_size, (y_size - 2 * mm) / 2, barcode_value)
self.current += 1
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
# pylint: disable=invalid-name,too-many-instance-attributes
"""This module is used to generate label PDFs for label sheets and other label types."""
from dataclasses import dataclass, KW_ONLY
from collections.abc import Iterator
Expand Down
40 changes: 14 additions & 26 deletions paperless_asn_qr_codes/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,23 +2,7 @@
import argparse
import re

from reportlab.lib.units import mm
from reportlab_qrcode import QRCodeImage

from paperless_asn_qr_codes import LabelSheet

def render(c, _, y):
""" Render the QR code and ASN number on the label """
global startASN
global digits
barcode_value = f"ASN{startASN:0{digits}d}"
startASN = startASN + 1

qr = QRCodeImage(barcode_value, size=y * 0.9)
qr.drawOn(c, 1 * mm, y * 0.05)
c.setFont("Helvetica", 2 * mm)
c.drawString(y, (y - 2 * mm) / 2, barcode_value)

from paperless_asn_qr_codes import label_sheet, label

def main():
""" Main function for the paperless ASN QR code generator """
Expand All @@ -31,7 +15,7 @@ def _start_position(arg):
raise argparse.ArgumentTypeError("invalid value")

# prepare a sorted list of all formats
available_formats = list(LabelSheet.labelSheetInfo.keys())
available_formats = list(label_sheet.labelSheetInfo.keys())
available_formats.sort()

parser = argparse.ArgumentParser(
Expand Down Expand Up @@ -89,20 +73,24 @@ def _start_position(arg):
)

args = parser.parse_args()
global startASN
global digits
startASN = int(args.start_asn)
start_asn = int(args.start_asn)
digits = int(args.digits)
label = LabelSheet.LabelSheet(
# TODO: set digits to LabelInfo

# setup LabelSheet
sheet = label_sheet.LabelSheet(
args.format, args.border, topDown=args.row_wise, start_pos=args.start_position
)
label.open(args.output_file)
sheet.open(args.output_file)

# setup LabelRenderer with Label
l = label.Label(start_asn)

# If defined use parameter for number of labels
if args.num_labels:
count = args.num_labels
else:
# Otherwise number of pages*labels - offset
count = args.pages * label.across * label.down - label.position
label.render(render, count)
label.close()
count = args.pages * sheet.across * sheet.down - sheet.position
sheet.render(l.render, count)
sheet.close()

0 comments on commit e86c6be

Please sign in to comment.