新增PDF批量预生成
This commit is contained in:
@@ -64,6 +64,12 @@ def update_pdf_access_time(certificate: Certificate) -> None:
|
||||
certificate.pdf_last_accessed_at = datetime.utcnow()
|
||||
|
||||
|
||||
def mark_pdf_generated(certificate: Certificate, output_path: Path) -> None:
|
||||
certificate.pdf_status = "generated"
|
||||
certificate.pdf_file_path = str(output_path)
|
||||
update_pdf_access_time(certificate)
|
||||
|
||||
|
||||
def certificate_template_path() -> Path:
|
||||
assets_dir = Path(__file__).resolve().parents[1] / "assets"
|
||||
for name in ["certificate-template.png", "certificate-template.jpg"]:
|
||||
@@ -88,24 +94,20 @@ def render_certificate_pdf(
|
||||
template_path = certificate_template_path()
|
||||
latest_renderer_mtime = max(template_path.stat().st_mtime, Path(__file__).stat().st_mtime)
|
||||
if cached_pdf_is_fresh(output_path) and output_path.stat().st_mtime >= latest_renderer_mtime:
|
||||
# 更新访问时间
|
||||
update_pdf_access_time(certificate)
|
||||
mark_pdf_generated(certificate, output_path)
|
||||
return output_path
|
||||
|
||||
pdf_generation_limiter.acquire(max(1, concurrency_limit))
|
||||
try:
|
||||
if cached_pdf_is_fresh(output_path) and output_path.stat().st_mtime >= latest_renderer_mtime:
|
||||
update_pdf_access_time(certificate)
|
||||
mark_pdf_generated(certificate, output_path)
|
||||
return output_path
|
||||
image = render_certificate_image(certificate, learner, project)
|
||||
image.save(output_path, "PDF", resolution=pdf_resolution(image))
|
||||
finally:
|
||||
pdf_generation_limiter.release()
|
||||
|
||||
certificate.pdf_status = "generated"
|
||||
certificate.pdf_file_path = str(output_path)
|
||||
# 更新访问时间
|
||||
update_pdf_access_time(certificate)
|
||||
mark_pdf_generated(certificate, output_path)
|
||||
return output_path
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user