updatestyles: Properly clena up old CSS files

This commit is contained in:
Raphael Michel
2021-05-01 12:52:40 +02:00
parent 3b585d15cd
commit 79b113ef57

View File

@@ -29,7 +29,7 @@ import sass
from compressor.filters.cssmin import CSSCompressorFilter from compressor.filters.cssmin import CSSCompressorFilter
from django.conf import settings from django.conf import settings
from django.core.cache import cache from django.core.cache import cache
from django.core.files.base import ContentFile from django.core.files.base import ContentFile, File
from django.core.files.storage import default_storage from django.core.files.storage import default_storage
from django.dispatch import Signal from django.dispatch import Signal
from django.templatetags.static import static as _static from django.templatetags.static import static as _static
@@ -123,6 +123,14 @@ def compile_scss(object, file="main.scss", fonts=True):
return css, checksum return css, checksum
def delete_old_file(fname):
if fname:
if isinstance(fname, File):
default_storage.delete(fname.name)
else:
default_storage.delete(fname)
@app.task(base=TransactionAwareProfiledEventTask) @app.task(base=TransactionAwareProfiledEventTask)
def regenerate_css(event): def regenerate_css(event):
# main.scss # main.scss
@@ -130,18 +138,22 @@ def regenerate_css(event):
fname = 'pub/{}/{}/presale.{}.css'.format(event.organizer.slug, event.slug, checksum[:16]) fname = 'pub/{}/{}/presale.{}.css'.format(event.organizer.slug, event.slug, checksum[:16])
if event.settings.get('presale_css_checksum', '') != checksum: if event.settings.get('presale_css_checksum', '') != checksum:
old_fname = event.settings.get('presale_css_file') if 'presale_css_file' in event.settings._cache() else None
newname = default_storage.save(fname, ContentFile(css.encode('utf-8'))) newname = default_storage.save(fname, ContentFile(css.encode('utf-8')))
event.settings.set('presale_css_file', newname) event.settings.set('presale_css_file', newname)
event.settings.set('presale_css_checksum', checksum) event.settings.set('presale_css_checksum', checksum)
delete_old_file(old_fname)
# widget.scss # widget.scss
css, checksum = compile_scss(event, file='widget.scss', fonts=False) css, checksum = compile_scss(event, file='widget.scss', fonts=False)
fname = 'pub/{}/{}/widget.{}.css'.format(event.organizer.slug, event.slug, checksum[:16]) fname = 'pub/{}/{}/widget.{}.css'.format(event.organizer.slug, event.slug, checksum[:16])
if event.settings.get('presale_widget_css_checksum', '') != checksum: if event.settings.get('presale_widget_css_checksum', '') != checksum:
old_fname = event.settings.get('presale_css_file') if 'presale_widget_css_file' in event.settings._cache() else None
newname = default_storage.save(fname, ContentFile(css.encode('utf-8'))) newname = default_storage.save(fname, ContentFile(css.encode('utf-8')))
event.settings.set('presale_widget_css_file', newname) event.settings.set('presale_widget_css_file', newname)
event.settings.set('presale_widget_css_checksum', checksum) event.settings.set('presale_widget_css_checksum', checksum)
delete_old_file(old_fname)
@app.task(base=TransactionAwareTask) @app.task(base=TransactionAwareTask)
@@ -153,17 +165,21 @@ def regenerate_organizer_css(organizer_id: int):
css, checksum = compile_scss(organizer) css, checksum = compile_scss(organizer)
fname = 'pub/{}/presale.{}.css'.format(organizer.slug, checksum[:16]) fname = 'pub/{}/presale.{}.css'.format(organizer.slug, checksum[:16])
if organizer.settings.get('presale_css_checksum', '') != checksum: if organizer.settings.get('presale_css_checksum', '') != checksum:
old_fname = organizer.settings.get('presale_css_file')
newname = default_storage.save(fname, ContentFile(css.encode('utf-8'))) newname = default_storage.save(fname, ContentFile(css.encode('utf-8')))
organizer.settings.set('presale_css_file', newname) organizer.settings.set('presale_css_file', newname)
organizer.settings.set('presale_css_checksum', checksum) organizer.settings.set('presale_css_checksum', checksum)
delete_old_file(old_fname)
# widget.scss # widget.scss
css, checksum = compile_scss(organizer, file='widget.scss', fonts=False) css, checksum = compile_scss(organizer, file='widget.scss', fonts=False)
fname = 'pub/{}/widget.{}.css'.format(organizer.slug, checksum[:16]) fname = 'pub/{}/widget.{}.css'.format(organizer.slug, checksum[:16])
if organizer.settings.get('presale_widget_css_checksum', '') != checksum: if organizer.settings.get('presale_widget_css_checksum', '') != checksum:
old_fname = organizer.settings.get('presale_widget_css_file')
newname = default_storage.save(fname, ContentFile(css.encode('utf-8'))) newname = default_storage.save(fname, ContentFile(css.encode('utf-8')))
organizer.settings.set('presale_widget_css_file', newname) organizer.settings.set('presale_widget_css_file', newname)
organizer.settings.set('presale_widget_css_checksum', checksum) organizer.settings.set('presale_widget_css_checksum', checksum)
delete_old_file(old_fname)
non_inherited_events = set(Event_SettingsStore.objects.filter( non_inherited_events = set(Event_SettingsStore.objects.filter(
object__organizer=organizer, key__in=affected_keys object__organizer=organizer, key__in=affected_keys