diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py index 8a1b6f9c05f864d07429409cebd440dfbd0d864c..318c669ae02c4afd3f410989a6b9a154c00cd969 100644 --- a/aleksis/core/settings.py +++ b/aleksis/core/settings.py @@ -1,7 +1,6 @@ import os from glob import glob -from django.core.files.temp import gettempdir from django.utils.translation import gettext_lazy as _ from dynaconf import LazySettings @@ -454,9 +453,6 @@ SASS_PROCESSOR_INCLUDE_DIRS = [ STATIC_ROOT, ] -# Temporary files -TEMP_DIRECTORY = _settings.get("temp_files.directory", gettempdir()) - ADMINS = _settings.get("contact.admins", []) SERVER_EMAIL = _settings.get("contact.from", "root@localhost") DEFAULT_FROM_EMAIL = _settings.get("contact.from", "root@localhost") diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py index e1859d3090f006833134d851b68ad4b4a85020b8..676894d28d62f32ee9c08de874edf6857f94a629 100644 --- a/aleksis/core/util/core_helpers.py +++ b/aleksis/core/util/core_helpers.py @@ -4,7 +4,6 @@ from datetime import datetime, timedelta from importlib import import_module from itertools import groupby from operator import itemgetter -from tempfile import mkstemp from typing import Any, Callable, Optional, Sequence, Union from uuid import uuid4 @@ -271,9 +270,3 @@ def queryset_rules_filter( def unread_notifications_badge(request: HttpRequest) -> int: """Generate badge content with the number of unread notifications.""" return request.user.person.unread_notifications_count - - -def make_temp_file(*args, **kwargs): - """Wrap mkstemp to ensure that the configured temp directory is used.""" - kwargs["dir"] = settings.TEMP_DIRECTORY - return mkstemp(*args, **kwargs) diff --git a/aleksis/core/util/pdf.py b/aleksis/core/util/pdf.py index f6e2bf298a434ece70e95b6358f83665d1ff33a8..24a98816b87f38848d5320c9e31c3f4f69ff1782 100644 --- a/aleksis/core/util/pdf.py +++ b/aleksis/core/util/pdf.py @@ -1,6 +1,7 @@ import glob import os import subprocess # noqa +from tempfile import TemporaryDirectory from django.http.request import HttpRequest from django.http.response import HttpResponse @@ -13,7 +14,7 @@ from celery_progress.backend import ProgressRecorder from aleksis.core.celery import app from aleksis.core.settings import MEDIA_ROOT, MEDIA_URL, STATIC_ROOT from aleksis.core.util.celery_progress import recorded_task -from aleksis.core.util.core_helpers import make_temp_file, path_and_rename +from aleksis.core.util.core_helpers import path_and_rename @recorded_task @@ -24,22 +25,22 @@ def generate_pdf(html_code: str, pdf_path: str, recorder: ProgressRecorder): # Replace /static with STATIC_ROOT to get local file system paths html_code = html_code.replace("/static", STATIC_ROOT) - # Write HTML code to a temporary file to make it available for electron-pdf - f, path = make_temp_file(".html") - with open(path, "w") as f: - f.write(html_code) - - # Start a X framebuffer and run electron-pdf - os.environ["DISPLAY"] = ":99.0" - xfvb_process = subprocess.Popen( # noqa - ["Xvfb", ":99", "-screen", "0", "1024x768x24"], - stdout=subprocess.DEVNULL, - stderr=subprocess.DEVNULL, - ) - subprocess.run(["electron-pdf", path, pdf_path]) # noqa - xfvb_process.terminate() - - os.remove(path) + # Open a temporary directory + with TemporaryDirectory() as temp_dir: + # Write HTML code to a temporary file to make it available for electron-pdf + path = os.path.join(temp_dir, "print_source.html") + with open(path, "w") as f: + f.write(html_code) + + # Start a X framebuffer and run electron-pdf + os.environ["DISPLAY"] = ":99.0" + xfvb_process = subprocess.Popen( # noqa + ["Xvfb", ":99", "-screen", "0", "1024x768x24"], + stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL, + ) + subprocess.run(["electron-pdf", path, pdf_path]) # noqa + xfvb_process.terminate() recorder.set_progress(1, 1)