Use Python 3 super() syntax

This commit is contained in:
Mads Jensen 2017-11-27 14:50:08 +01:00 committed by Matt Westcott
parent 48adc08d8f
commit db6d36845f
77 changed files with 254 additions and 255 deletions

View file

@ -91,11 +91,11 @@ class PagesAdminAPIEndpoint(PagesAPIEndpoint):
return types
def listing_view(self, request):
response = super(PagesAdminAPIEndpoint, self).listing_view(request)
response = super().listing_view(request)
response.data['__types'] = self.get_type_info()
return response
def detail_view(self, request, pk):
response = super(PagesAdminAPIEndpoint, self).detail_view(request, pk)
response = super().detail_view(request, pk)
response.data['__types'] = self.get_type_info()
return response

View file

@ -132,7 +132,7 @@ class EditHandler:
def classes(self):
"""
Additional CSS classnames to add to whatever kind of object this is at output.
Subclasses of EditHandler should override this, invoking super(B, self).classes() to
Subclasses of EditHandler should override this, invoking super().classes() to
append more classes specific to the situation.
"""
@ -251,7 +251,7 @@ class BaseCompositeEditHandler(EditHandler):
return mark_safe(''.join([c.html_declarations() for c in cls.children]))
def __init__(self, instance=None, form=None):
super(BaseCompositeEditHandler, self).__init__(instance=instance, form=form)
super().__init__(instance=instance, form=form)
self.children = []
for child in self.__class__.children:
@ -383,7 +383,7 @@ class BaseMultiFieldPanel(BaseCompositeEditHandler):
template = "wagtailadmin/edit_handlers/multi_field_panel.html"
def classes(self):
classes = super(BaseMultiFieldPanel, self).classes()
classes = super().classes()
classes.append("multi-field")
return classes
@ -417,14 +417,14 @@ class BaseFieldPanel(EditHandler):
return {}
def __init__(self, instance=None, form=None):
super(BaseFieldPanel, self).__init__(instance=instance, form=form)
super().__init__(instance=instance, form=form)
self.bound_field = self.form[self.field_name]
self.heading = self.bound_field.label
self.help_text = self.bound_field.help_text
def classes(self):
classes = super(BaseFieldPanel, self).classes()
classes = super().classes()
if self.bound_field.field.required:
classes.append("required")
@ -684,7 +684,7 @@ class BaseInlinePanel(EditHandler):
return [curry(compare.ChildRelationComparison, field, field_comparisons)]
def __init__(self, instance=None, form=None):
super(BaseInlinePanel, self).__init__(instance=instance, form=form)
super().__init__(instance=instance, form=form)
self.formset = form.formsets[self.__class__.relation_name]
@ -822,7 +822,7 @@ Page.get_edit_handler = get_edit_handler
class BaseStreamFieldPanel(BaseFieldPanel):
def classes(self):
classes = super(BaseStreamFieldPanel, self).classes()
classes = super().classes()
classes.append("stream-field")
# In case of a validation error, BlockWidget will take care of outputting the error on the

View file

