Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,8 @@ jobs:
strategy:
matrix:
python-version: ["3.13"]
django: ["5.1"]
wagtail: ["6.3"]
django: ["5.2"]
wagtail: ["7.1"]
db: ["postgres"]

services:
Expand Down Expand Up @@ -77,7 +77,7 @@ jobs:
matrix:
python-version: ["3.11", "3.12"]
django: ["4.2"]
wagtail: ["5.2", "6.1", "6.2"]
wagtail: ["6.3", "7.0"]
db: ["sqlite"]
steps:
- uses: actions/checkout@v4
Expand Down
19 changes: 10 additions & 9 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,30 +18,31 @@ classifiers = [
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3.12",
"Programming Language :: Python :: 3.13",
"Framework :: Django",
"Framework :: Django :: 4.2",
"Framework :: Django :: 5.0",
"Framework :: Django :: 5.1",
"Framework :: Django :: 5.2",
"Framework :: Wagtail",
"Framework :: Wagtail :: 5",
"Framework :: Wagtail :: 6",
"Framework :: Wagtail :: 7",
]

dynamic = ["version"]
requires-python = ">=3.11"
dependencies = [
"Django>=4.2",
"Wagtail>=5.2",
"bynder-sdk>=1.1.5,<2.0"
"Wagtail>=6.3",
"bynder-sdk>=2.0.2,<3.0",
]

[project.optional-dependencies]
testing = [
"dj-database-url>=2.1.0,<3.0",
"wagtail_factories>=4.1.0,<5.0",
"responses>=0.24,<1",
"coverage>=7.0,<8.0",
"freezegun>=1.1,<2",
"dj-database-url>=2.1.0,<3.1",
"wagtail-factories>=4.3.0,<5.0",
"responses>=0.25,<1",
"coverage>=7.10,<8.0",
"freezegun>=1.5,<2",
]

[project.urls]
Expand Down
36 changes: 3 additions & 33 deletions src/wagtail_bynder/views/document.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,9 @@
from typing import TYPE_CHECKING

from django.conf import settings
from django.views.generic import UpdateView
from wagtail import VERSION as WAGTAIL_VERSION
from wagtail.documents import get_document_model
from wagtail.documents.views import chooser as chooser_views


if WAGTAIL_VERSION < (6, 3):
from wagtail.documents.views.documents import DeleteView
from wagtail.documents.views.documents import edit as document_edit
else:
from wagtail.documents.views.documents import DeleteView, EditView
from wagtail.documents.views.documents import DeleteView, EditView

from .mixins import BynderAssetCopyMixin, RedirectToBynderMixin

Expand All @@ -20,30 +12,8 @@
from django.http import HttpRequest, JsonResponse


if WAGTAIL_VERSION < (6, 3):

class ClassBasedDocumentEditView(UpdateView):
"""
A class-based view that mimics the behaviour of wagtail's function-based
document edit view, and can be extended with view mixins.
"""

# TODO: Use class from Wagtail once the documents app views are refactored
model = get_document_model()
pk_url_kwarg = "document_id"

