From 7c64cb950c4f0bec5623f72552654f2b9d34baea Mon Sep 17 00:00:00 2001 From: Oliver Date: Fri, 18 Feb 2022 00:01:49 +1100 Subject: [PATCH] Delete template files from cache as they are uploaded --- InvenTree/report/api.py | 3 +-- InvenTree/report/models.py | 19 +++++++++++++------ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/InvenTree/report/api.py b/InvenTree/report/api.py index 710f0562b1..c7d2b15e4d 100644 --- a/InvenTree/report/api.py +++ b/InvenTree/report/api.py @@ -226,11 +226,10 @@ class ReportPrintMixin: else: outputs.append(report.render(request)) except TemplateDoesNotExist as e: - template = str(e) if not template: template = report.template - + return Response( { 'error': _(f"Template file '{template}' is missing or does not exist"), diff --git a/InvenTree/report/models.py b/InvenTree/report/models.py index c2766ec959..3ee19bd5e6 100644 --- a/InvenTree/report/models.py +++ b/InvenTree/report/models.py @@ -14,12 +14,12 @@ import datetime from django.urls import reverse from django.db import models from django.conf import settings +from django.core.cache import cache from django.core.exceptions import ValidationError, FieldError from django.template.loader import render_to_string from django.template import Template, Context -from django.core.files.storage import FileSystemStorage from django.core.validators import FileExtensionValidator import build.models @@ -137,17 +137,20 @@ class ReportBase(models.Model): path = os.path.join('report', 'report_template', self.getSubdir(), filename) + fullpath = os.path.join(settings.MEDIA_ROOT, path) + fullpath = os.path.abspath(fullpath) + # If the report file is the *same* filename as the one being uploaded, # remove the original one from the media directory if str(filename) == str(self.template): - fullpath = os.path.join(settings.MEDIA_ROOT, path) - fullpath = os.path.abspath(fullpath) - if os.path.exists(fullpath): logger.info(f"Deleting existing report template: '{filename}'") os.remove(fullpath) + # Ensure that the cache is cleared for this template! + cache.delete(fullpath) + return path @property @@ -515,16 +518,20 @@ def rename_snippet(instance, filename): path = os.path.join('report', 'snippets', filename) + fullpath = os.path.join(settings.MEDIA_ROOT, path) + fullpath = os.path.abspath(fullpath) + # If the snippet file is the *same* filename as the one being uploaded, # delete the original one from the media directory if str(filename) == str(instance.snippet): - fullpath = os.path.join(settings.MEDIA_ROOT, path) - fullpath = os.path.abspath(fullpath) if os.path.exists(fullpath): logger.info(f"Deleting existing snippet file: '{filename}'") os.remove(fullpath) + # Ensure that the cache is deleted for this snippet + cache.delete(fullpath) + return path