Skip to content

Commit d6677a3

Browse files
committed
Update tests
1 parent 3792135 commit d6677a3

18 files changed

+443
-24
lines changed

README.rst

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,34 @@ Run::
5858
to perform the application's database migrations.
5959

6060

61+
=============
62+
Configuration
63+
=============
64+
65+
django CMS Alias provides several Django settings to control its behavior:
66+
67+
**STATIC_ALIAS_EDITING_ENABLED**
68+
Default: ``True``
69+
70+
Controls whether static aliases can be edited directly on frontend editable objects
71+
(such as pages) that include the ``{% static_alias %}`` template tag. When set to ``False``,
72+
static aliases will only be visible in the structure board but not editable in context.
73+
74+
**VERSIONING_ALIAS_MODELS_ENABLED**
75+
Default: ``True`` (if djangocms-versioning is installed)
76+
77+
Enables versioning support for alias models when djangocms-versioning is available. When enabled,
78+
aliases support draft/published workflows, version history, and proper content lifecycle management.
79+
Set to ``False`` to disable versioning for aliases even if djangocms-versioning is installed.
80+
81+
**MODERATING_ALIAS_MODELS_ENABLED**
82+
Default: ``True`` (if djangocms-moderation is installed)
83+
84+
Enables moderation workflows for alias models when djangocms-moderation is available. When enabled,
85+
aliases can be subject to approval workflows before publication. Set to ``False`` to disable moderation
86+
for aliases even if djangocms-moderation is installed.
87+
88+
6189
=====
6290
Usage
6391
=====

djangocms_alias/rendering.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from django.template.response import TemplateResponse
1414
from django.utils.safestring import mark_safe
1515

16-
from djangocms_alias.templatetags.djangocms_alias_tags import StaticAlias
16+
from djangocms_alias.templatetags.djangocms_alias_tags import StaticAlias, _static_alias_editing_enabled
1717

1818
from .models import Alias, AliasContent
1919

@@ -28,6 +28,11 @@ def render_alias_content(request: HttpRequest, alias_content: str) -> TemplateRe
2828

2929

3030
def get_declared_static_aliases(template: str) -> list["DeclaredStaticAlias"]:
31+
"""Scan a template for static_alias declarations.
32+
Returns a list of DeclaredStaticAlias namedtuples.
33+
"""
34+
if _static_alias_editing_enabled is False:
35+
return []
3136
compiled_template = get_template(template)
3237
nodes = _scan_placeholders((_get_nodelist(compiled_template)), node_class=StaticAlias)
3338
placeholders = [node.get_declaration() for node in nodes]

djangocms_alias/templatetags/djangocms_alias_tags.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from cms.utils.placeholder import validate_placeholder_name
1010
from cms.utils.urlutils import add_url_parameters, admin_reverse
1111
from django import template
12+
from django.conf import settings
1213

1314
from ..constants import DEFAULT_STATIC_ALIAS_CATEGORY_NAME, USAGE_ALIAS_URL_NAME
1415
from ..models import Alias, AliasContent, Category
@@ -18,15 +19,17 @@
1819

1920
DeclaredStaticAlias = namedtuple("DeclaredStaticAlias", ["static_code", "site"])
2021

22+
_static_alias_editing_enabled = getattr(settings, "STATIC_ALIAS_EDITING_ENABLED", True)
23+
2124

2225
@register.simple_tag(takes_context=False)
23-
def get_alias_usage_view_url(alias, **kwargs):
26+
def get_alias_usage_view_url(alias, **kwargs) -> str:
2427
url = admin_reverse(USAGE_ALIAS_URL_NAME, args=[alias.pk])
2528
return add_url_parameters(url, **ChainMap(kwargs))
2629

2730

2831
@register.filter()
29-
def admin_view_url(obj):
32+
def admin_view_url(obj) -> str:
3033
if obj and is_editable_model(obj.__class__):
3134
# Is obj frontend-editable?
3235
return get_object_preview_url(obj)
@@ -41,12 +44,12 @@ def admin_view_url(obj):
4144

4245

4346
@register.filter()
44-
def verbose_name(obj):
47+
def verbose_name(obj) -> str:
4548
return obj._meta.verbose_name
4649

