JairoDanielMT's picture
ok
30fcc0b
raw
history blame
1.85 kB
from __future__ import annotations
import logging
import os
from pathlib import Path
from typing import Optional
import pdfkit
# Carpeta de este m贸dulo (app/)
BASE_DIR = Path(__file__).parent
# Cache de configuraci贸n de pdfkit
# False => a煤n no inicializado
# None => se intent贸 inicializar pero no se encontr贸 wkhtmltopdf
# config => configuraci贸n v谩lida
_PDFKIT_CONFIG: Optional[pdfkit.configuration] | bool = False
def _detect_wkhtmltopdf() -> Optional[str]:
"""
Para entorno Docker (Linux):
1) Si hay WKHTMLTOPDF_PATH y apunta a un archivo, usarlo.
2) Si no, devolver None y dejar que pdfkit use lo que haya en PATH.
No nos preocupamos por .exe ni por Windows aqu铆.
"""
env_path = os.getenv("WKHTMLTOPDF_PATH")
if env_path and Path(env_path).is_file():
return env_path
# None = que pdfkit use wkhtmltopdf del PATH (/usr/bin/wkhtmltopdf)
return None
def get_pdfkit_config() -> Optional[pdfkit.configuration]:
"""
Devuelve una instancia de pdfkit.configuration o None si
no se pudo inicializar wkhtmltopdf.
"""
global _PDFKIT_CONFIG
if _PDFKIT_CONFIG is not False:
return _PDFKIT_CONFIG # type: ignore[return-value]
wkhtml_path = _detect_wkhtmltopdf()
try:
if wkhtml_path:
_PDFKIT_CONFIG = pdfkit.configuration(wkhtmltopdf=wkhtml_path)
logging.info("wkhtmltopdf detectado en WKHTMLTOPDF_PATH: %s", wkhtml_path)
else:
# Usar binario en PATH (caso normal en Docker: /usr/bin/wkhtmltopdf)
_PDFKIT_CONFIG = pdfkit.configuration()
logging.info("wkhtmltopdf detectado en PATH.")
except OSError as exc:
logging.error("No se pudo inicializar pdfkit: %s", exc)
_PDFKIT_CONFIG = None
return _PDFKIT_CONFIG # type: ignore[return-value]