forked from CGM_Public/pretix_original
Widget: More resilient file handling
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import hashlib
|
import hashlib
|
||||||
import json
|
import json
|
||||||
|
import logging
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.staticfiles import finders
|
from django.contrib.staticfiles import finders
|
||||||
@@ -31,6 +32,8 @@ from pretix.presale.views.event import (
|
|||||||
get_grouped_items, item_group_by_category,
|
get_grouped_items, item_group_by_category,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def indent(s):
|
def indent(s):
|
||||||
return s.replace('\n', '\n ')
|
return s.replace('\n', '\n ')
|
||||||
@@ -107,11 +110,17 @@ def widget_js(request, lang, **kwargs):
|
|||||||
|
|
||||||
gs = GlobalSettingsObject()
|
gs = GlobalSettingsObject()
|
||||||
fname = gs.settings.get('widget_file_{}'.format(lang))
|
fname = gs.settings.get('widget_file_{}'.format(lang))
|
||||||
print(fname, settings.DEBUG)
|
resp = None
|
||||||
if not fname or settings.DEBUG:
|
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()
|
data = generate_widget_js(lang).encode()
|
||||||
checksum = hashlib.sha1(data).hexdigest()
|
checksum = hashlib.sha1(data).hexdigest()
|
||||||
if not fname:
|
if not settings.DEBUG:
|
||||||
newname = default_storage.save(
|
newname = default_storage.save(
|
||||||
'widget/widget.{}.{}.js'.format(lang, checksum),
|
'widget/widget.{}.{}.js'.format(lang, checksum),
|
||||||
ContentFile(data)
|
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_file_{}'.format(lang), 'file://' + newname)
|
||||||
gs.settings.set('widget_checksum_{}'.format(lang), checksum)
|
gs.settings.set('widget_checksum_{}'.format(lang), checksum)
|
||||||
resp = HttpResponse(data, content_type='text/javascript')
|
resp = HttpResponse(data, content_type='text/javascript')
|
||||||
else:
|
|
||||||
resp = FileResponse(default_storage.open(fname), content_type='text/javascript')
|
|
||||||
return resp
|
return resp
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user