4750

4851
@register.simple_tag(takes_context=True)
49-
def render_alias(context, instance):
52+
def render_alias(context, instance) -> str:
5053
request = context["request"]
5154

5255
toolbar = get_toolbar_from_request(request)
@@ -83,7 +86,7 @@ class StaticAlias(Tag):
8386
],
8487
)
8588

86-
def _get_alias(self, request, static_code, extra_bits):
89+
def _get_alias(self, request, static_code, extra_bits) -> Alias | None:
8790
alias_filter_kwargs = {
8891
"static_code": static_code,
8992
}
@@ -129,7 +132,7 @@ def _get_alias(self, request, static_code, extra_bits):
129132
alias._content_cache[self.language] = alias_content
130133
return alias
131134

132-
def render_tag(self, context, static_code, extra_bits, nodelist=None):
135+
def render_tag(self, context, static_code, extra_bits, nodelist=None) -> str:
133136
request = context.get("request")
134137

135138
if not static_code or not request:
@@ -158,16 +161,18 @@ def render_tag(self, context, static_code, extra_bits, nodelist=None):
158161
context=context,
159162
nodelist=nodelist,
160163
use_cache=True,
161-
editable=editable,
164+
editable=editable and _static_alias_editing_enabled,
162165
)
163-
if self.toolbar.edit_mode_active and not editable:
166+
if self.toolbar.edit_mode_active and not editable and _static_alias_editing_enabled:
164167
# Also non-editable placeholders need interactivity in the structure board
165168
content += renderer.get_placeholder_toolbar_js(placeholder)
166169
return content
167170
return ""
168171

169-
def get_declaration(self):
172+
def get_declaration(self) -> DeclaredStaticAlias | None:
170173
"""Used to identify static_alias declarations"""
174+
if not _static_alias_editing_enabled:
175+
return None
171176
static_code = str(self.kwargs["static_code"].var).strip('"').strip("'")
172177
site = False
173178
if isinstance(self.kwargs["extra_bits"], ListValue):

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ classifiers = [
2222
"Framework :: Django :: 5.0",
2323
"Framework :: Django :: 5.1",
2424
"Framework :: Django :: 5.2",
25+
"Framework :: Django :: 6.0",
2526
"Framework :: Django CMS :: 5.0",
2627
"Intended Audience :: Developers",
2728
"Operating System :: OS Independent",

tests/requirements/compile.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
"py311-dj52-cms50": [],
1111
"py312-dj52-cms50": [],
1212
"py313-dj52-cms50": [],
13+
"py312-dj60-cms50": [],
14+
"py313-dj60-cms50": [],
1315
"py313-djmain-cmsdev": [],
1416
"py313-djmain-cms50": [],
1517
}
@@ -20,6 +22,7 @@
2022
"dj50": "Django>=5.0,<5.1",
2123
"dj51": "Django>=5.1,<5.2",
2224
"dj52": "Django>=5.2,<5.3",
25+
"dj60": "Django>=6.0a1,<6.1",
2326
}
2427

