forked from CGM_Public/pretix_original
* Install django-scopes * Fix tests.api * Update tasks and cronjobs * Fix remaining tests * Remove unused import * Fix tests after rebase * Disable scopes for get_Events_with_any_permission * Disable scopes for a management command
44 lines
1.8 KiB
Python
44 lines
1.8 KiB
Python
import hashlib
|
|
|
|
from django.conf import settings
|
|
from django.core.files.base import ContentFile, File
|
|
from django.core.files.storage import default_storage
|
|
from django.core.management.base import BaseCommand
|
|
from django_scopes import scopes_disabled
|
|
|
|
from pretix.base.models import Event_SettingsStore, Organizer_SettingsStore
|
|
from pretix.base.settings import GlobalSettingsObject
|
|
from pretix.presale.views.widget import generate_widget_js
|
|
|
|
from ...style import regenerate_css, regenerate_organizer_css
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = "Re-generate all custom stylesheets and scripts"
|
|
|
|
@scopes_disabled()
|
|
def handle(self, *args, **options):
|
|
for es in Organizer_SettingsStore.objects.filter(key="presale_css_file"):
|
|
regenerate_organizer_css.apply_async(args=(es.object_id,))
|
|
|
|
for es in Event_SettingsStore.objects.filter(key="presale_css_file").order_by('-object__date_from'):
|
|
regenerate_css.apply_async(args=(es.object_id,))
|
|
|
|
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)
|
|
if fname:
|
|
if isinstance(fname, File):
|
|
default_storage.delete(fname.name)
|
|
else:
|
|
default_storage.delete(fname)
|