kopia lustrzana https://github.com/wagtail/wagtail
Remove deprecation warnings from UI components
rodzic
00582ba35a
commit
1357960c86
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
Ładowanie…
Reference in New Issue