feat: printing uploaded product barcode images
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
from io import BytesIO
|
||||
from typing import Any, Optional
|
||||
|
||||
import aiohttp
|
||||
from reportlab.graphics.barcode import code128
|
||||
from reportlab.lib.units import mm
|
||||
from reportlab.platypus import Spacer, PageBreak, Paragraph
|
||||
@ -24,7 +25,7 @@ class BarcodePdfGenerator(PDFGenerator):
|
||||
return None
|
||||
return value
|
||||
|
||||
def generate(
|
||||
async def generate(
|
||||
self, barcodes_data: list[BarcodeData | PdfBarcodeImageGenData]
|
||||
) -> BytesIO:
|
||||
pdf_barcodes_gen_data: list[PdfBarcodeGenData | PdfBarcodeImageGenData] = []
|
||||
@ -52,9 +53,9 @@ class BarcodePdfGenerator(PDFGenerator):
|
||||
}
|
||||
)
|
||||
|
||||
return self._generate(pdf_barcodes_gen_data)
|
||||
return await self._generate(pdf_barcodes_gen_data)
|
||||
|
||||
def _generate(
|
||||
async def _generate(
|
||||
self, barcodes_data: list[PdfBarcodeGenData | PdfBarcodeImageGenData]
|
||||
) -> BytesIO:
|
||||
pdf_maker = PdfMaker((self.page_width, self.page_height))
|
||||
@ -63,9 +64,10 @@ class BarcodePdfGenerator(PDFGenerator):
|
||||
|
||||
for barcode_data in barcodes_data:
|
||||
if "barcode_value" in barcode_data:
|
||||
pdf_files.append(self._generate_for_one_product(barcode_data))
|
||||
result = self._generate_for_one_product(barcode_data)
|
||||
else:
|
||||
pdf_files.append(self._generate_for_one_product_using_img(barcode_data))
|
||||
result = await self._generate_for_one_product_using_img(barcode_data)
|
||||
pdf_files.append(result)
|
||||
pdf_files.append(self._generate_spacers())
|
||||
|
||||
for file in pdf_files[:-1]:
|
||||
@ -138,11 +140,18 @@ class BarcodePdfGenerator(PDFGenerator):
|
||||
buffer.seek(0)
|
||||
return buffer
|
||||
|
||||
def _generate_for_one_product_using_img(
|
||||
async def _generate_for_one_product_using_img(
|
||||
self, barcode_data: PdfBarcodeImageGenData
|
||||
) -> BytesIO:
|
||||
with open(barcode_data["barcode_image_url"], "rb") as pdf_file:
|
||||
pdf_bytes = pdf_file.read()
|
||||
pdf_url = barcode_data["barcode_image_url"]
|
||||
|
||||
async with aiohttp.ClientSession() as session:
|
||||
async with session.get(pdf_url) as response:
|
||||
if response.status != 200:
|
||||
raise ValueError(
|
||||
f"Failed to download PDF from {pdf_url} (status {response.status})"
|
||||
)
|
||||
pdf_bytes = await response.read()
|
||||
|
||||
pdf_maker = PdfMaker((self.page_width, self.page_height))
|
||||
for _ in range(barcode_data["num_duplicates"]):
|
||||
|
||||
Reference in New Issue
Block a user