Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat: migrate django CMS 4.1 compatible #6

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
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
7 changes: 4 additions & 3 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,11 @@ jobs:
strategy:
fail-fast: false
matrix:
python-version: [ 3.8, 3.9, '3.10'] # latest release minus two
python-version: [ 3.9, '3.10'] # latest release minus two
requirements-file: [
django-3_2.txt,
django-4_2.txt,
django-3_2_cms40.txt,
django-4_2_cms40.txt,
django-4_2_cms41.txt,
]

steps:
Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Changelog

unreleased
==========
* add support for Django CMS 4.1
* fix `Expiry Date Range` filter label
* fix monkeypatch scripts


1.6.1 (2024-05-31)
Expand Down
2 changes: 1 addition & 1 deletion djangocms_content_expiry/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def get_rangefilter_expires_default(self, *args, **kwargs):
return get_rangefilter_expires_default()

def get_rangefilter_expires_title(self, *args, **kwargs):
return _("By Expiry Date Range")
return _("Expiry Date Range")

@admin.display(
description=_('Title')
Expand Down
44 changes: 24 additions & 20 deletions djangocms_content_expiry/monkeypatch/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@

from djangocms_moderation import admin as moderation_admin
from djangocms_moderation.models import ModerationCollection, ModerationRequest
from djangocms_versioning import admin
from djangocms_versioning import admin as versioning_admin
from djangocms_versioning.models import Version

from djangocms_content_expiry.constants import CONTENT_EXPIRY_COMPLIANCE_FIELD_LABEL
from djangocms_content_expiry.models import ContentExpiry
Expand All @@ -14,22 +15,25 @@ def _get_expiry_link(self, obj, request):
"""
Generate a content expiry link for the Versioning Admin
"""
expiry_url = reverse(
"admin:{app}_{model}_change".format(
app=ContentExpiry._meta.app_label, model=ContentExpiry._meta.model_name
),
args=(obj.contentexpiry.pk,),
)
return render_to_string(
'djangocms_content_expiry/admin/icons/additional_content_settings_icon.html',
{
"url": f"{expiry_url}?_to_field=id&_popup=1",
"field_id": f"contentexpiry_{obj.pk}",
}
)
try:
expiry_url = reverse(
"admin:{app}_{model}_change".format(
app=ContentExpiry._meta.app_label, model=ContentExpiry._meta.model_name
),
args=(obj.contentexpiry.pk,),
)
return render_to_string(
'djangocms_content_expiry/admin/icons/additional_content_settings_icon.html',
{
"url": f"{expiry_url}?_to_field=id&_popup=1",
"field_id": f"contentexpiry_{obj.pk}",
}
)
except Version.contentexpiry.RelatedObjectDoesNotExist:
return ''


admin.VersionAdmin._get_expiry_link = _get_expiry_link
versioning_admin.VersionAdmin._get_expiry_link = _get_expiry_link


def get_state_actions(func):
Expand All @@ -43,7 +47,7 @@ def inner(self, *args, **kwargs):
return inner


admin.VersionAdmin.get_state_actions = get_state_actions(admin.VersionAdmin.get_state_actions)
versioning_admin.VersionAdmin.get_state_actions = get_state_actions(versioning_admin.VersionAdmin.get_state_actions)


def compliance_number(self, obj):
Expand All @@ -54,22 +58,22 @@ def compliance_number(self, obj):


compliance_number.short_description = CONTENT_EXPIRY_COMPLIANCE_FIELD_LABEL
admin.VersionAdmin.compliance_number = compliance_number
versioning_admin.VersionAdmin.compliance_number = compliance_number


def get_list_display(func):
"""
Register the compliance number field with the Versioning Admin
"""
def inner(self, request):
list_display = func(self, request)
list_display = list(func(self, request))
created_by_index = list_display.index('created_by')
return list_display[:created_by_index] + ('compliance_number',) + list_display[created_by_index:]
return list_display[:created_by_index] + ['compliance_number'] + list_display[created_by_index:]

return inner


admin.VersionAdmin.get_list_display = get_list_display(admin.VersionAdmin.get_list_display)
versioning_admin.VersionAdmin.get_list_display = get_list_display(versioning_admin.VersionAdmin.get_list_display)


def _get_urls(func):
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{% load static i18n %}

<a class="btn cms-versioning-action-btn related-widget-wrapper-link" data-popup="yes" id="additional_content_settings_expiry_id_{{ field_id }}" href="{{ url }}" title="{% trans 'Additional Content Settings' %}">
<img src="{% static 'djangocms_content_expiry/svg/file.svg' %}">
<a class="btn cms-action-btn related-widget-wrapper-link" data-popup="yes" id="additional_content_settings_expiry_id_{{ field_id }}" href="{{ url }}" title="{% trans 'Additional Content Settings' %}">
<img src="{% static 'djangocms_content_expiry/svg/file.svg' %}" style="width: 16.8px; height: 16.8px; margin-inline-end: 10px;">
</a>
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
{% load static i18n %}
<a class="btn cms-moderation-action-btn js-moderation-action related-widget-wrapper-link cms-versioning-action-btn" data-popup="yes" id="change_content_expiry_id_{{ field_id }}" href="{{ url }}" title="{% trans 'Additional Content Settings' %}"><span class="svg-juxtaposed-font"><img src="{% static 'djangocms_content_expiry/svg/file.svg' %}" /></span></a>
<a class="btn cms-moderation-action-btn js-moderation-action related-widget-wrapper-link cms-action-btn" data-popup="yes" id="change_content_expiry_id_{{ field_id }}" href="{{ url }}" title="{% trans 'Additional Content Settings' %}"><span class="svg-juxtaposed-font"><img src="{% static 'djangocms_content_expiry/svg/file.svg' %}" /></span></a>
1 change: 1 addition & 0 deletions test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
"djangocms_content_expiry": None,
},
"CMS_PERMISSION": True,
"CMS_CONFIRM_VERSION4": True,
"LANGUAGES": (
("en", "English"),
("de", "German"),
Expand Down
31 changes: 31 additions & 0 deletions tests/requirements/django-4_2_cms41.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@

argparse
beautifulsoup4
coverage<5
dj-database-url
django-admin-rangefilter
django-app-helper
django-classy-tags>=0.7.2
django-formtools
django-polymorphic
django-sekizai>=0.7
django-treebeard>=4.3
djangocms-admin-style>=1.5
djangocms-text-ckeditor>=5.1.5
factory-boy
freezegun
iptools
lxml
mock>=2.0.0
pyenchant
pyflakes==1.1.0
python-coveralls>2.5.0
sphinx==1.8.5
sphinxcontrib-spelling<7.0.0 # restriction for py35 tests
unittest-xml-reporting==1.11.0

django>=4.2,<5.0
django-cms>=4.1.0
djangocms-versioning==2.1.0
https://github.com/django-cms/djangocms-alias/tarball/master#egg=djangocms-alias
https://github.com/django-cms/djangocms-moderation/tarball/master#egg=djangocms-moderation
8 changes: 4 additions & 4 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
envlist =
flake8
isort
py{38,39,310}-dj{32,42}-sqlite-cms40
py{39,310}-dj{32,42}-sqlite-cms{40,41}

skip_missing_interpreters=True

Expand All @@ -13,11 +13,11 @@ deps =

dj32: Django>=3.2,<4.0
dj42: Django>=4.2,<5.0
dj32: -r{toxinidir}/tests/requirements/django-3_2.txt
dj42: -r{toxinidir}/tests/requirements/django-4_2.txt
dj32_cms40: -r{toxinidir}/tests/requirements/django-3_2_cms40.txt
dj42_cms40: -r{toxinidir}/tests/requirements/django-4_2_cms40.txt
dj42_cms41: -r{toxinidir}/tests/requirements/django-4_2_cms41.txt

basepython =
py38: python3.8
py39: python3.9
py310: python3.10

Expand Down
Loading