from typing import List, Dict from barcodes.attributes import AttributeWriterFactory from barcodes.generator.base import BaseBarcodeGenerator from barcodes.pdf import PDFGenerator from models import Product, BarcodeTemplate from schemas.barcode import PdfBarcodeGenData class DefaultBarcodeGenerator(BaseBarcodeGenerator): def generate(self, barcodes_data: List[Dict[str, str | Product | BarcodeTemplate | int]]): pdf_generator = PDFGenerator() pdf_barcodes_gen_data: List[PdfBarcodeGenData] = [] for barcode_data in barcodes_data: attributes = {} for attribute in barcode_data["template"].attributes: attribute_getter = AttributeWriterFactory.get_writer(attribute.key) if not attribute_getter: continue value = attribute_getter.get_value(barcode_data["product"]) if not value or not value.strip(): continue attributes[attribute.name] = value for additional_attribute in barcode_data["template"].additional_attributes: attributes[additional_attribute.name] = additional_attribute.value barcode_text = '
'.join([f'{key}: {value}' for key, value in attributes.items()]) pdf_barcodes_gen_data.append( PdfBarcodeGenData( barcode_value=barcode_data["barcode"], text=barcode_text, num_duplicates=barcode_data["quantity"] ) ) print(f"value = {barcode_data['barcode']}, text = {barcode_text}, num = {barcode_data['quantity']}") return pdf_generator.generate(pdf_barcodes_gen_data)