Skip to content

Commit

Permalink
Avoid calling versioned_static from static form media definitions
Browse files Browse the repository at this point in the history
Fixes wagtail#5632

Defining media definitions with `class Media:` means that those lines are evaluated on application startup; this means that they cannot contain calls to the Django static file finder, because ManifestStaticFilesStorage doesn't work until collectstatic has completed. Fix this by making those definitions into `def media(self):` methods.
  • Loading branch information
gasman committed Oct 22, 2019
1 parent c450646 commit 08a04b8
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 24 deletions.
12 changes: 9 additions & 3 deletions wagtail/admin/rich_text/editors/hallo.py
Original file line number Diff line number Diff line change
Expand Up @@ -68,12 +68,18 @@ def construct_plugins_list(self, plugins):
plugins[self.name]['lists'][self.list_type] = True


class HalloRequireParagraphsPlugin(HalloPlugin):
@property
def media(self):
return Media(js=[
versioned_static('wagtailadmin/js/hallo-plugins/hallo-requireparagraphs.js'),
]) + super().media


# Plugins which are always imported, and cannot be enabled/disabled via 'features'
CORE_HALLO_PLUGINS = [
HalloPlugin(name='halloreundo', order=50),
HalloPlugin(name='hallorequireparagraphs', js=[
versioned_static('wagtailadmin/js/hallo-plugins/hallo-requireparagraphs.js'),
]),
HalloRequireParagraphsPlugin(name='hallorequireparagraphs'),
HalloHeadingPlugin(element='p')
]

Expand Down
29 changes: 20 additions & 9 deletions wagtail/admin/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import json
from functools import total_ordering

from django import forms
from django.conf import settings
from django.forms import widgets
from django.forms.utils import flatatt
Expand Down Expand Up @@ -59,8 +60,11 @@ def get_context(self, name, value, attrs):

return context

class Media:
js = [versioned_static('wagtailadmin/js/date-time-chooser.js')]
@property
def media(self):
return forms.Media(js=[
versioned_static('wagtailadmin/js/date-time-chooser.js'),
])


class AdminTimeInput(widgets.TimeInput):
Expand All @@ -72,8 +76,11 @@ def __init__(self, attrs=None, format='%H:%M'):
default_attrs.update(attrs)
super().__init__(attrs=default_attrs, format=format)

class Media:
js = [versioned_static('wagtailadmin/js/date-time-chooser.js')]
@property
def media(self):
return forms.Media(js=[
versioned_static('wagtailadmin/js/date-time-chooser.js'),
])


class AdminDateTimeInput(widgets.DateTimeInput):
Expand All @@ -100,8 +107,11 @@ def get_context(self, name, value, attrs):

return context

class Media:
js = [versioned_static('wagtailadmin/js/date-time-chooser.js')]
@property
def media(self):
return forms.Media(js=[
versioned_static('wagtailadmin/js/date-time-chooser.js'),
])


class AdminTagWidget(TagWidget):
Expand Down Expand Up @@ -238,11 +248,12 @@ def render_js_init(self, id_, name, value):
user_perms=json.dumps(self.user_perms),
)

class Media:
js = [
@property
def media(self):
return forms.Media(js=[
versioned_static('wagtailadmin/js/page-chooser-modal.js'),
versioned_static('wagtailadmin/js/page-chooser.js'),
]
])


@total_ordering
Expand Down
7 changes: 4 additions & 3 deletions wagtail/contrib/settings/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@
class SiteSwitchForm(forms.Form):
site = forms.ChoiceField(choices=[])

class Media:
js = [
@property
def media(self):
return forms.Media(js=[
versioned_static('wagtailsettings/js/site-switcher.js'),
]
])

def __init__(self, current_site, model, **kwargs):
initial_data = {'site': self.get_change_url(current_site, model)}
Expand Down
8 changes: 5 additions & 3 deletions wagtail/documents/widgets.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import json

from django import forms
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _

Expand Down Expand Up @@ -32,8 +33,9 @@ def render_html(self, name, value, attrs):
def render_js_init(self, id_, name, value):
return "createDocumentChooser({0});".format(json.dumps(id_))

class Media:
js = [
@property
def media(self):
return forms.Media(js=[
versioned_static('wagtaildocs/js/document-chooser-modal.js'),
versioned_static('wagtaildocs/js/document-chooser.js'),
]
])
8 changes: 5 additions & 3 deletions wagtail/images/widgets.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import json

from django import forms
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _

Expand Down Expand Up @@ -32,8 +33,9 @@ def render_html(self, name, value, attrs):
def render_js_init(self, id_, name, value):
return "createImageChooser({0});".format(json.dumps(id_))

class Media:
js = [
@property
def media(self):
return forms.Media(js=[
versioned_static('wagtailimages/js/image-chooser-modal.js'),
versioned_static('wagtailimages/js/image-chooser.js'),
]
])
8 changes: 5 additions & 3 deletions wagtail/snippets/widgets.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import json

from django import forms
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _

Expand Down Expand Up @@ -41,8 +42,9 @@ def render_js_init(self, id_, name, value):
app=model._meta.app_label,
model=model._meta.model_name)))

class Media:
js = [
@property
def media(self):
return forms.Media(js=[
versioned_static('wagtailsnippets/js/snippet-chooser-modal.js'),
versioned_static('wagtailsnippets/js/snippet-chooser.js'),
]
])

0 comments on commit 08a04b8

Please sign in to comment.