Spaces:
Sleeping
Sleeping
File size: 1,847 Bytes
598559d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
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]
|