labels and stuff
This commit is contained in:
77
app/services/address_label_service.py
Normal file
77
app/services/address_label_service.py
Normal file
@ -0,0 +1,77 @@
|
||||
from typing import List, Dict, Optional, Literal
|
||||
import csv
|
||||
import os
|
||||
from pathlib import Path
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
from weasyprint import HTML
|
||||
|
||||
class AddressLabelService:
|
||||
def __init__(self):
|
||||
self.template_dir = Path("app/data/assets/templates")
|
||||
self.env = Environment(loader=FileSystemLoader(str(self.template_dir)))
|
||||
self.templates = {
|
||||
"dk1241": self.env.get_template("address_label_dk1241.html"),
|
||||
"dk1201": self.env.get_template("address_label_dk1201.html")
|
||||
}
|
||||
self.return_address_path = "file://" + os.path.abspath("app/data/assets/images/ccrcardsaddress.png")
|
||||
self.output_dir = "app/data/cache/tcgplayer/address_labels/"
|
||||
os.makedirs(self.output_dir, exist_ok=True)
|
||||
|
||||
def generate_labels_from_csv(self, csv_path: str, label_type: Literal["dk1201", "dk1241"]) -> List[str]:
|
||||
"""Generate address labels from a CSV file and save them as PDFs.
|
||||
|
||||
Args:
|
||||
csv_path: Path to the CSV file containing address data
|
||||
label_type: Type of label to generate ("6x4" or "dk1201")
|
||||
|
||||
Returns:
|
||||
List of paths to generated PDF files
|
||||
"""
|
||||
generated_files = []
|
||||
|
||||
with open(csv_path, 'r') as csvfile:
|
||||
reader = csv.DictReader(csvfile)
|
||||
for row in reader:
|
||||
# Generate label for each row
|
||||
pdf_path = self._generate_single_label(row, label_type)
|
||||
if pdf_path:
|
||||
generated_files.append(str(pdf_path))
|
||||
|
||||
return generated_files
|
||||
|
||||
def _generate_single_label(self, row: Dict[str, str], label_type: Literal["dk1201", "dk1241"]) -> Optional[str]:
|
||||
"""Generate a single address label PDF.
|
||||
|
||||
Args:
|
||||
row: Dictionary containing address data
|
||||
label_type: Type of label to generate ("6x4" or "dk1201")
|
||||
|
||||
Returns:
|
||||
Path to the generated PDF file or None if generation failed
|
||||
"""
|
||||
try:
|
||||
# Prepare template data
|
||||
template_data = {
|
||||
"recipient_name": f"{row['FirstName']} {row['LastName']}",
|
||||
"address_line1": row['Address1'],
|
||||
"address_line2": row['Address2'],
|
||||
"city": row['City'],
|
||||
"state": row['State'],
|
||||
"zip_code": row['PostalCode']
|
||||
}
|
||||
|
||||
# Add return address path only for 6x4 labels
|
||||
if label_type == "dk1241":
|
||||
template_data["return_address_path"] = self.return_address_path
|
||||
|
||||
# Render HTML
|
||||
html_content = self.templates[label_type].render(**template_data)
|
||||
|
||||
# Generate PDF
|
||||
pdf_path = self.output_dir + f"{row['Order #']}_{label_type}.pdf"
|
||||
HTML(string=html_content).write_pdf(str(pdf_path))
|
||||
return pdf_path
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error generating label for order {row.get('Order #', 'unknown')}: {str(e)}")
|
||||
return None
|
Reference in New Issue
Block a user