@ -30,7 +30,7 @@ class URLOrAbsolutePathValidator(validators.URLValidator):
if URLOrAbsolutePathValidator.is_absolute_path(value):
return None
else:
return super(URLOrAbsolutePathValidator, self).__call__(value)
return super().__call__(value)
class URLOrAbsolutePathField(forms.URLField):
@ -39,14 +39,14 @@ class URLOrAbsolutePathField(forms.URLField):
def to_python(self, value):
if not URLOrAbsolutePathValidator.is_absolute_path(value):
value = super(URLOrAbsolutePathField, self).to_python(value)
value = super().to_python(value)
return value
class SearchForm(forms.Form):
def __init__(self, *args, **kwargs):
placeholder = kwargs.pop('placeholder', _("Search"))
super(SearchForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields['q'].widget.attrs = {'placeholder': placeholder}
q = forms.CharField(label=ugettext_lazy("Search term"), widget=forms.TextInput())
@ -74,7 +74,7 @@ class LoginForm(AuthenticationForm):
)
def __init__(self, request=None, *args, **kwargs):
super(LoginForm, self).__init__(request=request, *args, **kwargs)
super().__init__(request=request, *args, **kwargs)
self.fields['username'].widget.attrs['placeholder'] = ugettext_lazy("Enter your %s") \
% self.username_field.verbose_name
@ -83,7 +83,7 @@ class PasswordResetForm(PasswordResetForm):
email = forms.EmailField(label=ugettext_lazy("Enter your email address to reset your password"), max_length=254)
def clean(self):
cleaned_data = super(PasswordResetForm, self).clean()
cleaned_data = super().clean()
# Find users of this email address
UserModel = get_user_model()
@ -118,7 +118,7 @@ class CopyForm(forms.Form):
self.page = kwargs.pop('page')
self.user = kwargs.pop('user', None)
can_publish = kwargs.pop('can_publish')
super(CopyForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields['new_title'] = forms.CharField(initial=self.page.title, label=_("New title"))
self.fields['new_slug'] = forms.SlugField(initial=self.page.slug, label=_("New slug"))
self.fields['new_parent_page'] = forms.ModelChoiceField(
@ -157,7 +157,7 @@ class CopyForm(forms.Form):
)
def clean(self):
cleaned_data = super(CopyForm, self).clean()
cleaned_data = super().clean()
# Make sure the slug isn't already in use
slug = cleaned_data.get('new_slug')
@ -194,7 +194,7 @@ class BaseViewRestrictionForm(forms.ModelForm):
widget=forms.RadioSelect)
def __init__(self, *args, **kwargs):
super(BaseViewRestrictionForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields['groups'].widget = forms.CheckboxSelectMultiple()
self.fields['groups'].queryset = Group.objects.all()
@ -294,7 +294,7 @@ class WagtailAdminModelForm(ClusterForm, metaclass=WagtailAdminModelFormMetaclas
@property
def media(self):
# Include media from formsets forms. This allow StreamField in InlinePanel for example.
media = super(WagtailAdminModelForm, self).media
media = super().media
for formset in self.formsets.values():
media += formset.media
return media
@ -312,12 +312,12 @@ class WagtailAdminPageForm(WagtailAdminModelForm):
exclude = ['content_type', 'path', 'depth', 'numchild']
def __init__(self, data=None, files=None, parent_page=None, *args, **kwargs):
super(WagtailAdminPageForm, self).__init__(data, files, *args, **kwargs)
super().__init__(data, files, *args, **kwargs)
self.parent_page = parent_page
def clean(self):
cleaned_data = super(WagtailAdminPageForm, self).clean()
cleaned_data = super().clean()
if 'slug' in self.cleaned_data:
if not Page._slug_is_available(
cleaned_data['slug'], self.parent_page, self.instance
@ -365,7 +365,7 @@ class BaseCollectionMemberForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
user = kwargs.pop('user', None)
super(BaseCollectionMemberForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if user is None:
self.collections = Collection.objects.all()
@ -396,7 +396,7 @@ class BaseCollectionMemberForm(forms.ModelForm):
# populate the instance's collection field with the one available collection
self.instance.collection = self.collections[0]
return super(BaseCollectionMemberForm, self).save(commit=commit)
return super().save(commit=commit)
class BaseGroupCollectionMemberPermissionFormSet(forms.BaseFormSet):
@ -431,7 +431,7 @@ class BaseGroupCollectionMemberPermissionFormSet(forms.BaseFormSet):
'permissions': [cp.permission for cp in collection_permissions]
})
super(BaseGroupCollectionMemberPermissionFormSet, self).__init__(
super().__init__(
data, files, initial=initial_data, prefix=prefix
)
for form in self.forms:
@ -439,7 +439,7 @@ class BaseGroupCollectionMemberPermissionFormSet(forms.BaseFormSet):
@property
def empty_form(self):
empty_form = super(BaseGroupCollectionMemberPermissionFormSet, self).empty_form
empty_form = super().empty_form
empty_form.fields['DELETE'].widget = forms.HiddenInput()
return empty_form

View file

@ -6,7 +6,7 @@ from .templatetags.wagtailuserbar import wagtailuserbar
class WagtailUserbarExtension(Extension):
def __init__(self, environment):
super(WagtailUserbarExtension, self).__init__(environment)
super().__init__(environment)
self.environment.globals.update({
'wagtailuserbar': jinja2.contextfunction(wagtailuserbar),

View file

@ -103,7 +103,7 @@ class SubmenuMenuItem(MenuItem):
"""A MenuItem which wraps an inner Menu object"""
def __init__(self, label, menu, **kwargs):
self.menu = menu
super(SubmenuMenuItem, self).__init__(label, '#', **kwargs)
super().__init__(label, '#', **kwargs)
@property
def media(self):
@ -117,7 +117,7 @@ class SubmenuMenuItem(MenuItem):
return bool(self.menu.active_menu_items(request))
def get_context(self, request):
context = super(SubmenuMenuItem, self).get_context(request)
context = super().get_context(request)
context['menu_html'] = self.menu.render_html(request)
context['request'] = request
return context

View file

@ -32,7 +32,7 @@ class HalloFormatPlugin(HalloPlugin):
kwargs.setdefault('name', 'halloformat')
kwargs.setdefault('order', 10)
self.format_name = kwargs['format_name']
super(HalloFormatPlugin, self).__init__(**kwargs)
super().__init__(**kwargs)
def construct_plugins_list(self, plugins):
plugins.setdefault(self.name, {'formattings': {
@ -46,7 +46,7 @@ class HalloHeadingPlugin(HalloPlugin):
kwargs.setdefault('name', 'halloheadings')
kwargs.setdefault('order', 20)
self.element = kwargs.pop('element')
super(HalloHeadingPlugin, self).__init__(**kwargs)
super().__init__(**kwargs)
def construct_plugins_list(self, plugins):
plugins.setdefault(self.name, {'formatBlocks': []})
@ -58,7 +58,7 @@ class HalloListPlugin(HalloPlugin):
kwargs.setdefault('name', 'hallolists')
kwargs.setdefault('order', 40)
self.list_type = kwargs['list_type']
super(HalloListPlugin, self).__init__(**kwargs)
super().__init__(**kwargs)
def construct_plugins_list(self, plugins):
plugins.setdefault(self.name, {'lists': {
@ -99,14 +99,14 @@ class HalloRichTextArea(WidgetWithScript, widgets.Textarea):
]))
self.plugins.sort(key=lambda plugin: plugin.order)
super(HalloRichTextArea, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def render(self, name, value, attrs=None):
if value is None:
translated_value = None
else:
translated_value = expand_db_html(value, for_editor=True)
return super(HalloRichTextArea, self).render(name, translated_value, attrs)
return super().render(name, translated_value, attrs)
def render_js_init(self, id_, name, value):
if self.options is not None and 'plugins' in self.options:
@ -122,7 +122,7 @@ class HalloRichTextArea(WidgetWithScript, widgets.Textarea):
)
def value_from_datadict(self, data, files, name):
original_value = super(HalloRichTextArea, self).value_from_datadict(data, files, name)
original_value = super().value_from_datadict(data, files, name)
if original_value is None:
return None
return DbWhitelister.clean(original_value)

View file

@ -203,7 +203,7 @@ class EscapeScriptNode(template.Node):
TAG_NAME = 'escapescript'
def __init__(self, nodelist):
super(EscapeScriptNode, self).__init__()
super().__init__()
self.nodelist = nodelist
def render(self, context):

View file

@ -666,7 +666,7 @@ class TestAdminPageDetailWithStreamField(AdminAPITestCase):
fixtures = ['test.json']
def setUp(self):
super(TestAdminPageDetailWithStreamField, self).setUp()
super().setUp()
self.homepage = Page.objects.get(url_path='/home/')
@ -713,7 +713,7 @@ class TestCustomAdminDisplayTitle(AdminAPITestCase):
fixtures = ['test.json']
def setUp(self):
super(TestCustomAdminDisplayTitle, self).setUp()
super().setUp()
self.event_page = Page.objects.get(url_path='/home/events/saint-patrick/')

View file

@ -31,7 +31,7 @@ class BaseSearchAreaTestCase(WagtailTestUtils, TestCase):
class TestSearchAreas(BaseSearchAreaTestCase):
def setUp(self):
super(TestSearchAreas, self).setUp()
super().setUp()
self.user = self.login()
def test_other_searches(self):
@ -78,7 +78,7 @@ class TestSearchAreaNoPagePermissions(BaseSearchAreaTestCase):
self.assertFalse(user_has_any_page_permission(self.user))
def create_test_user(self):
user = super(TestSearchAreaNoPagePermissions, self).create_test_user()
user = super().create_test_user()
user.is_superuser = False
user.user_permissions.add(
Permission.objects.get(content_type__app_label='wagtailadmin', codename='access_admin')

View file

@ -31,12 +31,12 @@ class BaseRichTextEditHandlerTestCase(TestCase):
page_class.get_edit_handler.cache_clear()
def setUp(self):
super(BaseRichTextEditHandlerTestCase, self).setUp()
super().setUp()
self._clear_edit_handler_cache()
def tearDown(self):
self._clear_edit_handler_cache()
super(BaseRichTextEditHandlerTestCase, self).tearDown()
super().tearDown()
class TestGetRichTextEditorWidget(TestCase):
@ -81,7 +81,7 @@ class TestGetRichTextEditorWidget(TestCase):
class TestDefaultRichText(BaseRichTextEditHandlerTestCase, WagtailTestUtils):
def setUp(self):
super(TestDefaultRichText, self).setUp()
super().setUp()
# Find root page
self.root_page = Page.objects.get(id=2)
@ -130,7 +130,7 @@ class TestDefaultRichText(BaseRichTextEditHandlerTestCase, WagtailTestUtils):
class TestOverriddenDefaultRichText(BaseRichTextEditHandlerTestCase, WagtailTestUtils):
def setUp(self):
super(TestOverriddenDefaultRichText, self).setUp()
super().setUp()
# Find root page
self.root_page = Page.objects.get(id=2)
@ -173,7 +173,7 @@ class TestOverriddenDefaultRichText(BaseRichTextEditHandlerTestCase, WagtailTest
class TestCustomDefaultRichText(BaseRichTextEditHandlerTestCase, WagtailTestUtils):
def setUp(self):
super(TestCustomDefaultRichText, self).setUp()
super().setUp()
# Find root page
self.root_page = Page.objects.get(id=2)
@ -246,7 +246,7 @@ class TestRichTextValue(TestCase):
class TestHalloJsWithCustomPluginOptions(BaseRichTextEditHandlerTestCase, WagtailTestUtils):
def setUp(self):
super(TestHalloJsWithCustomPluginOptions, self).setUp()
super().setUp()
# Find root page
self.root_page = Page.objects.get(id=2)
@ -276,7 +276,7 @@ class TestHalloJsWithCustomPluginOptions(BaseRichTextEditHandlerTestCase, Wagtai
class TestHalloJsWithFeaturesKwarg(BaseRichTextEditHandlerTestCase, WagtailTestUtils):
def setUp(self):
super(TestHalloJsWithFeaturesKwarg, self).setUp()
super().setUp()
# Find root page
self.root_page = Page.objects.get(id=2)
@ -340,7 +340,7 @@ class TestHalloJsWithFeaturesKwarg(BaseRichTextEditHandlerTestCase, WagtailTestU
class TestHalloJsWithCustomFeatureOptions(BaseRichTextEditHandlerTestCase, WagtailTestUtils):
def setUp(self):
super(TestHalloJsWithCustomFeatureOptions, self).setUp()
super().setUp()
# Find root page
self.root_page = Page.objects.get(id=2)

View file

@ -17,7 +17,7 @@ class AdminItem(BaseItem):
if not request.user.has_perm('wagtailadmin.access_admin'):
return ""
return super(AdminItem, self).render(request)
return super().render(request)
class AddPageItem(BaseItem):
@ -41,7 +41,7 @@ class AddPageItem(BaseItem):
if not permission_checker.can_add_subpage():
return ""
return super(AddPageItem, self).render(request)
return super().render(request)
class ExplorePageItem(BaseItem):
@ -65,7 +65,7 @@ class ExplorePageItem(BaseItem):
if not permission_checker.can_edit() and not permission_checker.can_publish_subpage():
return ""
return super(ExplorePageItem, self).render(request)
return super().render(request)
class EditPageItem(BaseItem):
@ -88,7 +88,7 @@ class EditPageItem(BaseItem):
if not permission_checker.can_edit():
return ""
return super(EditPageItem, self).render(request)
return super().render(request)
class ModeratePageItem(BaseItem):
@ -108,7 +108,7 @@ class ModeratePageItem(BaseItem):
if not self.revision.page.permissions_for_user(request.user).can_publish():
return ""
return super(ModeratePageItem, self).render(request)
return super().render(request)
class ApproveModerationEditPageItem(ModeratePageItem):

View file

@ -90,7 +90,7 @@ class Delete(DeleteView):
return list(filter(is_nonempty, collection_contents))
def get_context_data(self, **kwargs):
context = super(Delete, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
collection_contents = self.get_collection_contents()
if collection_contents:

View file

@ -41,7 +41,7 @@ class PermissionCheckedMixin:
):
return permission_denied(request)
return super(PermissionCheckedMixin, self).dispatch(request, *args, **kwargs)
return super().dispatch(request, *args, **kwargs)
class IndexView(PermissionCheckedMixin, TemplateResponseMixin, BaseListView):
@ -55,7 +55,7 @@ class IndexView(PermissionCheckedMixin, TemplateResponseMixin, BaseListView):
template_name = None
def get_context_data(self, **kwargs):
context = super(IndexView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['can_add'] = (
self.permission_policy is None or
self.permission_policy.user_has_permission(self.request.user, 'add')
@ -113,7 +113,7 @@ class CreateView(PermissionCheckedMixin, TemplateResponseMixin, BaseCreateView):
error_message = self.get_error_message()
if error_message is not None:
messages.error(self.request, error_message)
return super(CreateView, self).form_invalid(form)
return super().form_invalid(form)
class EditView(PermissionCheckedMixin, TemplateResponseMixin, BaseUpdateView):
@ -134,7 +134,7 @@ class EditView(PermissionCheckedMixin, TemplateResponseMixin, BaseUpdateView):
def get_object(self, queryset=None):
if 'pk' not in self.kwargs:
self.kwargs['pk'] = self.args[0]
return super(EditView, self).get_object(queryset)
return super().get_object(queryset)
def get_page_subtitle(self):
return str(self.object)
@ -180,10 +180,10 @@ class EditView(PermissionCheckedMixin, TemplateResponseMixin, BaseUpdateView):
error_message = self.get_error_message()
if error_message is not None:
messages.error(self.request, error_message)
return super(EditView, self).form_invalid(form)
return super().form_invalid(form)
def get_context_data(self, **kwargs):
context = super(EditView, self).get_context_data(**kwargs)
context = super().get_context_data(**kwargs)
context['can_delete'] = (
self.permission_policy is None or
self.permission_policy.user_has_permission(self.request.user, 'delete')
@ -204,7 +204,7 @@ class DeleteView(PermissionCheckedMixin, TemplateResponseMixin, BaseDeleteView):
def get_object(self, queryset=None):
if 'pk' not in self.kwargs:
self.kwargs['pk'] = self.args[0]
return super(DeleteView, self).get_object(queryset)
return super().get_object(queryset)
def get_success_url(self):
return reverse(self.index_url_name)
@ -221,6 +221,6 @@ class DeleteView(PermissionCheckedMixin, TemplateResponseMixin, BaseDeleteView):
return self.success_message.format(self.object)
def delete(self, request, *args, **kwargs):
response = super(DeleteView, self).delete(request, *args, **kwargs)
response = super().delete(request, *args, **kwargs)
messages.success(request, self.get_success_message())
return response

View file

@ -13,7 +13,7 @@ class SearchableListMixin:
return SearchForm(self.request.GET if self.request.GET.get('q') else None, placeholder=self.search_box_placeholder)
def get_queryset(self):
queryset = super(SearchableListMixin, self).get_queryset()
queryset = super().get_queryset()
search_form = self.get_search_form()
if search_form.is_valid():
@ -37,4 +37,4 @@ class SearchableListMixin:
kwargs['search_form'] = self.get_search_form()
kwargs['is_searching'] = bool(self.request.GET.get('q'))
return super(SearchableListMixin, self).get_context_data(**kwargs)
return super().get_context_data(**kwargs)

View file

@ -628,7 +628,7 @@ class PreviewOnCreate(PreviewOnEdit):
return page
def get_form(self, page, query_dict):
form = super(PreviewOnCreate, self).get_form(page, query_dict)
form = super().get_form(page, query_dict)
if form.is_valid():
# Ensures our unsaved page has a suitable url.
form.instance.set_url_path(form.parent_page)

View file

@ -86,7 +86,7 @@ class ModelViewSet(ViewSet):
)
def get_urlpatterns(self):
return super(ModelViewSet, self).get_urlpatterns() + [
return super().get_urlpatterns() + [
url(r'^$', self.index_view, name='index'),
url(r'^new/$', self.add_view, name='add'),
url(r'^(\d+)/$', self.edit_view, name='edit'),

View file

@ -21,7 +21,7 @@ class ExplorerMenuItem(MenuItem):
return user_has_any_page_permission(request.user)
def get_context(self, request):
context = super(ExplorerMenuItem, self).get_context(request)
context = super().get_context(request)
start_page = get_explorable_root_page(request.user)
if start_page:
@ -56,7 +56,7 @@ def register_permissions():
class PageSearchArea(SearchArea):
def __init__(self):
super(PageSearchArea, self).__init__(
super().__init__(
_('Pages'), reverse('wagtailadmin_pages:search'),
name='pages',
classnames='icon icon-folder-open-inverse',

View file

@ -29,7 +29,7 @@ class AdminAutoHeightTextInput(WidgetWithScript, widgets.Textarea):
if attrs:
default_attrs.update(attrs)
super(AdminAutoHeightTextInput, self).__init__(default_attrs)
super().__init__(default_attrs)
def render_js_init(self, id_, name, value):
return 'autosize($("#{0}"));'.format(id_)
@ -41,7 +41,7 @@ class AdminDateInput(WidgetWithScript, widgets.DateInput):
if fmt is None:
fmt = getattr(settings, 'WAGTAIL_DATE_FORMAT', DEFAULT_DATE_FORMAT)
self.js_format = to_datetimepicker_format(fmt)
super(AdminDateInput, self).__init__(attrs=attrs, format=fmt)
super().__init__(attrs=attrs, format=fmt)
def render_js_init(self, id_, name, value):
config = {
@ -56,7 +56,7 @@ class AdminDateInput(WidgetWithScript, widgets.DateInput):
class AdminTimeInput(WidgetWithScript, widgets.TimeInput):
def __init__(self, attrs=None, format='%H:%M'):
super(AdminTimeInput, self).__init__(attrs=attrs, format=format)
super().__init__(attrs=attrs, format=format)
def render_js_init(self, id_, name, value):
return 'initTimeChooser({0});'.format(json.dumps(id_))
@ -68,7 +68,7 @@ class AdminDateTimeInput(WidgetWithScript, widgets.DateTimeInput):
if fmt is None:
fmt = getattr(settings, 'WAGTAIL_DATETIME_FORMAT', DEFAULT_DATETIME_FORMAT)
self.js_format = to_datetimepicker_format(fmt)
super(AdminDateTimeInput, self).__init__(attrs=attrs, format=fmt)
super().__init__(attrs=attrs, format=fmt)
def render_js_init(self, id_, name, value):
config = {
@ -125,7 +125,7 @@ class AdminChooser(WidgetWithScript, widgets.Input):
def value_from_datadict(self, data, files, name):
# treat the empty string as None
result = super(AdminChooser, self).value_from_datadict(data, files, name)
result = super().value_from_datadict(data, files, name)
if result == '':
return None
else:
@ -143,7 +143,7 @@ class AdminChooser(WidgetWithScript, widgets.Input):
self.link_to_chosen_text = kwargs.pop('link_to_chosen_text')
if 'show_edit_link' in kwargs:
self.show_edit_link = kwargs.pop('show_edit_link')
super(AdminChooser, self).__init__(**kwargs)
super().__init__(**kwargs)
class AdminPageChooser(AdminChooser):
@ -152,7 +152,7 @@ class AdminPageChooser(AdminChooser):
link_to_chosen_text = _('Edit this page')
def __init__(self, target_models=None, can_choose_root=False, user_perms=None, **kwargs):
super(AdminPageChooser, self).__init__(**kwargs)
super().__init__(**kwargs)
if target_models:
models = ', '.join([model._meta.verbose_name.title() for model in target_models if model is not Page])
@ -179,7 +179,7 @@ class AdminPageChooser(AdminChooser):
instance, value = self.get_instance_and_id(model_class, value)
original_field_html = super(AdminPageChooser, self).render_html(name, value, attrs)
original_field_html = super().render_html(name, value, attrs)
return render_to_string("wagtailadmin/widgets/page_chooser.html", {
'widget': self,
@ -253,12 +253,12 @@ class Button:
class PageListingButton(Button):
def __init__(self, label, url, classes=set(), **kwargs):
classes = {'button', 'button-small', 'button-secondary'} | set(classes)
super(PageListingButton, self).__init__(label, url, classes=classes, **kwargs)
super().__init__(label, url, classes=classes, **kwargs)
class BaseDropdownMenuButton(Button):
def __init__(self, *args, **kwargs):
super(BaseDropdownMenuButton, self).__init__(*args, url=None, **kwargs)
super().__init__(*args, url=None, **kwargs)
@cached_property
def dropdown_buttons(self):
@ -281,7 +281,7 @@ class ButtonWithDropdownFromHook(BaseDropdownMenuButton):
self.page_perms = page_perms
self.is_parent = is_parent
super(ButtonWithDropdownFromHook, self).__init__(label, **kwargs)
super().__init__(label, **kwargs)
@property
def show(self):

View file

@ -52,7 +52,7 @@ class BaseAPIEndpoint(GenericViewSet):
name = None # Set on subclass.
def __init__(self, *args, **kwargs):
super(BaseAPIEndpoint, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
# seen_types is a mapping of type name strings (format: "app_label.ModelName")
# to model classes. When an object is serialised in the API, its model
@ -83,7 +83,7 @@ class BaseAPIEndpoint(GenericViewSet):
elif isinstance(exc, BadRequestError):
data = {'message': str(exc)}
return Response(data, status=status.HTTP_400_BAD_REQUEST)
return super(BaseAPIEndpoint, self).handle_exception(exc)
return super().handle_exception(exc)
@classmethod
def _convert_api_fields(cls, fields):
@ -298,7 +298,7 @@ class BaseAPIEndpoint(GenericViewSet):
}
def get_renderer_context(self):
context = super(BaseAPIEndpoint, self).get_renderer_context()
context = super().get_renderer_context()
context['indent'] = 4
return context
@ -403,5 +403,5 @@ class PagesAPIEndpoint(BaseAPIEndpoint):
return queryset
def get_object(self):
base = super(PagesAPIEndpoint, self).get_object()
base = super().get_object()
return base.specific

View file

@ -107,7 +107,7 @@ class RelatedField(relations.RelatedField):
"""
def __init__(self, *args, **kwargs):
self.serializer_class = kwargs.pop('serializer_class')
super(RelatedField, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def to_representation(self, value):
serializer = self.serializer_class(context=self.context)
@ -176,7 +176,7 @@ class ChildRelationField(Field):
"""
def __init__(self, *args, **kwargs):
self.serializer_class = kwargs.pop('serializer_class')
super(ChildRelationField, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def to_representation(self, value):
serializer = self.serializer_class(context=self.context)
@ -306,10 +306,10 @@ class BaseSerializer(serializers.ModelSerializer):
if isinstance(field, _TaggableManager):
return TagsField, {}
return super(BaseSerializer, self).build_property_field(field_name, model_class)
return super().build_property_field(field_name, model_class)
def build_relational_field(self, field_name, relation_info):
field_class, field_kwargs = super(BaseSerializer, self).build_relational_field(field_name, relation_info)
field_class, field_kwargs = super().build_relational_field(field_name, relation_info)
field_kwargs['serializer_class'] = self.child_serializer_classes[field_name]
return field_class, field_kwargs
@ -332,7 +332,7 @@ class PageSerializer(BaseSerializer):
if field_name in child_relations and field_name in self.child_serializer_classes:
return ChildRelationField, {'serializer_class': self.child_serializer_classes[field_name]}
return super(PageSerializer, self).build_relational_field(field_name, relation_info)
return super().build_relational_field(field_name, relation_info)
def get_serializer_class(model, field_names, meta_fields, field_serializer_overrides=None, child_serializer_classes=None, base=BaseSerializer):

View file

@ -13,7 +13,7 @@ class BaseForm(django.forms.Form):
self.user = kwargs.pop('user', None)
self.page = kwargs.pop('page', None)
super(BaseForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
class FormBuilder:
@ -134,7 +134,7 @@ class WagtailAdminFormPageForm(WagtailAdminPageForm):
def clean(self):
super(WagtailAdminFormPageForm, self).clean()
super().clean()
# Check for dupe form field labels - fixes #585
if 'form_fields' in self.formsets:

View file

@ -158,7 +158,7 @@ class AbstractForm(Page):
base_form_class = WagtailAdminFormPageForm
def __init__(self, *args, **kwargs):
super(AbstractForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if not hasattr(self, 'landing_page_template'):
name, ext = os.path.splitext(self.template)
self.landing_page_template = name + '_landing' + ext
@ -298,7 +298,7 @@ class AbstractForm(Page):
self.get_context(request)
)
else:
return super(AbstractForm, self).serve_preview(request, mode)
return super().serve_preview(request, mode)
class AbstractEmailForm(AbstractForm):
@ -314,7 +314,7 @@ class AbstractEmailForm(AbstractForm):
subject = models.CharField(verbose_name=_('subject'), max_length=255, blank=True)
def process_form_submission(self, form):
submission = super(AbstractEmailForm, self).process_form_submission(form)
submission = super().process_form_submission(form)
if self.to_address:
self.send_mail(form)
return submission

View file

@ -24,5 +24,5 @@ class ParentChooserForm(forms.Form):
def __init__(self, valid_parents_qs, *args, **kwargs):
self.valid_parents_qs = valid_parents_qs
super(ParentChooserForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields['parent_page'].queryset = self.valid_parents_qs

View file

@ -50,5 +50,4 @@ class PageAdminURLHelper(AdminURLHelper):
url_name = 'wagtailadmin_pages:%s' % action
target_url = reverse(url_name, args=args, kwargs=kwargs)
return '%s?next=%s' % (target_url, urlquote(self.index_url))
return super(PageAdminURLHelper, self).get_action_url(action, *args,
**kwargs)
return super().get_action_url(action, *args, **kwargs)

View file

@ -10,7 +10,7 @@ class ModelAdminMenuItem(MenuItem):
self.model_admin = model_admin
url = model_admin.url_helper.index_url
classnames = 'icon icon-%s' % model_admin.get_menu_icon()
super(ModelAdminMenuItem, self).__init__(
super().__init__(
label=model_admin.get_menu_label(), url=url,
classnames=classnames, order=order)
@ -26,7 +26,7 @@ class GroupMenuItem(SubmenuMenuItem):
"""
def __init__(self, modeladmingroup, order, menu):
classnames = 'icon icon-%s' % modeladmingroup.get_menu_icon()
super(GroupMenuItem, self).__init__(
super().__init__(
label=modeladmingroup.get_menu_label(), menu=menu,
classnames=classnames, order=order, )

View file

@ -24,7 +24,7 @@ class ThumbnailMixin:
u"The `wagtail.images` app must be installed in order "
"to use the `ThumbnailMixin` class."
)
super(ThumbnailMixin, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def admin_thumb(self, obj):
try:

View file

@ -68,7 +68,7 @@ class WMABaseView(TemplateView):
raise PermissionDenied
button_helper_class = self.model_admin.get_button_helper_class()
self.button_helper = button_helper_class(self, request)
return super(WMABaseView, self).dispatch(request, *args, **kwargs)
return super().dispatch(request, *args, **kwargs)
@cached_property
def menu_icon(self):
@ -101,7 +101,7 @@ class WMABaseView(TemplateView):
'model_admin': self.model_admin,
}
context.update(kwargs)
return super(WMABaseView, self).get_context_data(**context)
return super().get_context_data(**context)
class ModelFormView(WMABaseView, FormView):
@ -125,7 +125,7 @@ class ModelFormView(WMABaseView, FormView):
return getattr(self, 'instance', None) or self.model()
def get_form_kwargs(self):
kwargs = super(ModelFormView, self).get_form_kwargs()
kwargs = super().get_form_kwargs()
kwargs.update({'instance': self.get_instance()})
return kwargs
@ -146,7 +146,7 @@ class ModelFormView(WMABaseView, FormView):
'form': form,
}
context.update(kwargs)
return super(ModelFormView, self).get_context_data(**context)
return super().get_context_data(**context)
def get_success_message(self, instance):
return _("{model_name} '{instance}' created.").format(
@ -182,7 +182,7 @@ class InstanceSpecificView(WMABaseView):
instance = None
def __init__(self, model_admin, instance_pk):
super(InstanceSpecificView, self).__init__(model_admin)
super().__init__(model_admin)
self.instance_pk = unquote(instance_pk)
self.pk_quoted = quote(self.instance_pk)
filter_kwargs = {}
@ -205,7 +205,7 @@ class InstanceSpecificView(WMABaseView):
def get_context_data(self, **kwargs):
context = {'instance': self.instance}
context.update(kwargs)
return super(InstanceSpecificView, self).get_context_data(**context)
return super().get_context_data(**context)
class IndexView(WMABaseView):
@ -244,7 +244,7 @@ class IndexView(WMABaseView):
self.query = request.GET.get(self.SEARCH_VAR, '')
self.queryset = self.get_queryset(request)
return super(IndexView, self).dispatch(request, *args, **kwargs)
return super().dispatch(request, *args, **kwargs)
@property
def media(self):
@ -646,7 +646,7 @@ class IndexView(WMABaseView):
})
context.update(kwargs)
return super(IndexView, self).get_context_data(**context)
return super().get_context_data(**context)
def get_template_names(self):
return self.model_admin.get_index_template()
@ -675,7 +675,7 @@ class CreateView(ModelFormView):
# The page can be added in multiple places, so redirect to the
# choose_parent view so that the parent can be specified
return redirect(self.url_helper.get_action_url('choose_parent'))
return super(CreateView, self).dispatch(request, *args, **kwargs)
return super().dispatch(request, *args, **kwargs)
def get_meta_title(self):
return _('Create new %s') % self.verbose_name
@ -699,7 +699,7 @@ class EditView(ModelFormView, InstanceSpecificView):
return redirect(
self.url_helper.get_action_url('edit', self.pk_quoted)
)
return super(EditView, self).dispatch(request, *args, **kwargs)
return super().dispatch(request, *args, **kwargs)
def get_meta_title(self):
return _('Editing %s') % self.verbose_name
@ -714,7 +714,7 @@ class EditView(ModelFormView, InstanceSpecificView):
self.request.user, self.instance)
}
context.update(kwargs)
return super(EditView, self).get_context_data(**context)
return super().get_context_data(**context)
def get_error_message(self):
name = self.verbose_name
@ -728,7 +728,7 @@ class ChooseParentView(WMABaseView):
def dispatch(self, request, *args, **kwargs):
if not self.permission_helper.user_can_create(request.user):
raise PermissionDenied
return super(ChooseParentView, self).dispatch(request, *args, **kwargs)
return super().dispatch(request, *args, **kwargs)
def get_page_title(self):
return _('Add %s') % self.verbose_name
@ -775,7 +775,7 @@ class DeleteView(InstanceSpecificView):
return redirect(
self.url_helper.get_action_url('delete', self.pk_quoted)
)
return super(DeleteView, self).dispatch(request, *args, **kwargs)
return super().dispatch(request, *args, **kwargs)
def get_meta_title(self):
return _('Confirm deletion of %s') % self.verbose_name
@ -943,7 +943,7 @@ class InspectView(InstanceSpecificView):
self.instance, exclude=['inspect']),
}
context.update(kwargs)
return super(InspectView, self).get_context_data(**context)
return super().get_context_data(**context)
def get_template_names(self):
return self.model_admin.get_inspect_template()

View file

@ -168,7 +168,7 @@ class PostgresSearchQuery(BaseSearchQuery):
DEFAULT_OPERATOR = 'and'
def __init__(self, *args, **kwargs):
super(PostgresSearchQuery, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.search_fields = self.queryset.model.get_search_fields()
def get_search_query(self, config):
@ -247,14 +247,14 @@ class PostgresSearchRebuilder:
class PostgresSearchAtomicRebuilder(PostgresSearchRebuilder):
def __init__(self, index):
super(PostgresSearchAtomicRebuilder, self).__init__(index)
super().__init__(index)
self.transaction = transaction.atomic(using=index.db_alias)
self.transaction_opened = False
def start(self):
self.transaction.__enter__()
self.transaction_opened = True
return super(PostgresSearchAtomicRebuilder, self).start()
return super().start()
def finish(self):
self.transaction.__exit__(None, None, None)
@ -274,7 +274,7 @@ class PostgresSearchBackend(BaseSearchBackend):
atomic_rebuilder_class = PostgresSearchAtomicRebuilder
def __init__(self, params):
super(PostgresSearchBackend, self).__init__(params)
super().__init__(params)
self.params = params
if params.get('ATOMIC_REBUILD', False):
self.rebuilder_class = self.atomic_rebuilder_class

View file

@ -43,9 +43,9 @@ class TestPostgresSearchBackend(BackendTests, TestCase):
# Note: This is applying the filter, but should be raising the FieldError instead
@unittest.expectedFailure
def test_filter_on_non_filterable_field(self):
super(TestPostgresSearchBackend, self).test_filter_on_non_filterable_field()
super().test_filter_on_non_filterable_field()
# Broken
@unittest.expectedFailure
def test_order_by_non_filterable_field(self):
super(TestPostgresSearchBackend, self).test_order_by_non_filterable_field()
super().test_order_by_non_filterable_field()

View file

@ -12,7 +12,7 @@ class RedirectForm(forms.ModelForm):
)
def __init__(self, *args, **kwargs):
super(RedirectForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields['redirect_page'].widget = AdminPageChooser()
required_css_class = "required"
@ -22,7 +22,7 @@ class RedirectForm(forms.ModelForm):
The unique_together condition on the model is ignored if site is None, so need to
check for duplicates manually
"""
cleaned_data = super(RedirectForm, self).clean()
cleaned_data = super().clean()
if cleaned_data.get('site') is None:
old_path = cleaned_data.get('old_path')

View file

@ -108,7 +108,7 @@ class RoutablePageMixin:
except Http404:
pass
return super(RoutablePageMixin, self).route(request, path_components)
return super().route(request, path_components)
def serve(self, request, view=None, args=None, kwargs=None):
if args is None:
@ -116,7 +116,7 @@ class RoutablePageMixin:
if kwargs is None:
kwargs = {}
if view is None:
return super(RoutablePageMixin, self).serve(request, *args, **kwargs)
return super().serve(request, *args, **kwargs)
return view(request, *args, **kwargs)
def serve_preview(self, request, mode_name):

View file

@ -11,7 +11,7 @@ class SearchPromotionForm(forms.ModelForm):
sort_order = forms.IntegerField(required=False)
def __init__(self, *args, **kwargs):
super(SearchPromotionForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields['page'].widget = AdminPageChooser()
class Meta:
@ -33,7 +33,7 @@ class SearchPromotionsFormSet(SearchPromotionsFormSetBase):
minimum_forms_message = _("Please specify at least one recommendation for this search term.")
def add_fields(self, form, *args, **kwargs):
super(SearchPromotionsFormSet, self).add_fields(form, *args, **kwargs)
super().add_fields(form, *args, **kwargs)
# Hide delete and order fields
form.fields['DELETE'].widget = forms.HiddenInput()

View file

@ -27,7 +27,7 @@ class SettingModuleProxy(dict):
def __getitem__(self, model_name):
""" Get a setting instance for a model """
# Model names are treated as case-insensitive
return super(SettingModuleProxy, self).__getitem__(model_name.lower())
return super().__getitem__(model_name.lower())
def __missing__(self, model_name):
""" Get and cache settings that have not been looked up yet """

View file

@ -14,7 +14,7 @@ class SiteSwitchForm(forms.Form):
def __init__(self, current_site, model, **kwargs):
initial_data = {'site': self.get_change_url(current_site, model)}
super(SiteSwitchForm, self).__init__(initial=initial_data, **kwargs)
super().__init__(initial=initial_data, **kwargs)
sites = [(self.get_change_url(site, model), site)
for site in Site.objects.all()]
self.fields['site'].choices = sites

View file

@ -32,12 +32,12 @@ class SiteSettings(dict):
A cache of Settings for a specific Site
"""
def __init__(self, site):
super(SiteSettings, self).__init__()
super().__init__()
self.site = site
def __getitem__(self, key):
# Normalise all keys to lowercase
return super(SiteSettings, self).__getitem__(force_str(key).lower())
return super().__getitem__(force_str(key).lower())
def __missing__(self, key):
"""
@ -77,7 +77,7 @@ def get_setting(context, model_string, use_default_site=False):
class SettingsExtension(Extension):
def __init__(self, environment):
super(SettingsExtension, self).__init__(environment)
super().__init__(environment)
self.environment.globals.update({
'settings': get_setting,
})

View file

@ -19,7 +19,7 @@ class SettingMenuItem(MenuItem):
classnames = icon_classes
self.model = model
super(SettingMenuItem, self).__init__(
super().__init__(
label=capfirst(model._meta.verbose_name),
url=reverse('wagtailsettings:edit', args=[
model._meta.app_label, model._meta.model_name]),

View file

@ -156,7 +156,7 @@ class TestTemplateTag(TemplateTestCase):
class TestSettingsJinja(TemplateTestCase):
def setUp(self):
super(TestSettingsJinja, self).setUp()
super().setUp()
self.engine = engines['jinja2']
def render(self, string, context=None, request_context=True):

View file

@ -16,7 +16,7 @@ from wagtail.snippets.widgets import AdminSnippetChooser
class ExampleForm(forms.Form):
def __init__(self, *args, **kwargs):
super(ExampleForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields['page_chooser'].widget = AdminPageChooser()
self.fields['image_chooser'].widget = AdminImageChooser()
self.fields['document_chooser'].widget = AdminDocumentChooser()

View file

@ -13,10 +13,10 @@ class TableInput(WidgetWithScript, forms.HiddenInput):
def __init__(self, table_options=None, attrs=None):
self.table_options = table_options
super(TableInput, self).__init__(attrs=attrs)
super().__init__(attrs=attrs)
def render(self, name, value, attrs=None):
original_field_html = super(TableInput, self).render(name, value, attrs)
original_field_html = super().render(name, value, attrs)
return render_to_string("table_block/widgets/table.html", {
'original_field_html': original_field_html,
'attrs': attrs,
@ -57,7 +57,7 @@ class TableBlock(FieldBlock):
if table_options is not None:
default_table_options.update(table_options)
self.table_options = default_table_options
super(TableBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
@cached_property
def field(self):

View file

@ -475,7 +475,7 @@ class BlockWidget(forms.Widget):
"""Wraps a block object as a widget so that it can be incorporated into a Django form"""
def __init__(self, block_def, attrs=None):
super(BlockWidget, self).__init__(attrs=attrs)
super().__init__(attrs=attrs)
self.block_def = block_def
def render_with_errors(self, name, value, attrs=None, errors=None):
@ -518,7 +518,7 @@ class BlockField(forms.Field):
if 'widget' not in kwargs:
kwargs['widget'] = BlockWidget(block)
super(BlockField, self).__init__(**kwargs)
super().__init__(**kwargs)
def clean(self, value):
return self.block.clean(value)

View file

@ -105,7 +105,7 @@ class CharBlock(FieldBlock):
max_length=max_length,
min_length=min_length
)
super(CharBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
def get_searchable_content(self, value):
return [force_text(value)]
@ -121,7 +121,7 @@ class TextBlock(FieldBlock):
'min_length': min_length
}
self.rows = rows
super(TextBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
@cached_property
def field(self):
@ -158,7 +158,7 @@ class FloatBlock(FieldBlock):
max_value=max_value,
min_value=min_value,
)
super(FloatBlock, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
class Meta:
icon = "plus-inverse"
@ -176,7 +176,7 @@ class DecimalBlock(FieldBlock):
max_digits=max_digits,
decimal_places=decimal_places,
)
super(DecimalBlock, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
class Meta:
icon = "plus-inverse"
@ -194,7 +194,7 @@ class RegexBlock(FieldBlock):
min_length=min_length,
error_messages=error_messages,
)
super(RegexBlock, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
class Meta:
icon = "code"
@ -209,7 +209,7 @@ class URLBlock(FieldBlock):
max_length=max_length,
min_length=min_length
)
super(URLBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
class Meta:
icon = "site"
@ -223,7 +223,7 @@ class BooleanBlock(FieldBlock):
# conditions" box). To get the conventional yes/no behaviour, you must explicitly pass
# required=False.
self.field = forms.BooleanField(required=required, help_text=help_text)
super(BooleanBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
class Meta:
icon = "tick-inverse"
@ -238,7 +238,7 @@ class DateBlock(FieldBlock):
except KeyError:
pass
self.format = format
super(DateBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
@cached_property
def field(self):
@ -266,7 +266,7 @@ class TimeBlock(FieldBlock):
def __init__(self, required=True, help_text=None, **kwargs):
self.field_options = {'required': required, 'help_text': help_text}
super(TimeBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
@cached_property
def field(self):
@ -290,7 +290,7 @@ class DateTimeBlock(FieldBlock):
def __init__(self, required=True, help_text=None, format=None, **kwargs):
self.field_options = {'required': required, 'help_text': help_text}
self.format = format
super(DateTimeBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
@cached_property
def field(self):
@ -317,7 +317,7 @@ class EmailBlock(FieldBlock):
required=required,
help_text=help_text,
)
super(EmailBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
class Meta:
icon = "mail"
@ -333,7 +333,7 @@ class IntegerBlock(FieldBlock):
min_value=min_value,
max_value=max_value
)
super(IntegerBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
class Meta:
icon = "plus-inverse"
@ -376,7 +376,7 @@ class ChoiceBlock(FieldBlock):
callable_choices = self.get_callable_choices(choices, blank_choice=not(default and required))
self.field = forms.ChoiceField(choices=callable_choices, required=required, help_text=help_text)
super(ChoiceBlock, self).__init__(default=default, **kwargs)
super().__init__(default=default, **kwargs)
def get_callable_choices(self, choices, blank_choice=True):
"""
@ -453,7 +453,7 @@ class RichTextBlock(FieldBlock):
self.field_options = {'required': required, 'help_text': help_text}
self.editor = editor
self.features = features
super(RichTextBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
def get_default(self):
if isinstance(self.meta.default, RichText):
@ -501,7 +501,7 @@ class RawHTMLBlock(FieldBlock):
self.field = forms.CharField(
required=required, help_text=help_text, max_length=max_length, min_length=min_length,
widget=forms.Textarea)
super(RawHTMLBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
def get_default(self):
return mark_safe(self.meta.default or '')
@ -530,7 +530,7 @@ class ChooserBlock(FieldBlock):
def __init__(self, required=True, help_text=None, **kwargs):
self._required = required
self._help_text = help_text
super(ChooserBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
"""Abstract superclass for fields that implement a chooser interface (page, image, snippet etc)"""
@cached_property
@ -584,7 +584,7 @@ class ChooserBlock(FieldBlock):
# around that...
if isinstance(value, self.target_model):
value = value.pk
return super(ChooserBlock, self).clean(value)
return super().clean(value)
class Meta:
# No icon specified here, because that depends on the purpose that the
@ -607,7 +607,7 @@ class PageChooserBlock(ChooserBlock):
self._target_models = target_model
self.can_choose_root = can_choose_root
super(PageChooserBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
@cached_property
def target_model(self):
@ -646,7 +646,7 @@ class PageChooserBlock(ChooserBlock):
return ''
def deconstruct(self):
name, args, kwargs = super(PageChooserBlock, self).deconstruct()
name, args, kwargs = super().deconstruct()
if 'target_model' in kwargs:
target_models = []

View file

@ -17,7 +17,7 @@ __all__ = ['ListBlock']
class ListBlock(Block):
def __init__(self, child_block, **kwargs):
super(ListBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
if isinstance(child_block, type):
# child_block was passed as a class, so convert it to a block instance
@ -167,7 +167,7 @@ class ListBlock(Block):
return content
def check(self, **kwargs):
errors = super(ListBlock, self).check(**kwargs)
errors = super().check(**kwargs)
errors.extend(self.child_block.check(**kwargs))
return errors

View file

@ -25,7 +25,7 @@ class StreamBlockValidationError(ValidationError):
params.update(block_errors)
if non_block_errors:
params[NON_FIELD_ERRORS] = non_block_errors
super(StreamBlockValidationError, self).__init__(
super().__init__(
'Validation error in StreamBlock', params=params)
@ -34,7 +34,7 @@ class BaseStreamBlock(Block):
def __init__(self, local_blocks=None, **kwargs):
self._constructor_kwargs = kwargs
super(BaseStreamBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
# create a local (shallow) copy of base_blocks so that it can be supplemented by local_blocks
self.child_blocks = self.base_blocks.copy()
@ -298,7 +298,7 @@ class BaseStreamBlock(Block):
return (path, args, kwargs)
def check(self, **kwargs):
errors = super(BaseStreamBlock, self).check(**kwargs)
errors = super().check(**kwargs)
for name, child_block in self.child_blocks.items():
errors.extend(child_block.check(**kwargs))
errors.extend(child_block._check_name(**kwargs))

View file

@ -19,7 +19,7 @@ class BaseStructBlock(Block):
def __init__(self, local_blocks=None, **kwargs):
self._constructor_kwargs = kwargs
super(BaseStructBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
# create a local (shallow) copy of base_blocks so that it can be supplemented by local_blocks
self.child_blocks = self.base_blocks.copy()
@ -164,7 +164,7 @@ class BaseStructBlock(Block):
return (path, args, kwargs)
def check(self, **kwargs):
errors = super(BaseStructBlock, self).check(**kwargs)
errors = super().check(**kwargs)
for name, child_block in self.child_blocks.items():
errors.extend(child_block.check(**kwargs))
errors.extend(child_block._check_name(**kwargs))
@ -191,7 +191,7 @@ class StructBlock(BaseStructBlock, metaclass=DeclarativeSubBlocksMetaclass):
class StructValue(collections.OrderedDict):
def __init__(self, block, *args):
super(StructValue, self).__init__(*args)
super().__init__(*args)
self.block = block
def __html__(self):

View file

@ -11,13 +11,13 @@ class RichTextField(models.TextField):
self.editor = kwargs.pop('editor', 'default')
self.features = kwargs.pop('features', None)
# TODO: preserve 'editor' and 'features' when deconstructing for migrations
super(RichTextField, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def formfield(self, **kwargs):
from wagtail.admin.rich_text import get_rich_text_editor_widget
defaults = {'widget': get_rich_text_editor_widget(self.editor, features=self.features)}
defaults.update(kwargs)
return super(RichTextField, self).formfield(**defaults)
return super().formfield(**defaults)
# https://github.com/django/django/blob/64200c14e0072ba0ffef86da46b2ea82fd1e019a/django/db/models/fields/subclassing.py#L31-L44
@ -39,7 +39,7 @@ class Creator:
class StreamField(models.Field):
def __init__(self, block_types, **kwargs):
super(StreamField, self).__init__(**kwargs)
super().__init__(**kwargs)
if isinstance(block_types, Block):
self.stream_block = block_types
elif isinstance(block_types, type):
@ -55,7 +55,7 @@ class StreamField(models.Field):
return StreamFieldPanel
def deconstruct(self):
name, path, _, kwargs = super(StreamField, self).deconstruct()
name, path, _, kwargs = super().deconstruct()
block_types = self.stream_block.child_blocks.items()
args = [block_types]
return name, path, args, kwargs
@ -115,7 +115,7 @@ class StreamField(models.Field):
"""
defaults = {'form_class': BlockField, 'block': self.stream_block}
defaults.update(kwargs)
return super(StreamField, self).formfield(**defaults)
return super().formfield(**defaults)
def value_to_string(self, obj):
value = self.value_from_object(obj)
@ -125,12 +125,12 @@ class StreamField(models.Field):
return self.stream_block.get_searchable_content(value)
def check(self, **kwargs):
errors = super(StreamField, self).check(**kwargs)
errors = super().check(**kwargs)
errors.extend(self.stream_block.check(field=self, **kwargs))
return errors
def contribute_to_class(self, cls, name, **kwargs):
super(StreamField, self).contribute_to_class(cls, name, **kwargs)
super().contribute_to_class(cls, name, **kwargs)
# Add Creator descriptor to allow the field to be set from a list or a
# JSON string.

View file

@ -9,7 +9,7 @@ class PasswordViewRestrictionForm(forms.Form):
def __init__(self, *args, **kwargs):
self.restriction = kwargs.pop('instance')
super(PasswordViewRestrictionForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def clean_password(self):
data = self.cleaned_data['password']

View file

@ -9,7 +9,7 @@ class WagtailCoreExtension(Extension):
tags = {'include_block'}
def __init__(self, environment):
super(WagtailCoreExtension, self).__init__(environment)
super().__init__(environment)
self.environment.globals.update({
'pageurl': jinja2.contextfunction(pageurl),

View file

@ -130,7 +130,7 @@ class Site(models.Model):
return 'http://%s:%d' % (self.hostname, self.port)
def clean_fields(self, exclude=None):
super(Site, self).clean_fields(exclude)
super().clean_fields(exclude)
# Only one site can have the is_default_site flag set
try:
default = Site.objects.get(is_default_site=True)
@ -355,7 +355,7 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
settings_panels = []
def __init__(self, *args, **kwargs):
super(Page, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if not self.id:
# this model is being newly created
# rather than retrieved from the db;
@ -428,10 +428,10 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
if not self.draft_title:
self.draft_title = self.title
super(Page, self).full_clean(*args, **kwargs)
super().full_clean(*args, **kwargs)
def clean(self):
super(Page, self).clean()
super().clean()
if not Page._slug_is_available(self.slug, self.get_parent(), self):
raise ValidationError({'slug': _("This slug is already in use")})
@ -461,7 +461,7 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
old_url_path = old_record.url_path
new_url_path = self.url_path
result = super(Page, self).save(*args, **kwargs)
result = super().save(*args, **kwargs)
if update_descendant_url_paths:
self._update_descendant_url_paths(old_url_path, new_url_path)
@ -490,7 +490,7 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
# child pages that are not instances of SpecificPage
if type(self) is Page:
# this is a Page instance, so carry on as we were
return super(Page, self).delete(*args, **kwargs)
return super().delete(*args, **kwargs)
else:
# retrieve an actual Page instance and delete that instead of self
return Page.objects.get(id=self.id).delete(*args, **kwargs)
@ -1018,7 +1018,7 @@ class Page(AbstractPage, index.Indexed, ClusterableModel, metaclass=PageBase):
Extension to the treebeard 'move' method to ensure that url_path is updated too.
"""
old_url_path = Page.objects.get(id=self.id).url_path
super(Page, self).move(target, pos=pos)
super().move(target, pos=pos)
# treebeard's move method doesn't actually update the in-memory instance, so we need to work
# with a freshly loaded one now
new_self = Page.objects.get(id=self.id)
@ -1385,7 +1385,7 @@ class Orderable(models.Model):
class SubmittedRevisionsManager(models.Manager):
def get_queryset(self):
return super(SubmittedRevisionsManager, self).get_queryset().filter(submitted_for_moderation=True)
return super().get_queryset().filter(submitted_for_moderation=True)
class PageRevision(models.Model):
@ -1413,7 +1413,7 @@ class PageRevision(models.Model):
if self.created_at is None:
self.created_at = timezone.now()
super(PageRevision, self).save(*args, **kwargs)
super().save(*args, **kwargs)
if self.submitted_for_moderation:
# ensure that all other revisions of this page have the 'submitted for moderation' flag unset
self.page.revisions.exclude(id=self.id).update(submitted_for_moderation=False)

View file

@ -171,7 +171,7 @@ class BaseDjangoAuthPermissionPolicy(BasePermissionPolicy):
# swappable models are in use - for example, an interface for editing user
# records might use a custom User model but will typically still refer to the
# permission records for auth.user.
super(BaseDjangoAuthPermissionPolicy, self).__init__(model)
super().__init__(model)
self.auth_model = auth_model or self.model
self.app_label = self.auth_model._meta.app_label
self.model_name = self.auth_model._meta.model_name
@ -247,7 +247,7 @@ class OwnershipPermissionPolicy(BaseDjangoAuthPermissionPolicy):
(unless the user is an active superuser, in which case they can do everything).
"""
def __init__(self, model, auth_model=None, owner_field_name='owner'):
super(OwnershipPermissionPolicy, self).__init__(model, auth_model=auth_model)
super().__init__(model, auth_model=auth_model)
self.owner_field_name = owner_field_name
# make sure owner_field_name is a field that exists on the model

View file

@ -207,7 +207,7 @@ class CollectionOwnershipPermissionPolicy(
(see permission_policies.base.OwnershipPermissionPolicy)
"""
def __init__(self, model, auth_model=None, owner_field_name='owner'):
super(CollectionOwnershipPermissionPolicy, self).__init__(model, auth_model=auth_model)
super().__init__(model, auth_model=auth_model)
self.owner_field_name = owner_field_name
# make sure owner_field_name is a field that exists on the model

View file

@ -30,7 +30,7 @@ class FooStreamBlock(blocks.StreamBlock):
error = 'At least one block must say "foo"'
def clean(self, value):
value = super(FooStreamBlock, self).clean(value)
value = super().clean(value)
if not any(block.value == 'foo' for block in value):
raise blocks.StreamBlockValidationError(non_block_errors=ErrorList([self.error]))
return value
@ -201,7 +201,7 @@ class TestFieldBlock(WagtailTestUtils, SimpleTestCase):
class PrefixField(forms.Field):
def clean(self, value):
value = super(PrefixField, self).clean(value)
value = super().clean(value)
return PrefixWrapper.from_prefixed(value)
def prepare_value(self, value):
@ -209,7 +209,7 @@ class TestFieldBlock(WagtailTestUtils, SimpleTestCase):
class PrefixedBlock(blocks.FieldBlock):
def __init__(self, required=True, help_text='', **kwargs):
super(PrefixedBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
self.field = PrefixField(required=required, help_text=help_text)
block = PrefixedBlock()

View file

@ -122,7 +122,7 @@ class PermissionPolicyTestCase(PermissionPolicyTestUtils, TestCase):
class TestCollectionPermissionPolicy(PermissionPolicyTestCase):
def setUp(self):
super(TestCollectionPermissionPolicy, self).setUp()
super().setUp()
self.policy = CollectionPermissionPolicy(Document)
def test_user_has_permission(self):
@ -512,7 +512,7 @@ class TestCollectionPermissionPolicy(PermissionPolicyTestCase):
class TestCollectionOwnershipPermissionPolicy(PermissionPolicyTestCase):
def setUp(self):
super(TestCollectionOwnershipPermissionPolicy, self).setUp()
super().setUp()
self.policy = CollectionOwnershipPermissionPolicy(
Document, owner_field_name='uploaded_by_user',
)

View file

@ -170,7 +170,7 @@ class PermissionPolicyTestCase(PermissionPolicyTestUtils, TestCase):
class TestBlanketPermissionPolicy(PermissionPolicyTestCase):
def setUp(self):
super(TestBlanketPermissionPolicy, self).setUp()
super().setUp()
self.policy = BlanketPermissionPolicy(Image)
self.active_users = [
@ -273,7 +273,7 @@ class TestBlanketPermissionPolicy(PermissionPolicyTestCase):
class TestAuthenticationOnlyPermissionPolicy(PermissionPolicyTestCase):
def setUp(self):
super(TestAuthenticationOnlyPermissionPolicy, self).setUp()
super().setUp()
self.policy = AuthenticationOnlyPermissionPolicy(Image)
def test_user_has_permission(self):
@ -498,7 +498,7 @@ class TestAuthenticationOnlyPermissionPolicy(PermissionPolicyTestCase):
class TestModelPermissionPolicy(PermissionPolicyTestCase):
def setUp(self):
super(TestModelPermissionPolicy, self).setUp()
super().setUp()
self.policy = ModelPermissionPolicy(Image)
def test_user_has_permission(self):
@ -872,7 +872,7 @@ class TestModelPermissionPolicy(PermissionPolicyTestCase):
class TestOwnershipPermissionPolicy(PermissionPolicyTestCase):
def setUp(self):
super(TestOwnershipPermissionPolicy, self).setUp()
super().setUp()
self.policy = OwnershipPermissionPolicy(Image, owner_field_name='uploaded_by_user')
def test_user_has_permission(self):

View file

@ -208,7 +208,7 @@ class TestStreamFieldDjangoRendering(TestStreamFieldRenderingBase):
class TestStreamFieldJinjaRendering(TestStreamFieldRenderingBase):
def setUp(self):
super(TestStreamFieldJinjaRendering, self).setUp()
super().setUp()
self.engine = engines['jinja2']
def render(self, string, context):

View file

@ -60,7 +60,7 @@ class TestAssertTagInHTML(WagtailTestUtils, TestCase):
class TestWagtailPageTests(WagtailPageTests):
def setUp(self):
super(TestWagtailPageTests, self).setUp()
super().setUp()
site = Site.objects.get(is_default_site=True)
self.root = site.root_page.specific

View file

@ -13,12 +13,12 @@ class AdminDocumentChooser(AdminChooser):
link_to_chosen_text = _('Edit this document')
def __init__(self, **kwargs):
super(AdminDocumentChooser, self).__init__(**kwargs)
super().__init__(**kwargs)
self.document_model = get_document_model()
def render_html(self, name, value, attrs):
instance, value = self.get_instance_and_id(self.document_model, value)
original_field_html = super(AdminDocumentChooser, self).render_html(name, value, attrs)
original_field_html = super().render_html(name, value, attrs)
return render_to_string("wagtaildocs/widgets/document_chooser.html", {
'widget': self,

View file

@ -26,7 +26,7 @@ class ImageRenditionField(Field):
"""
def __init__(self, filter_spec, *args, **kwargs):
self.filter_spec = filter_spec
super(ImageRenditionField, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
def to_representation(self, image):
try:

View file

@ -12,7 +12,7 @@ SUPPORTED_FORMATS_TEXT = _("GIF, JPEG, PNG")
class WagtailImageField(ImageField):
def __init__(self, *args, **kwargs):
super(WagtailImageField, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
# Get max upload size from settings
self.max_upload_size = getattr(settings, 'WAGTAILIMAGES_MAX_UPLOAD_SIZE', 10 * 1024 * 1024)
@ -84,7 +84,7 @@ class WagtailImageField(ImageField):
), code='file_too_large')
def to_python(self, data):
f = super(WagtailImageField, self).to_python(data)
f = super().to_python(data)
if f is not None:
self.check_image_file_size(f)

View file

@ -17,7 +17,7 @@ def image(image, filterspec, **attrs):
class WagtailImagesExtension(Extension):
def __init__(self, environment):
super(WagtailImagesExtension, self).__init__(environment)
super().__init__(environment)
self.environment.globals.update({
'image': image,

View file

@ -13,12 +13,12 @@ class AdminImageChooser(AdminChooser):
link_to_chosen_text = _('Edit this image')
def __init__(self, **kwargs):
super(AdminImageChooser, self).__init__(**kwargs)
super().__init__(**kwargs)
self.image_model = get_image_model()
def render_html(self, name, value, attrs):
instance, value = self.get_instance_and_id(self.image_model, value)
original_field_html = super(AdminImageChooser, self).render_html(name, value, attrs)
original_field_html = super().render_html(name, value, attrs)
return render_to_string("wagtailimages/widgets/image_chooser.html", {
'widget': self,

View file

@ -185,7 +185,7 @@ class BaseSearchResults:
class EmptySearchResults(BaseSearchResults):
def __init__(self):
return super(EmptySearchResults, self).__init__(None, None)
return super().__init__(None, None)
def _clone(self):
return self.__class__()

View file

@ -215,7 +215,7 @@ class BaseField:
class SearchField(BaseField):
def __init__(self, field_name, boost=None, partial_match=False, **kwargs):
super(SearchField, self).__init__(field_name, **kwargs)
super().__init__(field_name, **kwargs)
self.boost = boost
self.partial_match = partial_match

View file

@ -15,7 +15,7 @@ class Query(models.Model):
# Normalise query string
self.query_string = normalise_query_string(self.query_string)
super(Query, self).save(*args, **kwargs)
super().save(*args, **kwargs)
def add_hit(self, date=None):
if date is None:

View file

@ -11,34 +11,34 @@ class TestDBBackend(BackendTests, TestCase):
# Doesn't support ranking
@unittest.expectedFailure
def test_ranking(self):
super(TestDBBackend, self).test_ranking()
super().test_ranking()
# Doesn't support ranking
@unittest.expectedFailure
def test_search_boosting_on_related_fields(self):
super(TestDBBackend, self).test_search_boosting_on_related_fields()
super().test_search_boosting_on_related_fields()
# Doesn't support searching specific fields
@unittest.expectedFailure
def test_search_child_class_field_from_parent(self):
super(TestDBBackend, self).test_search_child_class_field_from_parent()
super().test_search_child_class_field_from_parent()
# Doesn't support searching related fields
@unittest.expectedFailure
def test_search_on_related_fields(self):
super(TestDBBackend, self).test_search_on_related_fields()
super().test_search_on_related_fields()
# Doesn't support searching callable fields
@unittest.expectedFailure
def test_search_callable_field(self):
super(TestDBBackend, self).test_search_callable_field()
super().test_search_callable_field()
# Broken
@unittest.expectedFailure
def test_order_by_non_filterable_field(self):
super(TestDBBackend, self).test_order_by_non_filterable_field()
super().test_order_by_non_filterable_field()
# Doesn't support the index API used in this test
@unittest.expectedFailure
def test_same_rank_pages(self):
super(TestDBBackend, self).test_same_rank_pages()
super().test_same_rank_pages()

View file

@ -7,7 +7,7 @@ from wagtail.core.models import Site
class SiteForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(SiteForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.fields['root_page'].widget = AdminPageChooser(
choose_one_text=_('Choose a root page'), choose_another_text=_('Choose a different root page')
)

View file

@ -6,7 +6,7 @@ from wagtail.core.utils import resolve_model_string
class SnippetChooserBlock(ChooserBlock):
def __init__(self, target_model, **kwargs):
super(SnippetChooserBlock, self).__init__(**kwargs)
super().__init__(**kwargs)
self._target_model = target_model
@cached_property

View file

@ -239,7 +239,7 @@ class TestSnippetEditView(BaseTestSnippetEditView):
fixtures = ['test.json']
def setUp(self):
super(TestSnippetEditView, self).setUp()
super().setUp()
self.test_snippet = Advert.objects.get(id=1)
def test_simple(self):
@ -293,7 +293,7 @@ class TestSnippetEditView(BaseTestSnippetEditView):
class TestEditTabbedSnippet(BaseTestSnippetEditView):
def setUp(self):
super(TestEditTabbedSnippet, self).setUp()
super().setUp()
self.test_snippet = AdvertWithTabbedInterface.objects.create(
text="test_advert",
url="http://www.example.com",
@ -312,7 +312,7 @@ class TestEditTabbedSnippet(BaseTestSnippetEditView):
class TestEditFileUploadSnippet(BaseTestSnippetEditView):
def setUp(self):
super(TestEditFileUploadSnippet, self).setUp()
super().setUp()
self.test_snippet = FileUploadSnippet.objects.create(
file=ContentFile(b"Simple text document", 'test.txt'))

View file

@ -15,12 +15,12 @@ class AdminSnippetChooser(AdminChooser):
self.choose_another_text = _('Choose another %s') % name
self.link_to_chosen_text = _('Edit this %s') % name
super(AdminSnippetChooser, self).__init__(**kwargs)
super().__init__(**kwargs)
def render_html(self, name, value, attrs):
instance, value = self.get_instance_and_id(self.target_model, value)
original_field_html = super(AdminSnippetChooser, self).render_html(name, value, attrs)
original_field_html = super().render_html(name, value, attrs)
return render_to_string("wagtailsnippets/widgets/snippet_chooser.html", {
'widget': self,

View file

@ -355,7 +355,7 @@ class BlogIndexPage(Page):
paginator, entries = paginate(request, entries, page_key='page', per_page=10)
# Update template context
context = super(BlogIndexPage, self).get_context(request)
context = super().get_context(request)
context['entries'] = entries
return context

View file

@ -32,7 +32,7 @@ class AuthorModelAdmin(ModelAdmin):
return class_names
def get_extra_attrs_for_field_col(self, obj, field_name):
attrs = super(AuthorModelAdmin, self).get_extra_attrs_for_field_col(
attrs = super().get_extra_attrs_for_field_col(
field_name, obj
)
if field_name == 'last_book':

View file

@ -6,12 +6,12 @@ class LinkBlock(blocks.StructBlock):
url = blocks.URLBlock()
def get_context(self, value, parent_context=None):
context = super(LinkBlock, self).get_context(value, parent_context)
context = super().get_context(value, parent_context)
context['classname'] = parent_context['classname'] if value['title'] == 'Torchbox' else 'normal'
return context
def get_form_context(self, value, prefix='', errors=None):
context = super(LinkBlock, self).get_form_context(value, prefix=prefix, errors=errors)
context = super().get_form_context(value, prefix=prefix, errors=errors)
context['extra_var'] = "Hello from get_form_context!"
return context

View file

@ -223,7 +223,7 @@ class EventCategory(models.Model):
class EventPageForm(WagtailAdminPageForm):
def clean(self):
cleaned_data = super(EventPageForm, self).clean()
cleaned_data = super().clean()
# Make sure that the event starts before it ends
start_date = cleaned_data['date_from']
@ -302,7 +302,7 @@ class SingleEventPage(EventPage):
# Give this page model a custom URL routing scheme
def get_url_parts(self, request=None):
url_parts = super(SingleEventPage, self).get_url_parts(request=request)
url_parts = super().get_url_parts(request=request)
if url_parts is None:
return None
else:
@ -312,13 +312,13 @@ class SingleEventPage(EventPage):
def route(self, request, path_components):
if path_components == ['pointless-suffix']:
# treat this as equivalent to a request for this page
return super(SingleEventPage, self).route(request, [])
return super().route(request, [])
else:
# fall back to default routing rules
return super(SingleEventPage, self).route(request, path_components)
return super().route(request, path_components)
def get_admin_display_title(self):
return "%s (single event)" % super(SingleEventPage, self).get_admin_display_title()
return "%s (single event)" % super().get_admin_display_title()
SingleEventPage.content_panels = [FieldPanel('excerpt')] + EventPage.content_panels
@ -346,7 +346,7 @@ class EventIndex(Page):
events = paginator.page(paginator.num_pages)
# Update context
context = super(EventIndex, self).get_context(request)
context = super().get_context(request)
context['events'] = events
return context
@ -357,7 +357,7 @@ class EventIndex(Page):
except (TypeError, ValueError):
pass
return super(EventIndex, self).route(request, path_components)
return super().route(request, path_components)
def get_static_site_paths(self):
# Get page count
@ -368,12 +368,12 @@ class EventIndex(Page):
yield '/%d/' % (page + 1)
# Yield from superclass
for path in super(EventIndex, self).get_static_site_paths():
for path in super().get_static_site_paths():
yield path
def get_sitemap_urls(self):
# Add past events url to sitemap
return super(EventIndex, self).get_sitemap_urls() + [
return super().get_sitemap_urls() + [
{
'location': self.full_url + 'past/',
'lastmod': self.latest_revision_created_at
@ -381,7 +381,7 @@ class EventIndex(Page):
]
def get_cached_paths(self):
return super(EventIndex, self).get_cached_paths() + [
return super().get_cached_paths() + [
'/past/'
]
@ -398,7 +398,7 @@ class FormField(AbstractFormField):
class FormPage(AbstractEmailForm):
def get_context(self, request):
context = super(FormPage, self).get_context(request)
context = super().get_context(request)
context['greeting'] = "hello world"
return context
@ -450,7 +450,7 @@ class FormPageWithCustomSubmission(AbstractEmailForm):
thank_you_text = RichTextField(blank=True)
def get_context(self, request, *args, **kwargs):
context = super(FormPageWithCustomSubmission, self).get_context(request)
context = super().get_context(request)
context['greeting'] = "hello world"
return context
@ -461,7 +461,7 @@ class FormPageWithCustomSubmission(AbstractEmailForm):
data_fields = [
('username', 'Username'),
]
data_fields += super(FormPageWithCustomSubmission, self).get_data_fields()
data_fields += super().get_data_fields()
return data_fields
@ -487,7 +487,7 @@ class FormPageWithCustomSubmission(AbstractEmailForm):
self.get_context(request)
)
return super(FormPageWithCustomSubmission, self).serve(request, *args, **kwargs)
return super().serve(request, *args, **kwargs)
FormPageWithCustomSubmission.content_panels = [
@ -511,7 +511,7 @@ class CustomFormPageSubmission(AbstractFormSubmission):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
def get_data(self):
form_data = super(CustomFormPageSubmission, self).get_data()
form_data = super().get_data()
form_data.update({
'username': self.user.username,
})
@ -707,7 +707,7 @@ class ExtendedImageChooserBlock(ImageChooserBlock):
otherwise, it returns the default value.
"""
def get_api_representation(self, value, context=None):
image_id = super(ExtendedImageChooserBlock, self).get_api_representation(value, context=context)
image_id = super().get_api_representation(value, context=context)
if 'request' in context and context['request'].query_params.get('extended', False):
return {
'id': image_id,
@ -839,7 +839,7 @@ class CustomImageFilePath(AbstractImage):
different contents - this isn't guaranteed as we're only using
the first three characters of the checksum.
"""
original_filepath = super(CustomImageFilePath, self).get_upload_to(filename)
original_filepath = super().get_upload_to(filename)
folder_name, filename = original_filepath.split(os.path.sep)
# Ensure that we consume the entire file, we can't guarantee that

View file

@ -225,7 +225,7 @@ class WagtailPageTests(WagtailTestUtils, TestCase):
A set of asserts to help write tests for your own Wagtail site.
"""
def setUp(self):
super(WagtailPageTests, self).setUp()
super().setUp()
self.login()
def _testCanCreateAt(self, parent_model, child_model):

View file

@ -38,7 +38,7 @@ class UsernameForm(forms.ModelForm):
something else, don't touch it.
"""
def __init__(self, *args, **kwargs):
super(UsernameForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if User.USERNAME_FIELD == 'username':
field = self.fields['username']
field.regex = r"^[\w.@+-]+$"
@ -92,7 +92,7 @@ class UserForm(UsernameForm):
'or setting.'))
def __init__(self, *args, **kwargs):
super(UserForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if self.password_enabled:
if self.password_required:
@ -139,11 +139,11 @@ class UserForm(UsernameForm):
return password2
def _clean_fields(self):
super(UserForm, self)._clean_fields()
super()._clean_fields()
self._clean_username()
def save(self, commit=True):
user = super(UserForm, self).save(commit=False)
user = super().save(commit=False)
if self.password_enabled:
password = self.cleaned_data['password1']
@ -170,7 +170,7 @@ class UserEditForm(UserForm):
def __init__(self, *args, **kwargs):
editing_self = kwargs.pop('editing_self', False)
super(UserEditForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
if editing_self:
del self.fields["is_active"]
@ -186,7 +186,7 @@ class UserEditForm(UserForm):
class GroupForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(GroupForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
self.registered_permissions = Permission.objects.none()
for fn in hooks.get_hooks('register_permissions'):
self.registered_permissions = self.registered_permissions | fn()
@ -232,7 +232,7 @@ class GroupForm(forms.ModelForm):
except ValueError:
# this form is not bound; we're probably creating a new group
untouchable_permissions = []
group = super(GroupForm, self).save()
group = super().save()
group.permissions.add(*untouchable_permissions)
return group
@ -272,7 +272,7 @@ class BaseGroupPagePermissionFormSet(forms.BaseFormSet):
'permission_types': [pp.permission_type for pp in page_permissions]
})
super(BaseGroupPagePermissionFormSet, self).__init__(
super().__init__(
data, files, initial=initial_data, prefix=prefix
)
for form in self.forms:
@ -280,7 +280,7 @@ class BaseGroupPagePermissionFormSet(forms.BaseFormSet):
@property
def empty_form(self):
empty_form = super(BaseGroupPagePermissionFormSet, self).empty_form
empty_form = super().empty_form
empty_form.fields['DELETE'].widget = forms.HiddenInput()
return empty_form
@ -353,7 +353,7 @@ GroupPagePermissionFormSet = forms.formset_factory(
class NotificationPreferencesForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(NotificationPreferencesForm, self).__init__(*args, **kwargs)
super().__init__(*args, **kwargs)
user_perms = UserPagePermissionsProxy(self.instance.user)
if not user_perms.can_publish_pages():
del self.fields['submitted_notifications']

View file

@ -44,7 +44,7 @@ class PermissionPanelFormsMixin:
if 'permission_panels' not in kwargs:
kwargs['permission_panels'] = self.get_permission_panel_forms()
return super(PermissionPanelFormsMixin, self).get_context_data(**kwargs)
return super().get_context_data(**kwargs)
class IndexView(mixins.SearchableListMixin, generic.IndexView):

View file

@ -4,4 +4,4 @@ from wagtail.admin.widgets import Button
class UserListingButton(Button):
def __init__(self, label, url, classes=set(), **kwargs):
classes = {'button', 'button-small', 'button-secondary'} | set(classes)
super(UserListingButton, self).__init__(label, url, classes=classes, **kwargs)
super().__init__(label, url, classes=classes, **kwargs)

View file

@ -5,7 +5,7 @@ from django.utils.safestring import mark_safe
class WidgetWithScript(Widget):
def render_html(self, name, value, attrs):
"""Render the HTML (non-JS) portion of the field markup"""
return super(WidgetWithScript, self).render(name, value, attrs)
return super().render(name, value, attrs)
def render(self, name, value, attrs=None):
# no point trying to come up with sensible semantics for when 'id' is missing from attrs,