diff --git a/docs/releases/5.0.md b/docs/releases/5.0.md index bd0f266fdb..1b38a1acb8 100644 --- a/docs/releases/5.0.md +++ b/docs/releases/5.0.md @@ -416,3 +416,7 @@ The following icons are unused in Wagtail itself and will be removed in a future | `undo` | `rotate` | | `uni52` | `folder-inverse` (identical) | | `wagtail-inverse` | `wagtail-icon` | + +### Snippets `get_admin_url_namespace()` and `get_admin_base_path()` moved to `SnippetViewSet` + +The undocumented `get_admin_url_namespace()` and `get_admin_base_path()` methods that were set on snippet models at runtime have been moved to the {class}`~wagtail.snippets.views.snippets.SnippetViewSet` class. If you use these methods, you could access them via {meth}`SnippetModel.snippet_viewset.get_admin_url_namespace() ` and {meth}`SnippetModel.snippet_viewset.get_admin_base_path() `, respectively. diff --git a/wagtail/admin/templatetags/wagtailadmin_tags.py b/wagtail/admin/templatetags/wagtailadmin_tags.py index 82565e9e9c..96bab54fef 100644 --- a/wagtail/admin/templatetags/wagtailadmin_tags.py +++ b/wagtail/admin/templatetags/wagtailadmin_tags.py @@ -202,7 +202,7 @@ def admin_url_name(obj, action): """ if isinstance(obj, Page): return f"wagtailadmin_pages:{action}" - return obj.get_admin_url_namespace() + f":{action}" + return obj.snippet_viewset.get_url_name(action) @register.simple_tag diff --git a/wagtail/admin/tests/test_workflows.py b/wagtail/admin/tests/test_workflows.py index 587252e1b0..099fa0cab0 100644 --- a/wagtail/admin/tests/test_workflows.py +++ b/wagtail/admin/tests/test_workflows.py @@ -1136,7 +1136,7 @@ class BaseSnippetWorkflowTests(BasePageWorkflowTests): def get_url(self, view, args=None): return reverse( - f"{self.object.get_admin_url_namespace()}:{view}", + self.model.snippet_viewset.get_url_name(view), args=(quote(self.object.pk),) if args is None else args, ) diff --git a/wagtail/admin/views/home.py b/wagtail/admin/views/home.py index a3e2015ec3..e860a606b5 100644 --- a/wagtail/admin/views/home.py +++ b/wagtail/admin/views/home.py @@ -184,14 +184,17 @@ class WorkflowObjectsToModeratePanel(Component): actions = state.task.specific.get_actions(obj, request.user) workflow_tasks = state.workflow_state.all_tasks_with_status() - url_name_prefix = "wagtailadmin_pages" - if not isinstance(obj, Page): - url_name_prefix = obj.get_admin_url_namespace() + workflow_action_url_name = "wagtailadmin_pages:workflow_action" + workflow_preview_url_name = "wagtailadmin_pages:workflow_preview" - workflow_action_url_name = f"{url_name_prefix}:workflow_action" - workflow_preview_url_name = None - if getattr(obj, "is_previewable", False): - workflow_preview_url_name = f"{url_name_prefix}:workflow_preview" + # Snippets can also have workflows + if not isinstance(obj, Page): + viewset = obj.snippet_viewset + workflow_action_url_name = viewset.get_url_name("workflow_action") + workflow_preview_url_name = viewset.get_url_name("workflow_preview") + + if not getattr(obj, "is_previewable", False): + workflow_preview_url_name = None context["states"].append( { diff --git a/wagtail/snippets/action_menu.py b/wagtail/snippets/action_menu.py index 45d95ad127..b20cc90979 100644 --- a/wagtail/snippets/action_menu.py +++ b/wagtail/snippets/action_menu.py @@ -147,7 +147,7 @@ class WorkflowMenuItem(ActionMenuItem): def get_url(self, parent_context): instance = parent_context["instance"] - url_name = instance.get_admin_url_namespace() + ":collect_workflow_action_data" + url_name = instance.snippet_viewset.get_url_name("collect_workflow_action_data") return reverse( url_name, args=( diff --git a/wagtail/snippets/tests/test_viewset.py b/wagtail/snippets/tests/test_viewset.py index c5d64ba26b..048b2ebcae 100644 --- a/wagtail/snippets/tests/test_viewset.py +++ b/wagtail/snippets/tests/test_viewset.py @@ -201,11 +201,6 @@ class TestAdminURLs(BaseSnippetViewSetTests): viewset.get_admin_url_namespace(), "wagtailsnippets_tests_advert", ) - # Accessed via the model - self.assertEqual( - snippet.get_admin_url_namespace(), - "wagtailsnippets_tests_advert", - ) # Get specific URL name self.assertEqual( viewset.get_url_name("edit"), @@ -231,8 +226,6 @@ class TestAdminURLs(BaseSnippetViewSetTests): # Accessed via the viewset self.assertEqual(viewset.get_admin_base_path(), "snippets/tests/advert") - # Accessed via the model - self.assertEqual(snippet.get_admin_base_path(), "snippets/tests/advert") # Get specific URL self.assertEqual(reverse(viewset.get_url_name("edit"), args=[pk]), expected_url) # Ensure AdminURLFinder returns the correct URL @@ -254,8 +247,6 @@ class TestAdminURLs(BaseSnippetViewSetTests): viewset = snippet.snippet_viewset # Accessed via the viewset self.assertEqual(viewset.get_admin_url_namespace(), "some_namespace") - # Accessed via the model - self.assertEqual(snippet.get_admin_url_namespace(), "some_namespace") # Get specific URL name self.assertEqual(viewset.get_url_name("edit"), "some_namespace:edit") # Chooser namespace @@ -277,8 +268,6 @@ class TestAdminURLs(BaseSnippetViewSetTests): expected_choose_url = "/admin/choose/wisely/" # Accessed via the viewset self.assertEqual(viewset.get_admin_base_path(), "deep/within/the/admin") - # Accessed via the model - self.assertEqual(snippet.get_admin_base_path(), "deep/within/the/admin") # Get specific URL self.assertEqual(reverse(viewset.get_url_name("edit"), args=[pk]), expected_url) # Ensure AdminURLFinder returns the correct URL diff --git a/wagtail/snippets/views/snippets.py b/wagtail/snippets/views/snippets.py index ad13f4edab..835b0ad431 100644 --- a/wagtail/snippets/views/snippets.py +++ b/wagtail/snippets/views/snippets.py @@ -98,7 +98,7 @@ class ModelIndexView(generic.IndexView): return super().dispatch(request, *args, **kwargs) def get_list_url(self, type): - return reverse(type["model"].get_admin_url_namespace() + ":list") + return reverse(type["model"].snippet_viewset.get_url_name("list")) def get_queryset(self): return None @@ -1321,20 +1321,7 @@ class SnippetViewSet(ModelViewSet): checks.register(snippets_model_check, "panels") - def register_model_methods(self): - @classmethod - def get_admin_url_namespace(cls): - return self.get_admin_url_namespace() - - @classmethod - def get_admin_base_path(cls): - return self.get_admin_base_path() - - self.model.get_admin_url_namespace = get_admin_url_namespace - self.model.get_admin_base_path = get_admin_base_path - def on_register(self): super().on_register() viewsets.register(self.chooser_viewset) self.register_model_check() - self.register_model_methods()