def get(self, request, *args, **kwargs):
return document_edit(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
return document_edit(request, *args, **kwargs)

class DocumentEditView(RedirectToBynderMixin, ClassBasedDocumentEditView):
pass
else:

class DocumentEditView(RedirectToBynderMixin, EditView):
pass
class DocumentEditView(RedirectToBynderMixin, EditView):
pass


class DocumentDeleteView(RedirectToBynderMixin, DeleteView):
Expand Down
36 changes: 3 additions & 33 deletions src/wagtail_bynder/views/image.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,9 @@
from typing import TYPE_CHECKING

from django.conf import settings
from django.views.generic import UpdateView
from wagtail import VERSION as WAGTAIL_VERSION
from wagtail.images import get_image_model
from wagtail.images.views import chooser as chooser_views


if WAGTAIL_VERSION < (6, 3):
from wagtail.images.views.images import DeleteView
from wagtail.images.views.images import edit as image_edit
else:
from wagtail.images.views.images import DeleteView, EditView
from wagtail.images.views.images import DeleteView, EditView

from .mixins import BynderAssetCopyMixin, RedirectToBynderMixin

Expand All @@ -20,30 +12,8 @@
from django.http import HttpRequest, JsonResponse


if WAGTAIL_VERSION < (6, 3):

class ClassBasedWagtailImageEditView(UpdateView):
"""
A class-based view that mimics the behaviour of wagtail's function-based
image edit view, and can be extended with view mixins.
"""

# TODO: Use class from Wagtail once the image app views are refactored
model = get_image_model()
pk_url_kwarg = "image_id"

def get(self, request, *args, **kwargs):
return image_edit(request, *args, **kwargs)

def post(self, request, *args, **kwargs):
return image_edit(request, *args, **kwargs)

class ImageEditView(RedirectToBynderMixin, ClassBasedWagtailImageEditView):
pass
else:

class ImageEditView(RedirectToBynderMixin, EditView):
pass
class ImageEditView(RedirectToBynderMixin, EditView):
pass


class ImageDeleteView(RedirectToBynderMixin, DeleteView):
Expand Down
2 changes: 1 addition & 1 deletion src/wagtail_bynder/widgets.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@
from django.utils.functional import cached_property
from django.utils.translation import gettext_lazy as _
from wagtail.admin.staticfiles import versioned_static
from wagtail.admin.telepath import register
from wagtail.admin.widgets import BaseChooser, BaseChooserAdapter
from wagtail.telepath import register

from wagtail_bynder import get_video_model

Expand Down
73 changes: 40 additions & 33 deletions tests/test_image_chooser_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from django.test import TestCase, TransactionTestCase, override_settings
from django.urls import reverse, reverse_lazy
from testapp.factories import CustomImageFactory
from wagtail import VERSION as WAGTAIL_VERSION
from wagtail.test.utils import WagtailTestUtils

from .utils import TEST_ASSET_ID
Expand Down Expand Up @@ -40,18 +41,20 @@ def test_creates_image_if_asset_id_not_recognised(self):
# Assertions
create_object_mock.assert_called_once()
self.assertEqual(response.status_code, 200)
self.assertEqual(
response.json(),
{
"step": "chosen",
"result": {
"id": str(image.id),
"title": image.title,
"preview": mock.ANY,
"edit_url": reverse("wagtailimages:edit", args=[image.id]),
},
expected_json = {
"step": "chosen",
"result": {
"id": str(image.id),
"title": image.title,
"preview": mock.ANY,
"edit_url": reverse("wagtailimages:edit", args=[image.id]),
},
)
}

if WAGTAIL_VERSION >= (7, 0):
expected_json["result"].update({"default_alt_text": image.title})

self.assertEqual(response.json(), expected_json)

@mock.patch("wagtail_bynder.views.image.ImageChosenView.update_object")
def test_uses_existing_image_without_updating(self, update_object_mock):
Expand All @@ -67,18 +70,20 @@ def test_uses_existing_image_without_updating(self, update_object_mock):

# Check response content
self.assertEqual(response.status_code, 200)
self.assertEqual(
response.json(),
{
"step": "chosen",
"result": {
"id": str(image.id),
"title": image.title,
"preview": mock.ANY,
"edit_url": reverse("wagtailimages:edit", args=[image.id]),
},
expected_json = {
"step": "chosen",
"result": {
"id": str(image.id),
"title": image.title,
"preview": mock.ANY,
"edit_url": reverse("wagtailimages:edit", args=[image.id]),
},
)
}

if WAGTAIL_VERSION >= (7, 0):
expected_json["result"].update({"default_alt_text": image.title})

self.assertEqual(response.json(), expected_json)

@override_settings(BYNDER_SYNC_EXISTING_IMAGES_ON_CHOOSE=True)
@mock.patch("wagtail_bynder.views.image.ImageChosenView.update_object")
Expand All @@ -94,15 +99,17 @@ def test_uses_existing_image_and_updates_it(self, update_object_mock):

# Check response content
self.assertEqual(response.status_code, 200)
self.assertEqual(
response.json(),
{
"step": "chosen",
"result": {
"id": str(image.id),
"title": image.title,
"preview": mock.ANY,
"edit_url": reverse("wagtailimages:edit", args=[image.id]),
},
expected_json = {
"step": "chosen",
"result": {
"id": str(image.id),
"title": image.title,
"preview": mock.ANY,
"edit_url": reverse("wagtailimages:edit", args=[image.id]),
},
)
}

if WAGTAIL_VERSION >= (7, 0):
expected_json["result"].update({"default_alt_text": image.title})

self.assertEqual(response.json(), expected_json)
Loading