Remove deprecation warnings from UI components

pull/7941/head
Matt Westcott 2022-02-08 18:07:22 +00:00 zatwierdzone przez Matt Westcott
rodzic 00582ba35a
commit 1357960c86
4 zmienionych plików z 21 dodań i 340 usunięć

Wyświetl plik

@ -1,11 +1,7 @@
"""Handles rendering of the list of actions in the footer of the page create/edit views."""
import inspect
from warnings import warn
from django.conf import settings
from django.forms import Media
from django.template.loader import get_template, render_to_string
from django.template.loader import render_to_string
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.translation import gettext_lazy as _
@ -13,28 +9,12 @@ from django.utils.translation import gettext_lazy as _
from wagtail.admin.ui.components import Component
from wagtail.core import hooks
from wagtail.core.models import UserPagePermissionsProxy
from wagtail.utils.deprecation import RemovedInWagtail217Warning
def requires_request_arg(method):
"""
Helper function to handle deprecation of old ActionMenuItem API where get_url, is_show,
get_context and render_html all accepted both 'request' and 'parent_context' as arguments
"""
try:
# see if this is a pre-2.15 get_url method that takes both request and context kwargs
inspect.signature(method).bind({})
except TypeError:
return True
else:
return False
class ActionMenuItem(Component):
"""Defines an item in the actions drop-up on the page creation/edit view"""
order = 100 # default order index if one is not specified on init
template_name = 'wagtailadmin/pages/action_menu/menu_item.html'
template = None # RemovedInWagtail217Warning
label = ''
name = None
@ -50,11 +30,7 @@ class ActionMenuItem(Component):
return context['user_page_permissions_tester']
return context['user_page_permissions'].for_page(context['page'])
def is_shown(self, *args):
# accepts both is_shown(request, context) (pre-2.15 signature)
# and is_shown(context) (signature as of 2.15)
# to allow for pre-2.15 ActionMenuItem subclasses calling super().
# RemovedInWagtail217Warning: signature should become is_shown(self, context)
def is_shown(self, context):
"""
Whether this action should be shown on this request; permission checks etc should go here.
By default, actions are shown for unlocked pages, hidden for locked pages
@ -68,41 +44,15 @@ class ActionMenuItem(Component):
may also contain:
'user_page_permissions_tester' = a PagePermissionTester for the current user and page
"""
if len(args) == 2:
warn(
"ActionMenuItem.is_shown no longer takes a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15",
category=RemovedInWagtail217Warning, stacklevel=2
)
request, context = args
else:
context, = args
return (
context['view'] == 'create'
or not self.get_user_page_permissions_tester(context).page_locked()
)
def get_context(self, request, parent_context):
# Obsolete - included here for pre-2.15 subclasses that override this and call super().
# RemovedInWagtail217Warning
return self.get_context_data(parent_context)
get_context.is_base_method = True
def get_context_data(self, parent_context):
"""Defines context for the template, overridable to use more data"""
context = parent_context.copy()
if requires_request_arg(self.get_url):
warn(
"%s.get_url should no longer take a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(self).__name__,
category=RemovedInWagtail217Warning
)
url = self.get_url(parent_context['request'], parent_context)
else:
url = self.get_url(parent_context)
url = self.get_url(parent_context)
context.update({
'label': self.label,
@ -114,53 +64,9 @@ class ActionMenuItem(Component):
})
return context
def get_url(self, *args):
# accepts both get_url(request, parent_context) (pre-2.15 signature)
# and get_url(parent_context) (signature as of 2.15)
# to allow for pre-2.15 ActionMenuItem subclasses calling super().
# RemovedInWagtail217Warning: signature should become get_url(self, parent_context)
def get_url(self, parent_context):
return None
def render_html(self, *args):
# accepts both render_html(request, parent_context) (pre-2.15 signature)
# and render_html(parent_context) (signature as of 2.15)
# to allow for pre-2.15 ActionMenuItem subclasses calling super().
# RemovedInWagtail217Warning: signature should become render_html(self, parent_context)
if len(args) == 2:
warn(
"ActionMenuItem.render_html no longer takes a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15",
category=RemovedInWagtail217Warning, stacklevel=2
)
request, parent_context = args
else:
parent_context, = args
if not getattr(self.get_context, 'is_base_method', False):
# get_context has been overridden, so call it instead of get_context_data
warn(
"%s should define get_context_data(self, parent_context) instead of get_context(self, request, get_context_data). "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(self).__name__,
category=RemovedInWagtail217Warning
)
context_data = self.get_context(parent_context['request'], parent_context)
else:
context_data = self.get_context_data(parent_context)
if self.template:
warn(
"%s should define template_name instead of template. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(self).__name__,
category=RemovedInWagtail217Warning
)
template_name = self.template
else:
template_name = self.template_name
template = get_template(template_name)
return template.render(context_data)
class PublishMenuItem(ActionMenuItem):
label = _("Publish")
@ -441,32 +347,12 @@ class PageActionMenu:
item = WorkflowMenuItem(name, label, launch_modal, icon_name=icon_name)
if requires_request_arg(item.is_shown):
warn(
"%s.is_shown should no longer take a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(item).__name__,
category=RemovedInWagtail217Warning
)
is_shown = item.is_shown(self.request, self.context)
else:
is_shown = item.is_shown(self.context)
if is_shown:
if item.is_shown(self.context):
workflow_menu_items.append(item)
self.menu_items.extend(workflow_menu_items)
for menu_item in _get_base_page_action_menu_items():
if requires_request_arg(menu_item.is_shown):
warn(
"%s.is_shown should no longer take a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(menu_item).__name__,
category=RemovedInWagtail217Warning
)
is_shown = menu_item.is_shown(self.request, self.context)
else:
is_shown = menu_item.is_shown(self.context)
if is_shown:
if menu_item.is_shown(self.context):
self.menu_items.append(menu_item)
self.menu_items.sort(key=lambda item: item.order)
@ -480,27 +366,11 @@ class PageActionMenu:
self.default_item = None
def render_html(self):
rendered_menu_items = []
for menu_item in self.menu_items:
if requires_request_arg(menu_item.render_html):
warn(
"%s.render_html should no longer take a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(menu_item).__name__,
category=RemovedInWagtail217Warning
)
rendered_menu_items.append(menu_item.render_html(self.request, self.context))
else:
rendered_menu_items.append(menu_item.render_html(self.context))
rendered_menu_items = [
menu_item.render_html(self.context) for menu_item in self.menu_items
]
if requires_request_arg(self.default_item.render_html):
warn(
"%s.render_html should no longer take a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(self.default_item).__name__,
category=RemovedInWagtail217Warning
)
rendered_default_item = self.default_item.render_html(self.request, self.context)
else:
rendered_default_item = self.default_item.render_html(self.context)
rendered_default_item = self.default_item.render_html(self.context)
return render_to_string(self.template, {
'default_menu_item': rendered_default_item,

Wyświetl plik

@ -1,73 +1,18 @@
from warnings import warn
from django.forms import Media
from django.template.loader import get_template, render_to_string
from wagtail.admin.auth import user_has_any_page_permission
from wagtail.admin.navigation import get_site_for_user
from wagtail.admin.ui.components import Component
from wagtail.core import hooks
from wagtail.core.models import Page, Site
from wagtail.utils.deprecation import RemovedInWagtail217Warning
class SummaryItem(Component):
order = 100
template = None # RemovedInWagtail217Warning - should set template_name instead
def __init__(self, request):
self.request = request
def get_context(self):
# RemovedInWagtail217Warning:
# old get_context method deprecated in 2.15; provided here in case subclasses call it from
# overridden render() methods or via super()
return {}
get_context.is_base_method = True
def render(self):
# RemovedInWagtail217Warning:
# old render method deprecated in 2.15; provided here in case subclasses call it via super()
return render_to_string(self.template, self.get_context(), request=self.request)
render.is_base_method = True
def render_html(self, parent_context=None):
if not getattr(self.render, 'is_base_method', False):
# this SummaryItem subclass has overridden render() - use their implementation in
# preference to following the Component.render_html path
message = (
"Summary item %r should provide render_html(self, parent_context) rather than render(self). "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15"
% self
)
warn(message, category=RemovedInWagtail217Warning)
return self.render()
elif not getattr(self.get_context, 'is_base_method', False):
# this SummaryItem subclass has overridden get_context() - use their implementation in
# preference to Component.get_context_data
message = (
"Summary item %r should provide get_context_data(self, parent_context) rather than get_context(self). "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15"
% self
)
warn(message, category=RemovedInWagtail217Warning)
context_data = self.get_context()
else:
context_data = self.get_context_data(parent_context)
if self.template is not None:
warn(
"%s should define template_name instead of template. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(self).__name__,
category=RemovedInWagtail217Warning
)
template_name = self.template
else:
template_name = self.template_name
template = get_template(template_name)
return template.render(context_data)
def is_shown(self):
return True

Wyświetl plik

@ -1,7 +1,5 @@
import itertools
from warnings import warn
from django.conf import settings
from django.contrib.auth import get_user_model
from django.contrib.auth.decorators import permission_required
@ -18,7 +16,6 @@ from wagtail.admin.ui.components import Component
from wagtail.core import hooks
from wagtail.core.models import (
Page, PageRevision, TaskState, UserPagePermissionsProxy, WorkflowState)
from wagtail.utils.deprecation import RemovedInWagtail217Warning
User = get_user_model()
@ -183,20 +180,7 @@ def home(request):
media = Media()
for panel in panels:
if hasattr(panel, 'render') and not hasattr(panel, 'render_html'):
# NOTE: when this deprecation warning is removed the 'fallback_render_method=True' in
# wagtailadmin/home.html should be removed too
message = (
"Homepage panel %r should provide a render_html method. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15"
% panel
)
warn(message, category=RemovedInWagtail217Warning)
# RemovedInWagtail217Warning: this hasattr check can be removed when support for
# non-component-based panels ends
if hasattr(panel, 'media'):
media += panel.media
media += panel.media
site_details = get_site_for_user(request.user)

Wyświetl plik

@ -1,12 +1,9 @@
"""Handles rendering of the list of actions in the footer of the snippet create/edit views."""
import inspect
from functools import lru_cache
from warnings import warn
from django.contrib.admin.utils import quote
from django.forms import Media
from django.template.loader import get_template, render_to_string
from django.template.loader import render_to_string
from django.urls import reverse
from django.utils.functional import cached_property
from django.utils.translation import gettext_lazy as _
@ -14,28 +11,12 @@ from django.utils.translation import gettext_lazy as _
from wagtail.admin.ui.components import Component
from wagtail.core import hooks
from wagtail.snippets.permissions import get_permission_name
from wagtail.utils.deprecation import RemovedInWagtail217Warning
def requires_request_arg(method):
"""
Helper function to handle deprecation of old ActionMenuItem API where get_url, is_show,
get_context and render_html all accepted both 'request' and 'parent_context' as arguments
"""
try:
# see if this is a pre-2.15 get_url method that takes both request and context kwargs
inspect.signature(method).bind({})
except TypeError:
return True
else:
return False
class ActionMenuItem(Component):
"""Defines an item in the actions drop-up on the snippet creation/edit view"""
order = 100 # default order index if one is not specified on init
template_name = 'wagtailsnippets/snippets/action_menu/menu_item.html'
template = None # RemovedInWagtail217Warning
label = ''
name = None
@ -46,11 +27,7 @@ class ActionMenuItem(Component):
if order is not None:
self.order = order
def is_shown(self, *args):
# accepts both is_shown(request, context) (pre-2.15 signature)
# and is_shown(context) (signature as of 2.15)
# to allow for pre-2.15 ActionMenuItem subclasses calling super().
# RemovedInWagtail217Warning: signature should become is_shown(self, context)
def is_shown(self, context):
"""
Whether this action should be shown on this request; permission checks etc should go here.
@ -61,34 +38,12 @@ class ActionMenuItem(Component):
'model' = the model of the snippet being created/edited
'instance' (if view = 'edit') = the snippet being edited
"""
if len(args) == 2:
warn(
"ActionMenuItem.is_shown no longer takes a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15",
category=RemovedInWagtail217Warning, stacklevel=2
)
return True
def get_context(self, request, parent_context):
# Obsolete - included here for pre-2.15 subclasses that override this and call super().
# RemovedInWagtail217Warning
return self.get_context_data(parent_context)
get_context.is_base_method = True
def get_context_data(self, parent_context):
"""Defines context for the template, overridable to use more data"""
context = parent_context.copy()
if requires_request_arg(self.get_url):
warn(
"%s.get_url should no longer take a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(self).__name__,
category=RemovedInWagtail217Warning
)
url = self.get_url(parent_context['request'], parent_context)
else:
url = self.get_url(parent_context)
url = self.get_url(parent_context)
context.update({
'label': self.label,
@ -100,53 +55,9 @@ class ActionMenuItem(Component):
})
return context
def get_url(self, *args):
# accepts both get_url(request, parent_context) (pre-2.15 signature)
# and get_url(parent_context) (signature as of 2.15)
# to allow for pre-2.15 ActionMenuItem subclasses calling super().
# RemovedInWagtail217Warning: signature should become get_url(self, parent_context)
def get_url(self, parent_context):
return None
def render_html(self, *args):
# accepts both render_html(request, parent_context) (pre-2.15 signature)
# and render_html(parent_context) (signature as of 2.15)
# to allow for pre-2.15 ActionMenuItem subclasses calling super().
# RemovedInWagtail217Warning: signature should become render_html(self, parent_context)
if len(args) == 2:
warn(
"ActionMenuItem.render_html no longer takes a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15",
category=RemovedInWagtail217Warning, stacklevel=2
)
request, parent_context = args
else:
parent_context, = args
if not getattr(self.get_context, 'is_base_method', False):
# get_context has been overridden, so call it instead of get_context_data
warn(
"%s should define get_context_data(self, parent_context) instead of get_context(self, request, get_context_data). "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(self).__name__,
category=RemovedInWagtail217Warning
)
context_data = self.get_context(parent_context['request'], parent_context)
else:
context_data = self.get_context_data(parent_context)
if self.template:
warn(
"%s should define template_name instead of template."
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(self).__name__,
category=RemovedInWagtail217Warning
)
template_name = self.template
else:
template_name = self.template_name
template = get_template(template_name)
return template.render(context_data)
class DeleteMenuItem(ActionMenuItem):
name = 'action-delete'
@ -202,24 +113,14 @@ class SnippetActionMenu:
self.request = request
self.context = kwargs
self.context['request'] = request
self.menu_items = []
if 'instance' in self.context:
self.context['model'] = self.context['instance'].__class__
for menu_item in get_base_snippet_action_menu_items(self.context['model']):
if requires_request_arg(menu_item.is_shown):
warn(
"%s.is_shown should no longer take a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(menu_item).__name__,
category=RemovedInWagtail217Warning
)
is_shown = menu_item.is_shown(self.request, self.context)
else:
is_shown = menu_item.is_shown(self.context)
if is_shown:
self.menu_items.append(menu_item)
self.menu_items = [
menu_item for menu_item in get_base_snippet_action_menu_items(self.context['model'])
if menu_item.is_shown(self.context)
]
self.menu_items.sort(key=lambda item: item.order)
@ -232,27 +133,8 @@ class SnippetActionMenu:
self.default_item = None
def render_html(self):
rendered_menu_items = []
for menu_item in self.menu_items:
if requires_request_arg(menu_item.render_html):
warn(
"%s.render_html should no longer take a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(menu_item).__name__,
category=RemovedInWagtail217Warning
)
rendered_menu_items.append(menu_item.render_html(self.request, self.context))
else:
rendered_menu_items.append(menu_item.render_html(self.context))
if requires_request_arg(self.default_item.render_html):
warn(
"%s.render_html should no longer take a 'request' argument. "
"See https://docs.wagtail.org/en/stable/releases/2.15.html#template-components-2-15" % type(self.default_item).__name__,
category=RemovedInWagtail217Warning
)
rendered_default_item = self.default_item.render_html(self.request, self.context)
else:
rendered_default_item = self.default_item.render_html(self.context)
rendered_menu_items = [menu_item.render_html(self.context) for menu_item in self.menu_items]
rendered_default_item = self.default_item.render_html(self.context)
return render_to_string(self.template, {
'default_menu_item': rendered_default_item,