forked from CGM_Public/pretix_original
Fix widget v2 deployment updateassets (#5176)
* Fix widget v2 deployment updateassets * fix code style issues
This commit is contained in:
committed by
GitHub
parent
92f7456eca
commit
8ad0944dcf
@@ -29,7 +29,9 @@ from django.core.management.base import BaseCommand
|
|||||||
from django_scopes import scopes_disabled
|
from django_scopes import scopes_disabled
|
||||||
|
|
||||||
from pretix.base.settings import GlobalSettingsObject
|
from pretix.base.settings import GlobalSettingsObject
|
||||||
from pretix.presale.views.widget import generate_widget_js
|
from pretix.presale.views.widget import (
|
||||||
|
generate_widget_js, version_max, version_min,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
@@ -43,19 +45,22 @@ class Command(BaseCommand):
|
|||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
gs = GlobalSettingsObject()
|
gs = GlobalSettingsObject()
|
||||||
for lc, ll in settings.LANGUAGES:
|
for lc, ll in settings.LANGUAGES:
|
||||||
data = generate_widget_js(lc).encode()
|
for version in range(version_min, version_max + 1):
|
||||||
checksum = hashlib.sha1(data).hexdigest()
|
data = generate_widget_js(version, lc).encode()
|
||||||
fname = gs.settings.get('widget_file_{}'.format(lc))
|
checksum = hashlib.sha1(data).hexdigest()
|
||||||
if not fname or gs.settings.get('widget_checksum_{}'.format(lc), '') != checksum:
|
settings_file_key = 'widget_file_v{}_{}'.format(version, lc)
|
||||||
newname = default_storage.save(
|
settings_checksum_key = 'widget_checksum_v{}_{}'.format(version, lc)
|
||||||
'pub/widget/widget.{}.{}.js'.format(lc, checksum),
|
fname = gs.settings.get(settings_file_key)
|
||||||
ContentFile(data)
|
if not fname or gs.settings.get(settings_checksum_key, '') != checksum:
|
||||||
)
|
newname = default_storage.save(
|
||||||
gs.settings.set('widget_file_{}'.format(lc), 'file://' + newname)
|
'pub/widget/widget.v{}.{}.{}.js'.format(version, lc, checksum),
|
||||||
gs.settings.set('widget_checksum_{}'.format(lc), checksum)
|
ContentFile(data)
|
||||||
cache.delete('widget_js_data_{}'.format(lc))
|
)
|
||||||
if fname:
|
gs.settings.set(settings_file_key, 'file://' + newname)
|
||||||
if isinstance(fname, File):
|
gs.settings.set(settings_checksum_key, checksum)
|
||||||
default_storage.delete(fname.name)
|
cache.delete('widget_js_data_v{}_{}'.format(version, lc))
|
||||||
else:
|
if fname:
|
||||||
default_storage.delete(fname)
|
if isinstance(fname, File):
|
||||||
|
default_storage.delete(fname.name)
|
||||||
|
else:
|
||||||
|
default_storage.delete(fname)
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ def widget_js(request, version, lang, **kwargs):
|
|||||||
'lang': lang,
|
'lang': lang,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
cached_js = cache.get('widget_js_data_{}_{}'.format(version, lang))
|
cached_js = cache.get('widget_js_data_v{}_{}'.format(version, lang))
|
||||||
if cached_js and not settings.DEBUG:
|
if cached_js and not settings.DEBUG:
|
||||||
resp = HttpResponse(cached_js, content_type='text/javascript')
|
resp = HttpResponse(cached_js, content_type='text/javascript')
|
||||||
resp._csp_ignore = True
|
resp._csp_ignore = True
|
||||||
@@ -233,7 +233,7 @@ def widget_js(request, version, lang, **kwargs):
|
|||||||
try:
|
try:
|
||||||
data = default_storage.open(fname).read()
|
data = default_storage.open(fname).read()
|
||||||
resp = HttpResponse(data, content_type='text/javascript')
|
resp = HttpResponse(data, content_type='text/javascript')
|
||||||
cache.set('widget_js_data_{}_{}'.format(version, lang), data, 3600 * 4)
|
cache.set('widget_js_data_v{}_{}'.format(version, lang), data, 3600 * 4)
|
||||||
except:
|
except:
|
||||||
logger.exception('Failed to open widget.js')
|
logger.exception('Failed to open widget.js')
|
||||||
|
|
||||||
@@ -247,7 +247,7 @@ def widget_js(request, version, lang, **kwargs):
|
|||||||
)
|
)
|
||||||
gs.settings.set('widget_file_{}_{}'.format(version, lang), 'file://' + newname)
|
gs.settings.set('widget_file_{}_{}'.format(version, lang), 'file://' + newname)
|
||||||
gs.settings.set('widget_checksum_{}_{}'.format(version, lang), checksum)
|
gs.settings.set('widget_checksum_{}_{}'.format(version, lang), checksum)
|
||||||
cache.set('widget_js_data_{}_{}'.format(version, lang), data, 3600 * 4)
|
cache.set('widget_js_data_v{}_{}'.format(version, lang), data, 3600 * 4)
|
||||||
resp = HttpResponse(data, content_type='text/javascript')
|
resp = HttpResponse(data, content_type='text/javascript')
|
||||||
resp._csp_ignore = True
|
resp._csp_ignore = True
|
||||||
resp['Access-Control-Allow-Origin'] = '*'
|
resp['Access-Control-Allow-Origin'] = '*'
|
||||||
|
|||||||
Reference in New Issue
Block a user