Skip to content
Snippets Groups Projects
Commit 0246d430 authored by Jonathan Weth's avatar Jonathan Weth :keyboard:
Browse files

[PDF] Set default expiration time much shorter and use default attribute

parent 27f94b46
No related branches found
No related tags found
1 merge request!464Resolve "Support PDF generation via a headless Chromium running in the background using celery"
Pipeline #7115 failed
# Generated by Django 3.2 on 2021-04-10 18:58
import aleksis.core.models
import django.contrib.sites.managers
from django.db import migrations, models
import django.db.models.deletion
......@@ -28,7 +29,7 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('extended_data', models.JSONField(default=dict, editable=False)),
('expires_at', models.DateTimeField(verbose_name='File expires at')),
('expires_at', models.DateTimeField(default=aleksis.core.models.PDFFile._get_default_expiration, verbose_name='File expires at')),
('html', models.TextField(verbose_name='Rendered HTML')),
('file', models.FileField(blank=True, null=True, upload_to='pdfs/', verbose_name='Generated PDF file')),
('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='pdf_files', to='core.person', verbose_name='Owner')),
......
......@@ -974,10 +974,15 @@ class DataCheckResult(ExtensibleModel):
class PDFFile(ExtensibleModel):
"""Link to a rendered PDF file."""
def _get_default_expiration(): # noqa
return timezone.now() + timedelta(minutes=get_site_preferences()["general__pdf_expiration"])
person = models.ForeignKey(
to=Person, on_delete=models.CASCADE, verbose_name=_("Owner"), related_name="pdf_files"
)
expires_at = models.DateTimeField(verbose_name=_("File expires at"))
expires_at = models.DateTimeField(
verbose_name=_("File expires at"), default=_get_default_expiration
)
html = models.TextField(verbose_name=_("Rendered HTML"))
file = models.FileField(
upload_to="pdfs/", blank=True, null=True, verbose_name=_("Generated PDF file")
......@@ -1004,13 +1009,6 @@ class PDFFile(ExtensibleModel):
.geturl()
)
def save(self, *args, **kwargs):
if not self.expires_at:
self.expires_at = timezone.now() + timedelta(
hours=get_site_preferences()["general__pdf_expiration"]
)
super().save(*args, **kwargs)
class Meta:
verbose_name = _("PDF file")
verbose_name_plural = _("PDF files")
......@@ -279,6 +279,6 @@ class PDFFileExpirationDuration(IntegerPreference):
section = general
name = "pdf_expiration"
default = 24
default = 3
verbose_name = _("PDF file expiration duration")
help_text = _("in hours")
help_text = _("in minutes")
......@@ -64,7 +64,9 @@ def test_delete_expired_files():
dummy_person = Person.objects.create(first_name="Jane", last_name="Doe")
file_object = PDFFile.objects.create(person=dummy_person, html=_get_test_html())
file_object2 = PDFFile.objects.create(
person=dummy_person, html=_get_test_html(), expires_at=timezone.now() + timedelta(hours=40)
person=dummy_person,
html=_get_test_html(),
expires_at=timezone.now() + timedelta(minutes=10),
)
with open(_test_pdf, "rb") as f:
file_object.file.save("print.pdf", File(f))
......@@ -77,9 +79,9 @@ def test_delete_expired_files():
assert PDFFile.objects.get(pk=file_object2.pk)
# Prepare times
test_time_before = timezone.now() + timedelta(hours=12)
test_time_between = timezone.now() + timedelta(hours=30)
test_time_after = timezone.now() + timedelta(hours=70)
test_time_before = timezone.now() + timedelta(minutes=2.5)
test_time_between = timezone.now() + timedelta(minutes=4)
test_time_after = timezone.now() + timedelta(minutes=15)
# None of the files are expired
with freezegun.freeze_time(test_time_before):
......
from typing import Any, Dict, Optional, Type
from urllib.parse import urljoin
from django.apps import apps
from django.conf import settings
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied
from django.core.paginator import Paginator
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment