Skip to content
Open
Show file tree
Hide file tree
Changes from 4 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
51 changes: 21 additions & 30 deletions tests/test_image_chooser_views.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,18 +40,15 @@ def test_creates_image_if_asset_id_not_recognised(self):
# Assertions
create_object_mock.assert_called_once()
self.assertEqual(response.status_code, 200)
response_json = response.json()
self.assertEqual(response_json["step"], "chosen")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

question: why not leave the full dict?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No reason why I can't, cursor suggested the code change and I liked the suggestion. Do you prefer it the dict way? Happy to change it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's keept it at full dict. Fewer surprises.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found that we needed to consider dict differences between 6.3 and 7.0 so there's a little more work here: 78d89dd

result = response_json["result"]
self.assertEqual(result["id"], str(image.id))
self.assertEqual(result["title"], image.title)
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]),
},
},
result["edit_url"], reverse("wagtailimages:edit", args=[image.id])
)
self.assertIn("preview", result)

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

# Check response content
self.assertEqual(response.status_code, 200)
response_json = response.json()
self.assertEqual(response_json["step"], "chosen")
result = response_json["result"]
self.assertEqual(result["id"], str(image.id))
self.assertEqual(result["title"], image.title)
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]),
},
},
result["edit_url"], reverse("wagtailimages:edit", args=[image.id])
)
self.assertIn("preview", result)

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

# Check response content
self.assertEqual(response.status_code, 200)
response_json = response.json()
self.assertEqual(response_json["step"], "chosen")
result = response_json["result"]
self.assertEqual(result["id"], str(image.id))
self.assertEqual(result["title"], image.title)
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]),
},
},
result["edit_url"], reverse("wagtailimages:edit", args=[image.id])
)
self.assertIn("preview", result)
Loading