Skip to content

Commit

Permalink
Only call 'as_view()' for a view classes if it is being used to overr…
Browse files Browse the repository at this point in the history
…ide a request
  • Loading branch information
Andy Babic committed Jan 15, 2025
1 parent f7dd08f commit 949081f
Showing 1 changed file with 18 additions and 12 deletions.
30 changes: 18 additions & 12 deletions src/wagtail_bynder/middleware.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from typing import TYPE_CHECKING

from django.conf import settings
from django.utils.deprecation import MiddlewareMixin
from wagtail.admin.auth import require_admin_access
Expand All @@ -6,33 +8,37 @@
from wagtail_bynder.views import image as image_views


if TYPE_CHECKING:
from django.views.generic import View


class PatchWagtailURLsMiddleware(MiddlewareMixin):
@classmethod
def get_overrides(cls) -> dict[str, callable]:
def get_overrides(cls) -> dict[str, type["View"]]:
overrides = {}
if getattr(settings, "BYNDER_DOMAIN", ""):
overrides.update(
{
"wagtailimages_chooser:choose": image_views.ImageChooseView.as_view(),
"wagtailimages_chooser:chosen": image_views.ImageChosenView.as_view(),
"wagtaildocs_chooser:choose": document_views.DocumentChooseView.as_view(),
"wagtaildocs_chooser:chosen": document_views.DocumentChosenView.as_view(),
"wagtailimages_chooser:choose": image_views.ImageChooseView,
"wagtailimages_chooser:chosen": image_views.ImageChosenView,
"wagtaildocs_chooser:choose": document_views.DocumentChooseView,
"wagtaildocs_chooser:chosen": document_views.DocumentChosenView,
}
)
if getattr(settings, "BYNDER_DISABLE_WAGTAIL_EDITING_FOR_ASSETS", False):
overrides.update(
{
"wagtailimages:edit": image_views.ImageEditView.as_view(),
"wagtailimages:delete": image_views.ImageDeleteView.as_view(),
"wagtaildocs:edit": document_views.DocumentEditView.as_view(),
"wagtaildocs:delete": document_views.DocumentDeleteView.as_view(),
"wagtailimages:edit": image_views.ImageEditView,
"wagtailimages:delete": image_views.ImageDeleteView,
"wagtaildocs:edit": document_views.DocumentEditView,
"wagtaildocs:delete": document_views.DocumentDeleteView,
}
)
return overrides

def process_view(self, request, view_func, view_args, view_kwargs):
overrides = self.get_overrides()
replacement_view = overrides.get(request.resolver_match.view_name)
if replacement_view:
view = require_admin_access(replacement_view)
replacement_view_class = overrides.get(request.resolver_match.view_name)
if replacement_view_class:
view = require_admin_access(replacement_view_class.as_view())
return view(request, *view_args, **view_kwargs)

0 comments on commit 949081f

Please sign in to comment.