From 8ad0944dcf01974202b115adfe732e5d10640b55 Mon Sep 17 00:00:00 2001 From: Richard Schreiber Date: Wed, 28 May 2025 15:49:05 +0200 Subject: [PATCH] Fix widget v2 deployment updateassets (#5176) * Fix widget v2 deployment updateassets * fix code style issues --- .../management/commands/updateassets.py | 39 +++++++++++-------- src/pretix/presale/views/widget.py | 6 +-- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/src/pretix/presale/management/commands/updateassets.py b/src/pretix/presale/management/commands/updateassets.py index 8acfefecf..0aabae8d8 100644 --- a/src/pretix/presale/management/commands/updateassets.py +++ b/src/pretix/presale/management/commands/updateassets.py @@ -29,7 +29,9 @@ from django.core.management.base import BaseCommand from django_scopes import scopes_disabled 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): @@ -43,19 +45,22 @@ class Command(BaseCommand): def handle(self, *args, **options): gs = GlobalSettingsObject() for lc, ll in settings.LANGUAGES: - data = generate_widget_js(lc).encode() - checksum = hashlib.sha1(data).hexdigest() - fname = gs.settings.get('widget_file_{}'.format(lc)) - if not fname or gs.settings.get('widget_checksum_{}'.format(lc), '') != checksum: - newname = default_storage.save( - 'pub/widget/widget.{}.{}.js'.format(lc, checksum), - ContentFile(data) - ) - gs.settings.set('widget_file_{}'.format(lc), 'file://' + newname) - gs.settings.set('widget_checksum_{}'.format(lc), checksum) - cache.delete('widget_js_data_{}'.format(lc)) - if fname: - if isinstance(fname, File): - default_storage.delete(fname.name) - else: - default_storage.delete(fname) + for version in range(version_min, version_max + 1): + data = generate_widget_js(version, lc).encode() + checksum = hashlib.sha1(data).hexdigest() + settings_file_key = 'widget_file_v{}_{}'.format(version, lc) + settings_checksum_key = 'widget_checksum_v{}_{}'.format(version, lc) + fname = gs.settings.get(settings_file_key) + if not fname or gs.settings.get(settings_checksum_key, '') != checksum: + newname = default_storage.save( + 'pub/widget/widget.v{}.{}.{}.js'.format(version, lc, checksum), + ContentFile(data) + ) + gs.settings.set(settings_file_key, 'file://' + newname) + gs.settings.set(settings_checksum_key, checksum) + cache.delete('widget_js_data_v{}_{}'.format(version, lc)) + if fname: + if isinstance(fname, File): + default_storage.delete(fname.name) + else: + default_storage.delete(fname) diff --git a/src/pretix/presale/views/widget.py b/src/pretix/presale/views/widget.py index f16755eae..d95624acf 100644 --- a/src/pretix/presale/views/widget.py +++ b/src/pretix/presale/views/widget.py @@ -217,7 +217,7 @@ def widget_js(request, version, lang, **kwargs): '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: resp = HttpResponse(cached_js, content_type='text/javascript') resp._csp_ignore = True @@ -233,7 +233,7 @@ def widget_js(request, version, lang, **kwargs): try: data = default_storage.open(fname).read() 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: 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_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._csp_ignore = True resp['Access-Control-Allow-Origin'] = '*'