From 2280558303a0e267fcd708aa14cdef8538766bae Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 15 Aug 2020 19:27:31 +1000 Subject: [PATCH 1/4] Add a method of return raw LaTeX for debugging --- InvenTree/report/models.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index 93f1f1a95f..c85fe8878f 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -29,11 +29,20 @@ except OSError as err: if settings.LATEX_ENABLED: try: from django_tex.shortcuts import render_to_pdf + from django_tex.core import render_template_with_context except OSError as err: print("OSError: {e}".format(e=err)) print("You may not have a working LaTeX toolchain installed?") sys.exit(1) +from django.http import HttpResponse + +class TexResponse(HttpResponse): + def __init__(self, content, filename=None): + super().__init__(content_type="application/txt") + self["Content-Disposition"] = 'filename="{}"'.format(filename) + self.write(content) + def rename_template(instance, filename): @@ -154,6 +163,8 @@ class ReportTemplateBase(models.Model): if self.extension == '.tex': # Render LaTeX template to PDF if settings.LATEX_ENABLED: + rendered = render_template_with_context(self.template_name, context) + #return TexResponse(rendered, filename="raw.tex") return render_to_pdf(request, self.template_name, context, filename=filename) else: return ValidationError("Enable LaTeX support in config.yaml") From 5a8804f4bc1565235f1ccd49c90b7ef0c903c656 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Thu, 20 Aug 2020 13:57:29 +1000 Subject: [PATCH 2/4] If LaTeX template errors, return the raw LaTeX! --- InvenTree/report/models.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index c85fe8878f..fd27b2bc6e 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -30,6 +30,7 @@ if settings.LATEX_ENABLED: try: from django_tex.shortcuts import render_to_pdf from django_tex.core import render_template_with_context + from django_tex.exceptions import TexError except OSError as err: print("OSError: {e}".format(e=err)) print("You may not have a working LaTeX toolchain installed?") @@ -163,9 +164,14 @@ class ReportTemplateBase(models.Model): if self.extension == '.tex': # Render LaTeX template to PDF if settings.LATEX_ENABLED: - rendered = render_template_with_context(self.template_name, context) - #return TexResponse(rendered, filename="raw.tex") - return render_to_pdf(request, self.template_name, context, filename=filename) + # Attempt to render to LaTeX template + # If there is a rendering error, return the (partially rendered) template, + # so at least we can debug what is going on + try: + rendered = render_template_with_context(self.template_name, context) + return render_to_pdf(request, self.template_name, context, filename=filename) + except TexError: + return TexResponse(rendered, filename="error.tex") else: return ValidationError("Enable LaTeX support in config.yaml") elif self.extension in ['.htm', '.html']: From 64ae181bf6186143903a42ec2b569f8a63d4cc29 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Thu, 20 Aug 2020 14:01:41 +1000 Subject: [PATCH 3/4] Add some more context data --- InvenTree/report/models.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index fd27b2bc6e..1e0fce3658 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -8,6 +8,8 @@ from __future__ import unicode_literals import os import sys +import datetime + from django.db import models from django.conf import settings @@ -160,6 +162,8 @@ class ReportTemplateBase(models.Model): context = self.get_context_data(request) context['request'] = request + context['user'] = request.user + context['datetime'] = datetime.datetime.now() if self.extension == '.tex': # Render LaTeX template to PDF From 8e0dfa9c6f724c4e88655e965fc48401ccea631c Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Thu, 20 Aug 2020 14:05:55 +1000 Subject: [PATCH 4/4] PEP fix --- InvenTree/report/models.py | 1 + 1 file changed, 1 insertion(+) diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index 1e0fce3658..697f5691d5 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -40,6 +40,7 @@ if settings.LATEX_ENABLED: from django.http import HttpResponse + class TexResponse(HttpResponse): def __init__(self, content, filename=None): super().__init__(content_type="application/txt")