2528
cms_dict = {

tests/requirements/py311-dj52-cms50-default.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ coverage[toml]==7.8.0
1414
# via
1515
# -r requirements.in
1616
# pytest-cov
17-
django==5.2.5
17+
django==5.2.6
1818
# via
1919
# django-classy-tags
2020
# django-cms
@@ -29,7 +29,7 @@ django-classy-tags==4.1.0
2929
# -r requirements.in
3030
# django-cms
3131
# django-sekizai
32-
django-cms==5.0.2
32+
django-cms==5.0.3
3333
# via djangocms-versioning
3434
django-formtools==2.5.1
3535
# via django-cms

tests/requirements/py311-dj52-cms50-versioning.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ coverage[toml]==7.8.0
1414
# via
1515
# -r requirements.in
1616
# pytest-cov
17-
django==5.2.5
17+
django==5.2.6
1818
# via
1919
# django-classy-tags
2020
# django-cms
@@ -29,7 +29,7 @@ django-classy-tags==4.1.0
2929
# -r requirements.in
3030
# django-cms
3131
# django-sekizai
32-
django-cms==5.0.2
32+
django-cms==5.0.3
3333
# via djangocms-versioning
3434
django-formtools==2.5.1
3535
# via django-cms

tests/requirements/py312-dj52-cms50-default.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ coverage[toml]==7.8.0
1414
# via
1515
# -r requirements.in
1616
# pytest-cov
17-
django==5.2.5
17+
django==5.2.6
1818
# via
1919
# django-classy-tags
2020
# django-cms
@@ -29,7 +29,7 @@ django-classy-tags==4.1.0
2929
# -r requirements.in
3030
# django-cms
3131
# django-sekizai
32-
django-cms==5.0.2
32+
django-cms==5.0.3
3333
# via djangocms-versioning
3434
django-formtools==2.5.1
3535
# via django-cms

tests/requirements/py312-dj52-cms50-versioning.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ coverage[toml]==7.8.0
1414
# via
1515
# -r requirements.in
1616
# pytest-cov
17-
django==5.2.5
17+
django==5.2.6
1818
# via
1919
# django-classy-tags
2020
# django-cms
@@ -29,7 +29,7 @@ django-classy-tags==4.1.0
2929
# -r requirements.in
3030
# django-cms
3131
# django-sekizai
32-
django-cms==5.0.2
32+
django-cms==5.0.3
3333
# via djangocms-versioning
3434
django-formtools==2.5.1
3535
# via django-cms
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
#
2+
# This file is autogenerated by pip-compile with Python 3.12
3+
# by the following command:
4+
#
5+
# requirements/compile.py
6+
#
7+
asgiref==3.9.1
8+
# via django
9+
beautifulsoup4==4.13.5
10+
# via bs4
11+
bs4==0.0.2
12+
# via -r requirements.in
13+
coverage[toml]==7.10.6
14+
# via
15+
# -r requirements.in
16+
# pytest-cov
17+
django==6.0a1
18+
# via
19+
# django-classy-tags
20+
# django-cms
21+
# django-formtools
22+
# django-parler
23+
# django-sekizai
24+
# django-treebeard
25+
# djangocms-admin-style
26+
# djangocms-versioning
27+
django-classy-tags==4.1.0
28+
# via
29+
# -r requirements.in
30+
# django-cms
31+
# django-sekizai
32+
django-cms==5.0.3
33+
# via djangocms-versioning
34+
django-formtools==2.5.1
35+
# via django-cms
36+
django-fsm==2.8.2
37+
# via
38+
# -r requirements.in
39+
# djangocms-versioning
40+
django-parler==2.3
41+
# via -r requirements.in
42+
django-sekizai==4.1.0
43+
# via
44+
# -r requirements.in
45+
# django-cms
46+
django-treebeard==4.7.1
47+
# via django-cms
48+
djangocms-admin-style==3.3.1
49+
# via django-cms
50+
djangocms-versioning==2.4.0
51+
# via -r requirements.in
52+
flake8==7.3.0
53+
# via -r requirements.in
54+
iniconfig==2.1.0
55+
# via pytest
56+
isort==6.0.1
57+
# via -r requirements.in
58+
mccabe==0.7.0
59+
# via flake8
60+
packaging==25.0
61+
# via
62+
# django-cms
63+
# djangocms-versioning
64+
# pytest
65+
pluggy==1.6.0
66+
# via
67+
# pytest
68+
# pytest-cov
69+
pycodestyle==2.14.0
70+
# via flake8
71+
pyflakes==3.4.0
72+
# via
73+
# -r requirements.in
74+
# flake8
75+
pygments==2.19.2
76+
# via pytest
77+
pytest==8.4.2
78+
# via
79+
# pytest-cov
80+
# pytest-django
81+
pytest-cov==7.0.0
82+
# via -r requirements.in
83+
pytest-django==4.11.1
84+
# via -r requirements.in
85+
soupsieve==2.8
86+
# via beautifulsoup4
87+
sqlparse==0.5.3
88+
# via django
89+
typing-extensions==4.15.0
90+
# via beautifulsoup4
91+
92+
# The following packages are considered to be unsafe in a requirements file:
93+
setuptools==80.9.0
94+
# via django-cms

0 commit comments

Comments
 (0)