From 2200e4c96c4ed9ffc74ebd68042c04b9e2f40721 Mon Sep 17 00:00:00 2001 From: Vinit Kumar Date: Wed, 18 Oct 2023 23:53:45 +0530 Subject: [PATCH 01/23] fix: #7662, add support for python 3.12 and upgrade github actions --- .github/workflows/codeql.yml | 42 ++++++++++++++++++++++ .github/workflows/docs.yml | 11 +++--- .github/workflows/frontend.yml | 4 +-- .github/workflows/lint-pr.yml | 20 +++++++++++ .github/workflows/linters.yml | 2 +- .github/workflows/publish-to-live-pypi.yml | 4 +-- .github/workflows/publish-to-test-pypi.yml | 4 +-- .github/workflows/spelling.yml | 16 +++++++++ .github/workflows/test.yml | 12 +++---- 9 files changed, 98 insertions(+), 17 deletions(-) create mode 100644 .github/workflows/codeql.yml create mode 100644 .github/workflows/lint-pr.yml create mode 100644 .github/workflows/spelling.yml diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000000..27fd5ce7c6e --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,42 @@ +name: "CodeQL" + +on: + push: + branches: [ "develop", "develop-4", "release/0.10.x", "release/2.1.x", "release/2.2.x", "release/2.3.x", "release/2.4.x", "release/3.0.x", "release/3.1.x", "release/3.2.x", "release/3.3.x", "release/3.4.x", "release/3.5.x", "release/3.6.x", "release/3.7.x", "release/3.8.x", "release/3.9.x", "release/3.10.x", "release/3.11.x", "release/4.0.x", "release/4.0.0.x", "release/4.0.1.x", "release/4.1.x" ] + pull_request: + branches: [ "develop" ] + schedule: + - cron: "40 4 * * 6" + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ python, javascript ] + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + queries: +security-and-quality + + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + if: ${{ matrix.language == 'python' || matrix.language == 'javascript' }} + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 + with: + category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 28f47cae1d3..ac822c1eb2e 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -12,20 +12,23 @@ jobs: name: docs steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: - python-version: '3.9' + python-version: "3.12" cache: 'pip' - name: Cache dependencies - uses: actions/cache@v2 + uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('docs/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- - run: python -m pip install -r docs/requirements.txt + - run: python setup.py install + - run: codespell -w *.rst + - run: codespell -w docs - name: Build docs run: | cd docs diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index 1277040bf11..ffba12b0f00 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -14,9 +14,9 @@ jobs: node-version: ['18'] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v2 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - run: npm install diff --git a/.github/workflows/lint-pr.yml b/.github/workflows/lint-pr.yml new file mode 100644 index 00000000000..fc5d65d7cfb --- /dev/null +++ b/.github/workflows/lint-pr.yml @@ -0,0 +1,20 @@ +name: "Lint PR" + +# Validates PR titles against the conventional commit spec +# https://github.com/commitizen/conventional-commit-types + +on: + pull_request_target: + types: + - opened + - edited + - synchronize + +jobs: + main: + name: Validate PR title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/linters.yml b/.github/workflows/linters.yml index e3696c0f371..92e6c73df5a 100644 --- a/.github/workflows/linters.yml +++ b/.github/workflows/linters.yml @@ -17,7 +17,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v4 with: - python-version: "3.11" + python-version: "3.12" cache: 'pip' - run: | python -m pip install --upgrade pip diff --git a/.github/workflows/publish-to-live-pypi.yml b/.github/workflows/publish-to-live-pypi.yml index 52f112f8dc7..efafc715270 100644 --- a/.github/workflows/publish-to-live-pypi.yml +++ b/.github/workflows/publish-to-live-pypi.yml @@ -11,10 +11,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up Python 3.10 + - name: Set up Python 3.12 uses: actions/setup-python@v3 with: - python-version: '3.10' + python-version: '3.12' - name: Install pypa/build run: >- diff --git a/.github/workflows/publish-to-test-pypi.yml b/.github/workflows/publish-to-test-pypi.yml index d56b6da5113..04989836709 100644 --- a/.github/workflows/publish-to-test-pypi.yml +++ b/.github/workflows/publish-to-test-pypi.yml @@ -12,10 +12,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up Python 3.10 + - name: Set up Python 3.12 uses: actions/setup-python@v3 with: - python-version: '3.10' + python-version: '3.12' - name: Install pypa/build run: >- diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml new file mode 100644 index 00000000000..71995b9291a --- /dev/null +++ b/.github/workflows/spelling.yml @@ -0,0 +1,16 @@ +name: django CMS spelling + +on: [push, pull_request] + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + codespell: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + - name: codespell + uses: codespell-project/actions-codespell@master diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index af71b75ce55..e9300aa2e94 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,7 +12,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ 3.8, 3.9, '3.10', '3.11' ] # latest release minus two + python-version: [ 3.8, 3.9, '3.10', '3.11', '3.12' ] # latest release minus two requirements-file: [ django-2.2.txt, django-3.2.txt, @@ -71,7 +71,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ 3.8, 3.9, '3.10', '3.11' ] # latest release minus two + python-version: [ 3.8, 3.9, '3.10', '3.11', '3.12' ] # latest release minus two requirements-file: [ django-2.2.txt, django-3.2.txt, @@ -129,7 +129,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: [ 3.8, 3.9, '3.10', '3.11' ] # latest release minus two + python-version: [ 3.8, 3.9, '3.10', '3.11', '3.12' ] # latest release minus two requirements-file: [ django-2.2.txt, django-3.2.txt, @@ -173,7 +173,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.11'] + python-version: ['3.12'] requirements-file: ['requirements_base.txt'] django-version: [ 'https://github.com/django/django/archive/main.tar.gz' @@ -208,7 +208,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.11'] + python-version: ['3.12'] requirements-file: ['requirements_base.txt'] django-version: [ 'https://github.com/django/django/archive/main.tar.gz' @@ -259,7 +259,7 @@ jobs: strategy: fail-fast: false matrix: - python-version: ['3.11'] + python-version: ['3.12'] requirements-file: ['requirements_base.txt'] django-version: [ 'https://github.com/django/django/archive/main.tar.gz' From c5018332dec6ea94c6ff319a8bb729ea75f1e399 Mon Sep 17 00:00:00 2001 From: Vinit Kumar Date: Thu, 19 Oct 2023 00:11:30 +0530 Subject: [PATCH 02/23] fix: deprecations --- cms/tests/test_nested_plugins.py | 20 +++++++++---------- cms/tests/test_signals.py | 6 +++--- cms/tests/test_templates.py | 34 +++++++++++++++++++------------- cms/tests/test_toolbar.py | 4 ++-- cms/utils/apphook_reload.py | 2 +- cms/utils/conf.py | 5 ++--- 6 files changed, 38 insertions(+), 33 deletions(-) diff --git a/cms/tests/test_nested_plugins.py b/cms/tests/test_nested_plugins.py index bd6657b48ad..b6ca2e89287 100644 --- a/cms/tests/test_nested_plugins.py +++ b/cms/tests/test_nested_plugins.py @@ -607,13 +607,13 @@ def test_copy_page_nested_plugin(self): # check the stored placeholders org vs copy msg = 'placehoder ids copy:%s org:%s copied page %s are identical - tree broken' % ( page_two_ph_one.pk, page_one_ph_one.pk, page_two.pk) - self.assertNotEquals(page_two_ph_one.pk, page_one_ph_one.pk, msg) + self.assertNotEqual(page_two_ph_one.pk, page_one_ph_one.pk, msg) msg = 'placehoder ids copy:%s org:%s copied page %s are identical - tree broken' % ( page_two_ph_two.pk, page_one_ph_two.pk, page_two.pk) - self.assertNotEquals(page_two_ph_two.pk, page_one_ph_two.pk, msg) + self.assertNotEqual(page_two_ph_two.pk, page_one_ph_two.pk, msg) msg = 'placehoder ids copy:%s org:%s copied page %s are identical - tree broken' % ( page_two_ph_three.pk, page_one_ph_three.pk, page_two.pk) - self.assertNotEquals(page_two_ph_three.pk, page_one_ph_three.pk, msg) + self.assertNotEqual(page_two_ph_three.pk, page_one_ph_three.pk, msg) # get the plugins from the original page org_placeholder_one_plugins = page_one_ph_one.get_plugins() self.assertEqual(len(org_placeholder_one_plugins), 1) @@ -664,9 +664,9 @@ def test_copy_page_nested_plugin(self): copied_nested_text_plugin = instance break msg = "orginal nested text plugin not found" - self.assertNotEquals(org_nested_text_plugin, None, msg=msg) + self.assertNotEqual(org_nested_text_plugin, None, msg=msg) msg = "copied nested text plugin not found" - self.assertNotEquals(copied_nested_text_plugin, None, msg=msg) + self.assertNotEqual(copied_nested_text_plugin, None, msg=msg) # get the children ids of the texplugin with a nested link # to check if the body of the text is genrated correctly org_link_child_plugin = org_nested_text_plugin.get_children()[0] @@ -839,13 +839,13 @@ def test_copy_page_nested_plugin_moved_parent_plugin(self): # check the stored placeholders org vs copy msg = u'placehoder ids copy:%s org:%s copied page %s are identical - tree broken' % ( page_two_ph_one.pk, page_one_ph_one.pk, page_two.pk) - self.assertNotEquals(page_two_ph_one.pk, page_one_ph_one.pk, msg) + self.assertNotEqual(page_two_ph_one.pk, page_one_ph_one.pk, msg) msg = u'placehoder ids copy:%s org:%s copied page %s are identical - tree broken' % ( page_two_ph_two.pk, page_one_ph_two.pk, page_two.pk) - self.assertNotEquals(page_two_ph_two.pk, page_one_ph_two.pk, msg) + self.assertNotEqual(page_two_ph_two.pk, page_one_ph_two.pk, msg) msg = u'placehoder ids copy:%s org:%s copied page %s are identical - tree broken' % ( page_two_ph_three.pk, page_one_ph_three.pk, page_two.pk) - self.assertNotEquals(page_two_ph_three.pk, page_one_ph_three.pk, msg) + self.assertNotEqual(page_two_ph_three.pk, page_one_ph_three.pk, msg) # get the plugins from the original page org_placeholder_one_plugins = page_one_ph_one.get_plugins() self.assertEqual(len(org_placeholder_one_plugins), 1) @@ -896,9 +896,9 @@ def test_copy_page_nested_plugin_moved_parent_plugin(self): copied_nested_text_plugin = instance break msg = "orginal nested text plugin not found" - self.assertNotEquals(org_nested_text_plugin, None, msg=msg) + self.assertNotEqual(org_nested_text_plugin, None, msg=msg) msg = "copied nested text plugin not found" - self.assertNotEquals(copied_nested_text_plugin, None, msg=msg) + self.assertNotEqual(copied_nested_text_plugin, None, msg=msg) # get the children ids of the texplugin with a nested link # to check if the body of the text is generated correctly org_link_child_plugin = org_nested_text_plugin.get_children()[0] diff --git a/cms/tests/test_signals.py b/cms/tests/test_signals.py index 19301446475..850e189aec2 100644 --- a/cms/tests/test_signals.py +++ b/cms/tests/test_signals.py @@ -41,7 +41,7 @@ def test_urls_need_reloading_signal_set_apphook(self): self.assertRedirects(response, redirect_to) self.assertEqual(env.call_count, 1) new_revision, _ = UrlconfRevision.get_or_create_revision() - self.assertNotEquals(current_revision, new_revision) + self.assertNotEqual(current_revision, new_revision) def test_urls_need_reloading_signal_delete(self): superuser = self.get_superuser() @@ -63,7 +63,7 @@ def test_urls_need_reloading_signal_delete(self): self.client.post(endpoint, {'post': 'yes'}) self.assertEqual(env.call_count, 1) new_revision, _ = UrlconfRevision.get_or_create_revision() - self.assertNotEquals(current_revision, new_revision) + self.assertNotEqual(current_revision, new_revision) def test_urls_need_reloading_signal_change_slug(self): superuser = self.get_superuser() @@ -92,4 +92,4 @@ def test_urls_need_reloading_signal_change_slug(self): self.assertRedirects(response, redirect_to) self.assertEqual(env.call_count, 1) new_revision, _ = UrlconfRevision.get_or_create_revision() - self.assertNotEquals(current_revision, new_revision) + self.assertNotEqual(current_revision, new_revision) diff --git a/cms/tests/test_templates.py b/cms/tests/test_templates.py index c8f8ed652a0..1be081f0bca 100644 --- a/cms/tests/test_templates.py +++ b/cms/tests/test_templates.py @@ -1,5 +1,5 @@ import os.path -from imp import PY_SOURCE, load_module +from importlib.machinery import SourceFileLoader from django.conf import settings from django.template import TemplateDoesNotExist, loader @@ -39,19 +39,25 @@ def test_custom_templates(self): Test that using CMS_TEMPLATES_DIR both template list and template labels are extracted from the new directory """ config_path = os.path.join(settings.CMS_TEMPLATES_DIR, '__init__.py') - with open(config_path, 'r') as openfile: - mod = load_module("mod", openfile, config_path, ('m', 'r', PY_SOURCE)) - original_labels = [force_str(_(template[1])) for template in mod.TEMPLATES.items()] - original_files = [os.path.join(PATH_PREFIX, template[0].strip()) for template in mod.TEMPLATES.items()] - templates = get_cms_setting('TEMPLATES') - self.assertEqual(len(templates), 3) - labels = [force_str(template[1]) for template in templates] - files = [template[0] for template in templates] - if get_cms_setting('TEMPLATE_INHERITANCE'): - original_labels.append(force_str(_('Inherit the template of the nearest ancestor'))) - original_files.append(constants.TEMPLATE_INHERITANCE_MAGIC) - self.assertEqual(set(labels), set(original_labels)) - self.assertEqual(set(files), set(original_files)) + mod = None + try: + mod = SourceFileLoader("mod", config_path).load_module() + except FileNotFoundError: + print(f"file not found at {config_path}") + except Exception as e: + print(f"An error occurred: {e}") + if mod: + original_labels = [force_str(_(template[1])) for template in mod.TEMPLATES.items()] + original_files = [os.path.join(PATH_PREFIX, template[0].strip()) for template in mod.TEMPLATES.items()] + templates = get_cms_setting('TEMPLATES') + self.assertEqual(len(templates), 3) + labels = [force_str(template[1]) for template in templates] + files = [template[0] for template in templates] + if get_cms_setting('TEMPLATE_INHERITANCE'): + original_labels.append(force_str(_('Inherit the template of the nearest ancestor'))) + original_files.append(constants.TEMPLATE_INHERITANCE_MAGIC) + self.assertEqual(set(labels), set(original_labels)) + self.assertEqual(set(files), set(original_files)) @override_settings(CMS_TEMPLATES_DIR=GOOD_PATH) def test_custom_templates_loading(self): diff --git a/cms/tests/test_toolbar.py b/cms/tests/test_toolbar.py index 2cfc7149d3f..c9ba00751da 100644 --- a/cms/tests/test_toolbar.py +++ b/cms/tests/test_toolbar.py @@ -989,13 +989,13 @@ def test_toolbar_logout_redirect(self): response = self.client.get(page3_edit_url) toolbar = response.context['request'].toolbar admin_menu = toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER) - self.assertEquals(admin_menu.find_first(AjaxItem, name=menu_name).item.on_success, '/') + self.assertEqual(admin_menu.find_first(AjaxItem, name=menu_name).item.on_success, '/') # Published page with view permissions, redirect response = self.client.get(page4_edit_url) toolbar = response.context['request'].toolbar admin_menu = toolbar.get_or_create_menu(ADMIN_MENU_IDENTIFIER) - self.assertEquals(admin_menu.find_first(AjaxItem, name=menu_name).item.on_success, '/') + self.assertEqual(admin_menu.find_first(AjaxItem, name=menu_name).item.on_success, '/') @override_settings(ROOT_URLCONF='cms.test_utils.project.placeholderapp_urls') diff --git a/cms/utils/apphook_reload.py b/cms/utils/apphook_reload.py index 0be32bb3596..de4f51867c8 100644 --- a/cms/utils/apphook_reload.py +++ b/cms/utils/apphook_reload.py @@ -3,7 +3,7 @@ import uuid # Py2 and Py3 compatible reload -from imp import reload +from importlib import reload from threading import local from django.conf import settings diff --git a/cms/utils/conf.py b/cms/utils/conf.py index c2174c8028d..8bf5196682b 100644 --- a/cms/utils/conf.py +++ b/cms/utils/conf.py @@ -21,12 +21,11 @@ def _load_from_file(module_path): """ Load a python module from its absolute filesystem path """ - from imp import PY_SOURCE, load_module + from importlib.machinery import SourceFileLoader imported = None if module_path: - with open(module_path, 'r') as openfile: - imported = load_module("mod", openfile, module_path, ('imported', 'r', PY_SOURCE)) + imported = SourceFileLoader("mod", module_path).load_module() return imported From 5bd54b77f2122d931dc887e24c5d88687923ac54 Mon Sep 17 00:00:00 2001 From: Vinit Kumar Date: Thu, 19 Oct 2023 00:40:45 +0530 Subject: [PATCH 03/23] fix: make some improvements to codespell and the tests for docs --- .github/workflows/test.yml | 4 ++++ setup.cfg | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index e9300aa2e94..74db98ea626 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -57,6 +57,7 @@ jobs: pip install pytest pip install -r test_requirements/${{ matrix.requirements-file }} pip install -r test_requirements/databases.txt + pip install -r docs/requirements.txt python setup.py install - name: Test with django test runner @@ -115,6 +116,7 @@ jobs: pip install pytest pip install -r test_requirements/${{ matrix.requirements-file }} pip install -r test_requirements/databases.txt + pip install -r docs/requirements.txt python setup.py install @@ -244,6 +246,7 @@ jobs: pip install -r test_requirements/${{ matrix.requirements-file }} pip install pytest ${{ matrix.django-version }} pip install -r test_requirements/databases.txt + pip install -r docs/requirements.txt python setup.py install - name: Test with django test runner @@ -294,6 +297,7 @@ jobs: pip install -r test_requirements/${{ matrix.requirements-file }} pip install pytest ${{ matrix.django-version }} pip install -r test_requirements/databases.txt + pip install -r docs/requirements.txt python setup.py install - name: Test with django test runner diff --git a/setup.cfg b/setup.cfg index 0a3b95a6d65..7f76ff7d634 100644 --- a/setup.cfg +++ b/setup.cfg @@ -36,3 +36,7 @@ known_first_party = cms, menus multi_line_output = 5 skip = migrations skip_glob = cms/admin/__init__.py,cms/models/__init__.py + +[codespell] +ignore-words-list = cant,statics +skip = *.js,*.po,./node_modules/*,./.idea/*,./docs/env/*,./docs/build/*,./.env/*,./.venv/*,./build/*,./django_cms.egg-info/* From d3b7c35eb85507223572de0c131fa48e629c8f9f Mon Sep 17 00:00:00 2001 From: Vinit Kumar Date: Thu, 19 Oct 2023 00:46:28 +0530 Subject: [PATCH 04/23] fix: add updated reqs for docs --- docs/requirements.in | 8 ++++-- docs/requirements.txt | 66 +++++++++++++++++++++++++++++++------------ 2 files changed, 53 insertions(+), 21 deletions(-) diff --git a/docs/requirements.in b/docs/requirements.in index e295feb7d9e..1a0677b2527 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -1,13 +1,15 @@ MarkupSafe Pygments -sphinx +furo +Sphinx>=4.2.0 +sphinx-copybutton +sphinxext-opengraph sphinxcontrib-spelling pyenchant>3 sphinx-autobuild -divio-docs-theme datetime +codespell coverage django~=3.2 -django-sekizai<4 # for python 3.7 django-cms pip-tools diff --git a/docs/requirements.txt b/docs/requirements.txt index 3a60877954e..841669f762d 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,8 +1,8 @@ # -# This file is autogenerated by pip-compile with python 3.9 -# To update, run: +# This file is autogenerated by pip-compile with Python 3.12 +# by the following command: # -# pip-compile --output-file=requirements.txt requirements.in +# pip-compile # alabaster==0.7.12 # via sphinx @@ -10,6 +10,8 @@ asgiref==3.5.2 # via django babel==2.10.3 # via sphinx +beautifulsoup4==4.12.2 + # via furo build==0.8.0 # via pip-tools certifi==2022.9.24 @@ -18,14 +20,18 @@ charset-normalizer==2.1.1 # via requests click==8.1.3 # via pip-tools +codespell==2.2.6 + # via -r requirements.in colorama==0.4.6 # via sphinx-autobuild +contourpy==1.1.1 + # via matplotlib coverage==6.5.0 # via -r requirements.in +cycler==0.12.1 + # via matplotlib datetime==4.7 # via -r requirements.in -divio-docs-theme==0.0.22 - # via -r requirements.in django==3.2.16 # via # -r requirements.in @@ -43,35 +49,46 @@ django-cms==3.11.0 django-formtools==2.4 # via django-cms django-sekizai==3.0.1 - # via - # -r requirements.in - # django-cms + # via django-cms django-treebeard==4.5.1 # via django-cms djangocms-admin-style==3.2.0 # via django-cms docutils==0.19 # via sphinx +fonttools==4.43.1 + # via matplotlib +furo==2023.3.27 + # via -r requirements.in idna==3.4 # via requests imagesize==1.4.1 # via sphinx -importlib-metadata==5.0.0 - # via sphinx jinja2==3.1.2 # via sphinx +kiwisolver==1.4.5 + # via matplotlib livereload==2.6.3 # via sphinx-autobuild markupsafe==2.1.1 # via # -r requirements.in # jinja2 +matplotlib==3.8.0 + # via sphinxext-opengraph +numpy==1.26.1 + # via + # contourpy + # matplotlib packaging==21.3 # via # build + # matplotlib # sphinx pep517==0.13.0 # via build +pillow==10.1.0 + # via matplotlib pip-tools==6.9.0 # via -r requirements.in pyenchant==3.2.2 @@ -81,9 +98,14 @@ pyenchant==3.2.2 pygments==2.13.0 # via # -r requirements.in + # furo # sphinx pyparsing==3.0.9 - # via packaging + # via + # matplotlib + # packaging +python-dateutil==2.8.2 + # via matplotlib pytz==2022.5 # via # babel @@ -92,16 +114,28 @@ pytz==2022.5 requests==2.28.1 # via sphinx six==1.16.0 - # via livereload + # via + # livereload + # python-dateutil snowballstemmer==2.2.0 # via sphinx +soupsieve==2.5 + # via beautifulsoup4 sphinx==5.3.0 # via # -r requirements.in + # furo # sphinx-autobuild + # sphinx-basic-ng + # sphinx-copybutton # sphinxcontrib-spelling + # sphinxext-opengraph sphinx-autobuild==2021.3.14 # via -r requirements.in +sphinx-basic-ng==1.0.0b2 + # via furo +sphinx-copybutton==0.5.2 + # via -r requirements.in sphinxcontrib-applehelp==1.0.2 # via sphinx sphinxcontrib-devhelp==1.0.2 @@ -116,20 +150,16 @@ sphinxcontrib-serializinghtml==1.1.5 # via sphinx sphinxcontrib-spelling==7.6.2 # via -r requirements.in +sphinxext-opengraph==0.8.2 + # via -r requirements.in sqlparse==0.4.3 # via django -tomli==2.0.1 - # via - # build - # pep517 tornado==6.2 # via livereload urllib3==1.26.12 # via requests wheel==0.37.1 # via pip-tools -zipp==3.10.0 - # via importlib-metadata zope-interface==5.5.0 # via datetime From 594736c0a1f2f1aa4ca374f128cd023cfa0b741d Mon Sep 17 00:00:00 2001 From: Vinit Kumar Date: Thu, 19 Oct 2023 00:50:39 +0530 Subject: [PATCH 05/23] fix: code spell typos --- CHANGELOG.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index a2834231819..d306d46ab5f 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -936,7 +936,7 @@ Thanks to all contributors for their efforts! - Fix issue on django >= 1.6 with page form fields. - Resolve jQuery namespace issues in admin page tree and changeform - Fix issues for PageField in Firefox/Safari -- Fix some Python 3.4 compatibility issue when using proxy modles +- Fix some Python 3.4 compatibility issue when using proxy models - Fix corner case in plugin copy - Documentation fixes - Minor code cleanups From 086e49fb20963a18494d7da994ab3990212db4e0 Mon Sep 17 00:00:00 2001 From: Vinit Kumar Date: Thu, 19 Oct 2023 00:54:06 +0530 Subject: [PATCH 06/23] fix: code spell typos for docs --- docs/contributing/development-community.rst | 2 +- docs/how_to/frontend_models.rst | 4 ++-- docs/topics/commonly_used_plugins.rst | 2 +- docs/upgrade/4.0.rst | 8 ++++---- setup.cfg | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/contributing/development-community.rst b/docs/contributing/development-community.rst index b5d8905de89..ceaf2639346 100644 --- a/docs/contributing/development-community.rst +++ b/docs/contributing/development-community.rst @@ -45,7 +45,7 @@ and as one of the founding members of the dCA, next to `What `_. The dCA’s role in steering the project’s development is formalised in the -`django CMS technical comittee `_, +`django CMS technical committee `_, whose members are drawn from the django CMS community and the dCA. The dCA maintains overall control of the `django CMS repository `_. diff --git a/docs/how_to/frontend_models.rst b/docs/how_to/frontend_models.rst index 1a9b501f09a..a29d1a3217e 100644 --- a/docs/how_to/frontend_models.rst +++ b/docs/how_to/frontend_models.rst @@ -95,13 +95,13 @@ Will render to: .. code-block:: html+django -