Widget: More resilient file handling

This commit is contained in:
Raphael Michel
2018-03-21 09:55:59 +01:00
parent 5cbcbe6d7e
commit 18be4db320

View File

@@ -1,5 +1,6 @@
import hashlib
import json
import logging
from django.conf import settings
from django.contrib.staticfiles import finders
@@ -31,6 +32,8 @@ from pretix.presale.views.event import (
get_grouped_items, item_group_by_category,
)
logger = logging.getLogger(__name__)
def indent(s):
return s.replace('\n', '\n ')
@@ -107,11 +110,17 @@ def widget_js(request, lang, **kwargs):
gs = GlobalSettingsObject()
fname = gs.settings.get('widget_file_{}'.format(lang))
print(fname, settings.DEBUG)
if not fname or settings.DEBUG:
resp = None
if fname and not settings.DEBUG:
try:
resp = HttpResponse(default_storage.open(fname).read(), content_type='text/javascript')
except:
logger.exception('Failed to open widget.js')
if not resp:
data = generate_widget_js(lang).encode()
checksum = hashlib.sha1(data).hexdigest()
if not fname:
if not settings.DEBUG:
newname = default_storage.save(
'widget/widget.{}.{}.js'.format(lang, checksum),
ContentFile(data)
@@ -119,8 +128,6 @@ def widget_js(request, lang, **kwargs):
gs.settings.set('widget_file_{}'.format(lang), 'file://' + newname)
gs.settings.set('widget_checksum_{}'.format(lang), checksum)
resp = HttpResponse(data, content_type='text/javascript')
else:
resp = FileResponse(default_storage.open(fname), content_type='text/javascript')
return resp