From a84707b50775d77b5d7ec2e3a99a71bacab26d3c Mon Sep 17 00:00:00 2001 From: Vipul Narang Date: Tue, 7 May 2024 15:21:01 +0530 Subject: [PATCH 1/8] Added site field in models n site filter in admin --- CHANGELOG.rst | 2 ++ djangocms_snippet/admin.py | 1 + djangocms_snippet/forms.py | 1 + .../migrations/0013_snippet_site.py | 20 +++++++++++++++++++ djangocms_snippet/models.py | 2 ++ 5 files changed, 26 insertions(+) create mode 100644 djangocms_snippet/migrations/0013_snippet_site.py diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a1056c19..4a148620 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,8 @@ Changelog Unreleased ========== +* feat: Added site field in Snippet model +* feat: Added site filter in Snippet Admin * add support for python 3.10 * add support for django 4.2 * drop support for django < 3.2 diff --git a/djangocms_snippet/admin.py b/djangocms_snippet/admin.py index de55dc41..d8b1dadb 100644 --- a/djangocms_snippet/admin.py +++ b/djangocms_snippet/admin.py @@ -32,6 +32,7 @@ @admin.register(Snippet) class SnippetAdmin(*snippet_admin_classes): list_display = ('name',) + list_filter = ['site'] search_fields = ['name'] change_form_template = 'djangocms_snippet/admin/change_form.html' text_area_attrs = { diff --git a/djangocms_snippet/forms.py b/djangocms_snippet/forms.py index 8a0d97b6..a616f265 100644 --- a/djangocms_snippet/forms.py +++ b/djangocms_snippet/forms.py @@ -27,6 +27,7 @@ class Meta: "slug", "snippet_grouper", "template", + "site", ) def __init__(self, *args, **kwargs): diff --git a/djangocms_snippet/migrations/0013_snippet_site.py b/djangocms_snippet/migrations/0013_snippet_site.py new file mode 100644 index 00000000..fe945477 --- /dev/null +++ b/djangocms_snippet/migrations/0013_snippet_site.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.11 on 2024-05-07 03:43 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('sites', '0002_alter_domain_unique'), + ('djangocms_snippet', '0012_auto_20210915_0721'), + ] + + operations = [ + migrations.AddField( + model_name='snippet', + name='site', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sites.site'), + ), + ] diff --git a/djangocms_snippet/models.py b/djangocms_snippet/models.py index b7baea5f..20a1578d 100644 --- a/djangocms_snippet/models.py +++ b/djangocms_snippet/models.py @@ -1,4 +1,5 @@ from django.conf import settings +from django.contrib.sites.models import Site from django.db import models from django.shortcuts import reverse from django.utils.translation import gettext_lazy as _ @@ -70,6 +71,7 @@ class Snippet(models.Model): default='', max_length=255, ) + site = models.ForeignKey(Site, on_delete=models.CASCADE, null=True, blank=True) def __str__(self): return self.name From 0b61b11fa0360430c528674091e0ca3423eae42b Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 7 May 2024 09:52:13 +0000 Subject: [PATCH 2/8] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- djangocms_snippet/migrations/0013_snippet_site.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/djangocms_snippet/migrations/0013_snippet_site.py b/djangocms_snippet/migrations/0013_snippet_site.py index fe945477..a7948851 100644 --- a/djangocms_snippet/migrations/0013_snippet_site.py +++ b/djangocms_snippet/migrations/0013_snippet_site.py @@ -1,7 +1,7 @@ # Generated by Django 4.2.11 on 2024-05-07 03:43 -from django.db import migrations, models import django.db.models.deletion +from django.db import migrations, models class Migration(migrations.Migration): From 423301e6836d034ce9b4e720faf1df048c1c7a31 Mon Sep 17 00:00:00 2001 From: Vipul Narang Date: Tue, 7 May 2024 16:08:25 +0530 Subject: [PATCH 3/8] updated versioning branch --- tests/requirements/dj42_cms40.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/requirements/dj42_cms40.txt b/tests/requirements/dj42_cms40.txt index 96c85a01..75e2b129 100644 --- a/tests/requirements/dj42_cms40.txt +++ b/tests/requirements/dj42_cms40.txt @@ -4,4 +4,4 @@ Django>=4.2,<5.0 # Unreleased django 4.2 & django-cms 4.0.x compatible packages https://github.com/django-cms/django-cms/tarball/release/4.0.1.x#egg=django-cms -https://github.com/joshyu/djangocms-versioning/tarball/feat/django-42-compatible#egg=djangocms-versioning \ No newline at end of file +https://github.com/django-cms/djangocms-versioning/tarball/support/django-cms-4.0.x#egg=djangocms-versioning From 260da99ba5f7129372a28ebf353848f70e0e9d6b Mon Sep 17 00:00:00 2001 From: Vipul Narang Date: Tue, 14 May 2024 16:17:42 +0530 Subject: [PATCH 4/8] Add test cases and updated the implementation --- djangocms_snippet/admin.py | 8 ++++++++ tests/test_admin.py | 28 +++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/djangocms_snippet/admin.py b/djangocms_snippet/admin.py index d8b1dadb..bf89c7d0 100644 --- a/djangocms_snippet/admin.py +++ b/djangocms_snippet/admin.py @@ -9,6 +9,7 @@ from django.urls import path from django.utils.translation import gettext as _ +from cms.utils import get_current_site from cms.utils.permissions import get_model_permission_codename from .cms_config import SnippetCMSAppConfig @@ -51,6 +52,13 @@ class SnippetAdmin(*snippet_admin_classes): class Meta: model = Snippet + def get_queryset(self, request): + site = get_current_site() + queryset = super().get_queryset(request) + # Filter queryset with current site and no site + queryset = queryset.filter(models.Q(site=site) | models.Q(site=None)) + return queryset + def get_list_display(self, request): list_display = super().get_list_display(request) list_display = list(list_display) diff --git a/tests/test_admin.py b/tests/test_admin.py index d03d2358..638d6945 100644 --- a/tests/test_admin.py +++ b/tests/test_admin.py @@ -1,10 +1,12 @@ from importlib import reload from django.contrib import admin +from django.contrib.sites.models import Site from django.shortcuts import reverse from django.test import RequestFactory, override_settings from cms.test_utils.testcases import CMSTestCase +from cms.utils import get_current_site from djangocms_versioning.models import Version @@ -23,12 +25,36 @@ def setUp(self): html="

This is a test

", snippet_grouper=SnippetGrouper.objects.create(), ) - self.snippet_version = Version.objects.create(content=self.snippet, created_by=self.superuser) + self.snippet_version = Version.objects.create(content=self.snippet, created_by=self.superuser, state='published') self.snippet_admin = snippet_admin.SnippetAdmin(Snippet, admin) self.snippet_admin_request = RequestFactory().get("/admin/djangocms_snippet") self.edit_url = reverse("admin:djangocms_snippet_snippet_change", args=(self.snippet.id,),) self.delete_url = reverse("admin:djangocms_snippet_snippet_delete", args=(self.snippet.id,),) + def test_get_queryset(self): + current_site = get_current_site() + another_site = Site.objects.create(domain='http://www.django-cms.org', name='Django CMS', pk=3) + current_site_snippet = Snippet.objects.create( + name="Test Snippet 1", + slug="test-snippet-one", + html="

This is a test snippet one

", + snippet_grouper=SnippetGrouper.objects.create(), + site=current_site + ) + another_site_snippet= Snippet.objects.create( + name="Test Snippet 2", + slug="test-snippet-two", + html="

This is a test snippet two

", + snippet_grouper=SnippetGrouper.objects.create(), + site=another_site + ) + current_site_snippet_version = Version.objects.create(content=current_site_snippet, created_by=self.superuser, state='published') + another_site_snippet_version = Version.objects.create(content=another_site_snippet, created_by=self.superuser, state='published') + queryset = self.snippet_admin.get_queryset(self.snippet_admin_request) + self.assertIn(current_site_snippet, queryset) # Test for snippet of current site + self.assertIn(self.snippet, queryset) # Test for snippet with no site + self.assertNotIn(another_site_snippet, queryset) # Test for snippet with another site + @override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=False) def test_admin_list_display_without_versioning(self): """ From 206996f77d5b672d690164d2def8e300ff5f328d Mon Sep 17 00:00:00 2001 From: Vipul Narang <61502917+vipulnarang95@users.noreply.github.com> Date: Tue, 14 May 2024 16:20:07 +0530 Subject: [PATCH 5/8] Update CHANGELOG.rst Co-authored-by: Mark Walker --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 4a148620..690046d8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,7 +4,7 @@ Changelog Unreleased ========== -* feat: Added site field in Snippet model +* feat: Added sites support for Snippets * feat: Added site filter in Snippet Admin * add support for python 3.10 * add support for django 4.2 From acd053a34329c77896ce79bfcd9e0bb5fdaa10a6 Mon Sep 17 00:00:00 2001 From: Vipul Narang Date: Tue, 14 May 2024 16:22:54 +0530 Subject: [PATCH 6/8] corrected formatting --- CHANGELOG.rst | 1 - tests/test_admin.py | 21 ++++++++++++++++----- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 690046d8..76a464e8 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -5,7 +5,6 @@ Changelog Unreleased ========== * feat: Added sites support for Snippets -* feat: Added site filter in Snippet Admin * add support for python 3.10 * add support for django 4.2 * drop support for django < 3.2 diff --git a/tests/test_admin.py b/tests/test_admin.py index 638d6945..1c92dfa1 100644 --- a/tests/test_admin.py +++ b/tests/test_admin.py @@ -48,12 +48,23 @@ def test_get_queryset(self): snippet_grouper=SnippetGrouper.objects.create(), site=another_site ) - current_site_snippet_version = Version.objects.create(content=current_site_snippet, created_by=self.superuser, state='published') - another_site_snippet_version = Version.objects.create(content=another_site_snippet, created_by=self.superuser, state='published') + current_site_snippet_version = Version.objects.create( + content=current_site_snippet, + created_by=self.superuser, + state='published' + ) + another_site_snippet_version = Version.objects.create( + content=another_site_snippet, + created_by=self.superuser, + state='published' + ) queryset = self.snippet_admin.get_queryset(self.snippet_admin_request) - self.assertIn(current_site_snippet, queryset) # Test for snippet of current site - self.assertIn(self.snippet, queryset) # Test for snippet with no site - self.assertNotIn(another_site_snippet, queryset) # Test for snippet with another site + # Test for snippet of current site + self.assertIn(current_site_snippet, queryset) + # Test for snippet with no site + self.assertIn(self.snippet, queryset) + # Test for snippet with another site + self.assertNotIn(another_site_snippet, queryset) @override_settings(DJANGOCMS_SNIPPET_VERSIONING_ENABLED=False) def test_admin_list_display_without_versioning(self): From ce1fe2a13bc3ce5e3069a205f82767864e081996 Mon Sep 17 00:00:00 2001 From: Vipul Narang Date: Tue, 14 May 2024 16:37:40 +0530 Subject: [PATCH 7/8] fixed flake8 issues --- tests/test_admin.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/tests/test_admin.py b/tests/test_admin.py index 1c92dfa1..8440e3e6 100644 --- a/tests/test_admin.py +++ b/tests/test_admin.py @@ -25,7 +25,11 @@ def setUp(self): html="

This is a test

", snippet_grouper=SnippetGrouper.objects.create(), ) - self.snippet_version = Version.objects.create(content=self.snippet, created_by=self.superuser, state='published') + self.snippet_version = Version.objects.create( + content=self.snippet, + created_by=self.superuser, + state='published' + ) self.snippet_admin = snippet_admin.SnippetAdmin(Snippet, admin) self.snippet_admin_request = RequestFactory().get("/admin/djangocms_snippet") self.edit_url = reverse("admin:djangocms_snippet_snippet_change", args=(self.snippet.id,),) @@ -41,21 +45,22 @@ def test_get_queryset(self): snippet_grouper=SnippetGrouper.objects.create(), site=current_site ) - another_site_snippet= Snippet.objects.create( + another_site_snippet = Snippet.objects.create( name="Test Snippet 2", slug="test-snippet-two", html="

This is a test snippet two

", snippet_grouper=SnippetGrouper.objects.create(), site=another_site ) - current_site_snippet_version = Version.objects.create( - content=current_site_snippet, - created_by=self.superuser, + # Create versions of snippets + Version.objects.create( + content=current_site_snippet, + created_by=self.superuser, state='published' ) - another_site_snippet_version = Version.objects.create( - content=another_site_snippet, - created_by=self.superuser, + Version.objects.create( + content=another_site_snippet, + created_by=self.superuser, state='published' ) queryset = self.snippet_admin.get_queryset(self.snippet_admin_request) From d88004510963aa4ba89de1f4289ab326f84fe19a Mon Sep 17 00:00:00 2001 From: Vipul Narang Date: Tue, 14 May 2024 17:32:24 +0530 Subject: [PATCH 8/8] removed list_filter --- djangocms_snippet/admin.py | 1 - 1 file changed, 1 deletion(-) diff --git a/djangocms_snippet/admin.py b/djangocms_snippet/admin.py index bf89c7d0..c6e13e53 100644 --- a/djangocms_snippet/admin.py +++ b/djangocms_snippet/admin.py @@ -33,7 +33,6 @@ @admin.register(Snippet) class SnippetAdmin(*snippet_admin_classes): list_display = ('name',) - list_filter = ['site'] search_fields = ['name'] change_form_template = 'djangocms_snippet/admin/change_form.html' text_area_attrs = {