diff --git a/src/pretix/base/forms/__init__.py b/src/pretix/base/forms/__init__.py index 77fb0fcc27..b67ee403b3 100644 --- a/src/pretix/base/forms/__init__.py +++ b/src/pretix/base/forms/__init__.py @@ -5,6 +5,7 @@ import os from django import forms from django.conf import settings from django.core.files import File +from django.core.files.storage import default_storage from django.core.files.uploadedfile import UploadedFile from django.db import models from django.forms.models import BaseModelForm, ModelFormMetaclass @@ -105,8 +106,7 @@ class SettingsForm(forms.Form): ) else: fname = '%s/%s.%s' % (self.obj.slug, name, value.name.split('.')[-1]) - fpath = os.path.join(settings.MEDIA_ROOT, fname) - with open(fpath, 'wb+') as destination: + with default_storage.open(fname, 'wb+') as destination: for chunk in value.chunks(): destination.write(chunk) value._name = fname @@ -118,7 +118,7 @@ class SettingsForm(forms.Form): fname = self.obj.settings.get(name, as_type=File) if fname: try: - os.unlink(fname.name) + default_storage.delete(fname.name) except OSError: logger.error('Deleting file %s failed.' % fname.name) diff --git a/src/pretix/base/settings.py b/src/pretix/base/settings.py index f26c425ed3..7b3f8224c0 100644 --- a/src/pretix/base/settings.py +++ b/src/pretix/base/settings.py @@ -7,6 +7,7 @@ from urllib.parse import urljoin import dateutil.parser from django.conf import settings from django.core.files import File +from django.core.files.storage import default_storage from django.db.models import Model from versions.models import Versionable @@ -139,9 +140,8 @@ class SettingsProxy: return value == 'True' elif as_type == File: try: - f = open(os.path.join(settings.MEDIA_ROOT, value[7:]), 'r') - fi = File(f) - fi.url = urljoin(settings.MEDIA_URL, value[7:]) + fi = default_storage.open(value[7:], 'r') + fi.url = default_storage.url(value[7:]) return fi except OSError: return False diff --git a/src/pretix/plugins/ticketoutputpdf/ticketoutput.py b/src/pretix/plugins/ticketoutputpdf/ticketoutput.py index ecadd11a6d..292565ce25 100644 --- a/src/pretix/plugins/ticketoutputpdf/ticketoutput.py +++ b/src/pretix/plugins/ticketoutputpdf/ticketoutput.py @@ -5,6 +5,7 @@ from io import BytesIO from django import forms from django.contrib.staticfiles import finders from django.core.files import File +from django.core.files.storage import default_storage from django.http import HttpResponse from django.utils.translation import ugettext_lazy as _ @@ -37,12 +38,6 @@ class PdfTicketOutput(BaseTicketOutput): if hasattr(pagesizes, orientation): pagesize = getattr(pagesizes, orientation)(pagesize) - fname = self.settings.get('background', as_type=File) - if isinstance(fname, File): - fname = fname.name - else: - fname = finders.find('pretixpresale/pdf/ticket_default_a4.pdf') - buffer = BytesIO() p = canvas.Canvas(buffer, pagesize=pagesize) @@ -98,11 +93,17 @@ class PdfTicketOutput(BaseTicketOutput): buffer.seek(0) new_pdf = PdfFileReader(buffer) output = PdfFileWriter() + bg_file = self.settings.get('background', as_type=File) + if isinstance(bg_file, File): + new_bg_file = lambda: default_storage.open(bg_file.name, "rb") + else: + new_bg_file = lambda: open(finders.find('pretixpresale/pdf/ticket_default_a4.pdf'), "rb") for page in new_pdf.pages: - bg_pdf = PdfFileReader(open(fname, "rb")) - bg_page = bg_pdf.getPage(0) - bg_page.mergePage(page) - output.addPage(bg_page) + with new_bg_file() as bgf: + bg_pdf = PdfFileReader(bgf) + bg_page = bg_pdf.getPage(0) + bg_page.mergePage(page) + output.addPage(bg_page) outbuffer = BytesIO() output.write(outbuffer)