base/pdf: Only call get_fonts() once per generation

This commit is contained in:
Martin Gross
2024-03-08 11:23:31 +01:00
parent 5fa5810670
commit de1e7abc48
+2 -6
View File
@@ -52,7 +52,6 @@ import reportlab.rl_config
from bidi.algorithm import get_display
from django.conf import settings
from django.contrib.staticfiles import finders
from django.core.cache import cache
from django.core.exceptions import ValidationError
from django.db.models import Max, Min
from django.db.models.fields.files import FieldFile
@@ -739,6 +738,7 @@ class Renderer:
else:
self.bg_bytes = None
self.bg_pdf = None
self.event_fonts = list(get_fonts(event, pdf_support_required=True).keys()) + ['Open Sans']
@classmethod
def _register_fonts(cls, event: Event = None):
@@ -942,11 +942,7 @@ class Renderer:
# Since pdfmetrics.registerFont is global, we want to make sure that no one tries to sneak in a font, they
# should not have access to.
event_fonts = cache.get(f'event_fonts_pdf_support_required_{order.event.pk}')
if not event_fonts:
event_fonts = list(get_fonts(order.event, pdf_support_required=True).keys()) + ['Open Sans']
cache.set(f'event_fonts_pdf_support_required_{order.event.pk}', event_fonts, 30)
if font not in event_fonts:
if font not in self.event_fonts:
logger.warning(f'Unauthorized use of font "{font}"')
font = 'Open Sans'