Skip to content

Commit 075d745

Browse files
django 4.2 support added, python 3.10 support added. (#87)
1 parent 05ade78 commit 075d745

20 files changed

+63
-261
lines changed

.github/workflows/lint.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ jobs:
1212
- name: Set up Python
1313
uses: actions/setup-python@v2
1414
with:
15-
python-version: 3.8
15+
python-version: '3.10'
1616
- name: Install flake8
1717
run: pip install --upgrade flake8
1818
- name: Run flake8
@@ -29,7 +29,7 @@ jobs:
2929
- name: Set up Python
3030
uses: actions/setup-python@v2
3131
with:
32-
python-version: 3.8
32+
python-version: '3.10'
3333
- run: python -m pip install isort
3434
- name: isort
3535
uses: liskin/gh-problem-matcher-wrap@v1

.github/workflows/test.yml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ jobs:
1010
strategy:
1111
fail-fast: false
1212
matrix:
13-
python-version: [ 3.8, 3.9, ] # latest release minus two
13+
python-version: [ 3.8, 3.9, '3.10' ] # latest release minus two
1414
requirements-file: [
1515
dj32_cms40.txt,
16+
dj42_cms40.txt,
1617
]
1718
os: [
1819
ubuntu-20.04,
@@ -42,9 +43,10 @@ jobs:
4243
strategy:
4344
fail-fast: false
4445
matrix:
45-
python-version: [ 3.8, 3.9, ] # latest release minus two
46+
python-version: [ 3.8, 3.9, '3.10' ] # latest release minus two
4647
requirements-file: [
4748
dj32_cms40.txt,
49+
dj42_cms40.txt,
4850
]
4951

5052
steps:

CHANGELOG.rst

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ Changelog
44

55
Unreleased
66
==========
7+
* Python 3.10 support added
8+
* Django 4.2 support added
9+
* Django < 3.2 support removed
10+
711

812
1.1.0 (2022-02-22)
913
==================

djangocms_url_manager/admin.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ class UrlAdmin(*url_admin_classes):
4444
def get_urls(self):
4545
return urlpatterns + super().get_urls()
4646

47+
@admin.display(
48+
description="URL"
49+
)
4750
def get_model_url(self, obj):
4851
return obj.get_url(obj.site)
4952

@@ -62,8 +65,6 @@ def get_search_results(self, request, queryset, search_term):
6265

6366
return queryset, use_distinct
6467

65-
get_model_url.short_description = "URL"
66-
6768
def change_view(self, request, object_id, form_url='', extra_context=None):
6869
extra_context = extra_context or {}
6970
# Provide additional context to the changeform

djangocms_url_manager/apps.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,8 @@
11
from django.apps import AppConfig
2-
from django.conf import settings
32
from django.utils.translation import gettext_lazy as _
43

54

65
class UrlManagerConfig(AppConfig):
76
name = "djangocms_url_manager"
87
verbose_name = _("django CMS URL Manager")
98
url_manager_supported_models = {}
10-
11-
def ready(self):
12-
from .compat import CMS_36
13-
14-
if CMS_36:
15-
from .utils import parse_settings
16-
17-
self.url_manager_supported_models = parse_settings(
18-
settings, "URL_MANAGER_SUPPORTED_MODELS"
19-
)

djangocms_url_manager/compat.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
1-
from distutils.version import LooseVersion
1+
import django
22

3-
import cms
3+
from packaging.version import Version
44

5-
6-
CMS_VERSION = cms.__version__
7-
8-
CMS_36 = LooseVersion(CMS_VERSION) < LooseVersion("3.7")
5+
DJANGO_4_1 = Version(django.get_version()) < Version('4.2')
96

107

118
def get_page_placeholders(page, language=None):

djangocms_url_manager/urls.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
1-
from django.urls import re_path
1+
from django.urls import path
22

33
from . import constants, views
44

55

66
urlpatterns = [
7-
re_path(
8-
r"^select2/$",
7+
path(
8+
"select2/",
99
views.ContentTypeObjectSelect2View.as_view(),
1010
name=constants.SELECT2_CONTENT_TYPE_OBJECT_URL_NAME,
1111
),
12-
re_path(
13-
r"^select2/urls/$", views.UrlSelect2View.as_view(), name=constants.SELECT2_URLS
12+
path(
13+
"select2/urls/", views.UrlSelect2View.as_view(), name=constants.SELECT2_URLS
1414
),
1515
]

djangocms_url_manager/utils.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@
1010

1111
from cms.models import PageContent
1212

13-
from djangocms_url_manager.compat import CMS_36
14-
1513

1614
def parse_settings(config, attr_name):
1715
url_manager_supported_models = OrderedDict()
1816
if not hasattr(config, attr_name):
1917
raise ImproperlyConfigured(
2018
"{} must be defined in your {}".format(
21-
attr_name, "settings" if CMS_36 else "cms_config"
19+
attr_name, "cms_config"
2220
)
2321
)
2422
models = getattr(config, attr_name)

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55

66
INSTALL_REQUIREMENTS = [
7-
"Django>=2.2,<4.0",
7+
"Django>=3.2,<5.0",
88
"django-cms",
99
"djangocms-attributes-field",
1010
]

tests/__init__.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from djangocms_url_manager.compat import DJANGO_4_1
2+
3+
4+
if DJANGO_4_1: # TODO: remove when dropping support for Django < 4.2
5+
from django.test.testcases import TransactionTestCase
6+
7+
TransactionTestCase.assertQuerySetEqual = TransactionTestCase.assertQuerysetEqual

tests/base.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
from cms.utils.urlutils import admin_reverse
1010

1111
from djangocms_url_manager.admin import UrlAdmin
12-
from djangocms_url_manager.compat import CMS_36, get_page_placeholders
12+
from djangocms_url_manager.compat import get_page_placeholders
1313
from djangocms_url_manager.constants import (
1414
SELECT2_CONTENT_TYPE_OBJECT_URL_NAME,
1515
SELECT2_URLS,
@@ -148,9 +148,6 @@ def _create_page(self, title, language=None, site=None, published=True, **kwargs
148148
if self.is_versioning_enabled() and not kwargs.get("created_by"):
149149
kwargs["created_by"] = self.superuser
150150

151-
if CMS_36 and published:
152-
kwargs["published"] = True
153-
154151
page = create_page(
155152
title=title,
156153
language=language,

tests/requirements/dj32_cms40.txt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
11
-r requirements_base.txt
22

33
Django>=3.2,<4.0
4+
5+
# Unreleased django 3.2 & django-cms 4.0 compatible packages
6+
https://github.com/django-cms/django-cms/tarball/release/4.0.1.x#egg=django-cms
7+
https://github.com/django-cms/djangocms-versioning/tarball/1.2.2#egg=djangocms-versioning
8+
https://github.com/django-cms/djangocms-moderation/tarball/2.1.5#egg=djangocms-moderation

tests/requirements/dj42_cms40.txt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
-r requirements_base.txt
2+
3+
Django>=4.2,<5.0
4+
5+
# Unreleased django 4.2 compatible packages
6+
https://github.com/django-cms/django-cms/tarball/release/4.0.1.x#egg=django-cms
7+
https://github.com/joshyu/djangocms-versioning/tarball/feat/django-42-compatible#egg=djangocms-versioning
8+
https://github.com/FidelityInternational/djangocms-moderation/tarball/feature/django-42-compat#egg=djangocms-moderation
Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11
coverage
22
django-app-helper
33
django-classy-tags
4-
django-formtools==2.2
4+
django-formtools>=2.4.1
55
django-sekizai
66
django-treebeard
77
djangocms-admin-style
88
djangocms-attributes-field
99
factory-boy
1010
flake8
1111
isort
12-
pyflakes>=2.1.1
13-
14-
# Unreleased django-cms 4.0 compatible packages
15-
https://github.com/django-cms/django-cms/tarball/develop-4#egg=django-cms
16-
https://github.com/django-cms/djangocms-versioning/tarball/master#egg=djangocms-versioning
17-
https://github.com/django-cms/djangocms-moderation/tarball/master#egg=djangocms-moderation
12+
pyflakes

tests/test_cms_config.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from importlib import reload
2-
from unittest import skipIf
32
from unittest.mock import Mock
43

54
from django.conf import settings
@@ -9,7 +8,6 @@
98
from cms.models import Page
109
from cms.test_utils.testcases import CMSTestCase
1110

12-
from djangocms_url_manager.compat import CMS_36
1311
from djangocms_url_manager.test_utils.polls.models import Poll, PollContent
1412
from djangocms_url_manager.test_utils.polls.utils import (
1513
get_all_poll_content_objects,
@@ -22,7 +20,6 @@
2220
)
2321

2422

25-
@skipIf(CMS_36, "Test relevant only for CMS>=4.0")
2623
class UrlManagerCMSExtensionTestCase(CMSTestCase):
2724
def test_missing_cms_config_url_manager_supported_models_attribute(self):
2825
"""Tests, if the url_manager_supported_models attribute has not been specified,
@@ -145,7 +142,6 @@ def test_url_manager_search_helpers(self):
145142
)
146143

147144

148-
@skipIf(CMS_36, "Test relevant only for CMS>=4.0")
149145
class NavigationSettingTestCase(TestCase):
150146

151147
def tearDownClass():

tests/test_settings.py

Lines changed: 0 additions & 87 deletions
This file was deleted.

tests/test_utils.py

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,20 @@
1-
from unittest import skipIf, skipUnless
2-
3-
from django.apps import apps
4-
from django.test import override_settings
5-
61
from cms.models import Page, Placeholder
72

8-
from djangocms_url_manager.compat import CMS_36
93
from djangocms_url_manager.test_utils.polls.models import PollContent
10-
from djangocms_url_manager.test_utils.polls.utils import (
11-
get_all_poll_content_objects,
12-
get_published_pages_objects,
13-
)
4+
from djangocms_url_manager.test_utils.polls.utils import get_all_poll_content_objects
145
from djangocms_url_manager.utils import is_model_supported, supported_models
156

167
from .base import BaseUrlTestCase
178

189

1910
class UtilsTestCase(BaseUrlTestCase):
20-
@skipUnless(CMS_36, "Test relevant only for CMS<4.0")
21-
def test_supported_models_for_cms36(self):
22-
apps.get_app_config("djangocms_url_manager").ready()
23-
self.assertDictEqual(
24-
supported_models(),
25-
{
26-
Page: get_published_pages_objects,
27-
PollContent: get_all_poll_content_objects,
28-
},
29-
)
3011

31-
@skipIf(CMS_36, "Test relevant only for CMS>=4.0")
32-
def test_supported_models_for_cms40(self):
12+
def test_supported_models(self):
3313
self.assertDictEqual(
3414
supported_models(), {Page: None, PollContent: get_all_poll_content_objects}
3515
)
3616

37-
@skipUnless(CMS_36, "Test relevant only for CMS<4.0")
38-
@override_settings(
39-
URL_MANAGER_SUPPORTED_MODELS=[
40-
("cms.Page", get_published_pages_objects),
41-
("polls.PollContent", get_all_poll_content_objects),
42-
]
43-
)
44-
def test_is_model_available_method_for_cms36(self):
45-
apps.get_app_config("djangocms_url_manager").ready()
46-
self.assertTrue(is_model_supported(PollContent))
47-
self.assertTrue(is_model_supported(Page))
48-
self.assertFalse(is_model_supported(Placeholder))
49-
50-
@skipIf(CMS_36, "Test relevant only for CMS>=4.0")
51-
def test_is_model_available_method_for_cms40(self):
17+
def test_is_model_available_method(self):
5218
self.assertTrue(is_model_supported(PollContent))
5319
self.assertTrue(is_model_supported(Page))
5420
self.assertFalse(is_model_supported(Placeholder))

0 commit comments

Comments
 (0)