-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Only call 'as_view()' for a view classes if it is being used to overr…
…ide a request
- Loading branch information
Andy Babic
committed
Jan 15, 2025
1 parent
f7dd08f
commit fa3929f
Showing
1 changed file
with
16 additions
and
13 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,38 +1,41 @@ | ||
from typing import TYPE_CHECKING | ||
from django.conf import settings | ||
from django.utils.deprecation import MiddlewareMixin | ||
from wagtail.admin.auth import require_admin_access | ||
|
||
from wagtail_bynder.views import document as document_views | ||
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) |