Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-django-classy-tags for 
openSUSE:Factory checked in at 2022-09-26 18:48:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-classy-tags (Old)
 and      /work/SRC/openSUSE:Factory/.python-django-classy-tags.new.2275 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-django-classy-tags"

Mon Sep 26 18:48:07 2022 rev:6 rq:1005946 version:3.0.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-django-classy-tags/python-django-classy-tags.changes
      2022-01-10 23:52:56.704769719 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-django-classy-tags.new.2275/python-django-classy-tags.changes
    2022-09-26 18:48:08.932048027 +0200
@@ -1,0 +2,11 @@
+Mon Sep 26 04:42:51 UTC 2022 - Steve Kowalik <[email protected]>
+
+- Update to 4.0.1:
+  * Update manifest to include all the tests dir (#72)
+  * Added support for Django 3.2 and 4.0
+  * Drop support for python 3.5 and 3.6
+- Drop patch dj40.patch, included upstream.
+- Add patch django-4-1-support.patch:
+  * Add support for Django >= 4.1
+
+-------------------------------------------------------------------

Old:
----
  2.0.0.tar.gz
  dj40.patch

New:
----
  3.0.1.tar.gz
  django-4-1-support.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-django-classy-tags.spec ++++++
--- /var/tmp/diff_new_pack.Whs8bn/_old  2022-09-26 18:48:09.376048866 +0200
+++ /var/tmp/diff_new_pack.Whs8bn/_new  2022-09-26 18:48:09.384048881 +0200
@@ -19,19 +19,19 @@
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 %define skip_python2 1
 Name:           python-django-classy-tags
-Version:        2.0.0
+Version:        3.0.1
 Release:        0
 Summary:        Class based template tags for Django
 License:        MIT
 URL:            https://github.com/ojii/django-classy-tags
 Source:         
https://github.com/divio/django-classy-tags/archive/%{version}.tar.gz
-# https://github.com/django-cms/django-classy-tags/pull/66
-Patch0:         dj40.patch
-BuildRequires:  %{python_module Django >= 2.2}
+# PATCH-FIX-UPSTREAM Support django >= 4.1 gh#django-cms/django-classy-tags#86
+Patch0:         django-4-1-support.patch
+BuildRequires:  %{python_module Django >= 3.2}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros
-Requires:       python-Django >= 2.2
+Requires:       python-Django >= 3.2
 BuildArch:      noarch
 %python_subpackages
 
@@ -40,8 +40,7 @@
 which is fully compatible with the current Django templating infrastructure.
 
 %prep
-%setup -q -n django-classy-tags-%{version}
-%patch0 -p1
+%autosetup -p1 -n django-classy-tags-%{version}
 sed -i 's/verbosity=1/verbosity=2/' tests/settings.py
 
 %build
@@ -50,7 +49,6 @@
 %install
 %python_install
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
-%python_expand rm -r %{buildroot}%{$python_sitelib}/tests
 
 %check
 export PYTHONPATH='.'
@@ -58,7 +56,7 @@
 
 %files %{python_files}
 %doc README.rst
-%license LICENSE.txt
+%license LICENSE
 %{python_sitelib}/classytags/
 %{python_sitelib}/django_classy_tags*egg-info/
 

++++++ 2.0.0.tar.gz -> 3.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-classy-tags-2.0.0/.github/workflows/codeql-analysis.yml 
new/django-classy-tags-3.0.1/.github/workflows/codeql-analysis.yml
--- old/django-classy-tags-2.0.0/.github/workflows/codeql-analysis.yml  
1970-01-01 01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/.github/workflows/codeql-analysis.yml  
2022-02-01 23:26:47.000000000 +0100
@@ -0,0 +1,68 @@
+# For most projects, this workflow file will not need changing; you simply need
+# to commit it to your repository.
+#
+# You may wish to alter this file to override the set of languages analyzed,
+# or to provide custom queries or build logic.
+#
+# ******** NOTE ********
+# We have attempted to detect the languages in your repository. Please check
+# the `language` matrix defined below to confirm you have the correct set of
+# supported CodeQL languages.
+#
+name: "CodeQL"
+
+on:
+  push:
+    branches: [ master ]
+  pull_request:
+    # The branches below must be a subset of the branches above
+    branches: [ master ]
+  schedule:
+    - cron: '22 13 * * 0'
+
+jobs:
+  analyze:
+    name: Analyze
+    runs-on: ubuntu-latest
+    permissions:
+      actions: read
+      contents: read
+      security-events: write
+
+    strategy:
+      fail-fast: false
+      matrix:
+        language: [ 'python' ]
+
+    steps:
+    - name: Checkout repository
+      uses: actions/checkout@v2
+
+    # Initializes the CodeQL tools for scanning.
+    - name: Initialize CodeQL
+      uses: github/codeql-action/init@v1
+      with:
+        languages: ${{ matrix.language }}
+        # If you wish to specify custom queries, you can do so here or in a 
config file.
+        # By default, queries listed here will override any specified in a 
config file.
+        # Prefix the list here with "+" to use these queries and those in the 
config file.
+        # queries: ./path/to/local/query, your-org/your-repo/queries@main
+
+    # Autobuild attempts to build any compiled languages  (C/C++, C#, or Java).
+    # If this step fails, then you should remove it and run the build manually 
(see below)
+    - name: Autobuild
+      uses: github/codeql-action/autobuild@v1
+
+    # ?????? Command-line programs to run using the OS shell.
+    # ???? https://git.io/JvXDl
+
+    # ?????? If the Autobuild fails above, remove it and uncomment the 
following three lines
+    #    and modify them (or add more) to build your code if your project
+    #    uses a compiled language
+
+    #- run: |
+    #   make bootstrap
+    #   make release
+
+    - name: Perform CodeQL Analysis
+      uses: github/codeql-action/analyze@v1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/.github/workflows/lint.yml 
new/django-classy-tags-3.0.1/.github/workflows/lint.yml
--- old/django-classy-tags-2.0.0/.github/workflows/lint.yml     1970-01-01 
01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/.github/workflows/lint.yml     2022-02-01 
23:26:47.000000000 +0100
@@ -0,0 +1,38 @@
+name: Lint
+
+on: [push, pull_request]
+
+jobs:
+  flake8:
+    name: flake8
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v2
+      - name: Set up Python
+        uses: actions/setup-python@v2
+        with:
+          python-version: 3.9
+      - name: Install flake8
+        run: pip install --upgrade flake8
+      - name: Run flake8
+        uses: liskin/gh-problem-matcher-wrap@v1
+        with:
+          linters: flake8
+          run: flake8
+
+  isort:
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout
+        uses: actions/checkout@v2
+      - name: Set up Python
+        uses: actions/setup-python@v2
+        with:
+          python-version: 3.9
+      - run: python -m pip install isort
+      - name: isort
+        uses: liskin/gh-problem-matcher-wrap@v1
+        with:
+          linters: isort
+          run: isort -c -rc -df classytags
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-classy-tags-2.0.0/.github/workflows/publish-to-live-pypi.yml 
new/django-classy-tags-3.0.1/.github/workflows/publish-to-live-pypi.yml
--- old/django-classy-tags-2.0.0/.github/workflows/publish-to-live-pypi.yml     
1970-01-01 01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/.github/workflows/publish-to-live-pypi.yml     
2022-02-01 23:26:47.000000000 +0100
@@ -0,0 +1,39 @@
+name: Publish Python ???? distributions ???? to pypi
+
+on:
+  release:
+    types:
+      - published
+
+jobs:
+  build-n-publish:
+    name: Build and publish Python ???? distributions ???? to pypi
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@master
+    - name: Set up Python 3.9
+      uses: actions/setup-python@v1
+      with:
+        python-version: 3.9
+
+    - name: Install pypa/build
+      run: >-
+        python -m
+        pip install
+        build
+        --user
+    - name: Build a binary wheel and a source tarball
+      run: >-
+        python -m
+        build
+        --sdist
+        --wheel
+        --outdir dist/
+        .
+
+    - name: Publish distribution ???? to PyPI
+      if: startsWith(github.ref, 'refs/tags')
+      uses: pypa/gh-action-pypi-publish@master
+      with:
+        user: __token__
+        password: ${{ secrets.PYPI_API_TOKEN }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-classy-tags-2.0.0/.github/workflows/publish-to-test-pypi.yml 
new/django-classy-tags-3.0.1/.github/workflows/publish-to-test-pypi.yml
--- old/django-classy-tags-2.0.0/.github/workflows/publish-to-test-pypi.yml     
1970-01-01 01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/.github/workflows/publish-to-test-pypi.yml     
2022-02-01 23:26:47.000000000 +0100
@@ -0,0 +1,40 @@
+name: Publish Python ???? distributions ???? to TestPyPI
+
+on:
+  push:
+    branches:
+      - master
+
+jobs:
+  build-n-publish:
+    name: Build and publish Python ???? distributions ???? to TestPyPI
+    runs-on: ubuntu-latest
+    steps:
+    - uses: actions/checkout@master
+    - name: Set up Python 3.9
+      uses: actions/setup-python@v1
+      with:
+        python-version: 3.9
+
+    - name: Install pypa/build
+      run: >-
+        python -m
+        pip install
+        build
+        --user
+    - name: Build a binary wheel and a source tarball
+      run: >-
+        python -m
+        build
+        --sdist
+        --wheel
+        --outdir dist/
+        .
+
+    - name: Publish distribution ???? to Test PyPI
+      uses: pypa/gh-action-pypi-publish@master
+      with:
+        user: __token__
+        password: ${{ secrets.TEST_PYPI_API_TOKEN }}
+        repository_url: https://test.pypi.org/legacy/
+        skip_existing: true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/.github/workflows/test.yml 
new/django-classy-tags-3.0.1/.github/workflows/test.yml
--- old/django-classy-tags-2.0.0/.github/workflows/test.yml     1970-01-01 
01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/.github/workflows/test.yml     2022-02-01 
23:26:47.000000000 +0100
@@ -0,0 +1,63 @@
+name: CodeCov
+
+on: [push, pull_request]
+
+jobs:
+  unit-tests:
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ['3.7', '3.8', '3.9', '3.10']
+        django-version: ['2.2', '3.1', '3.2']
+        os: [
+          ubuntu-20.04,
+        ]
+
+    steps:
+    - uses: actions/checkout@v1
+    - name: Set up Python ${{ matrix.python-version }}
+
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python-version }}
+    - name: Install dependencies
+      run: |
+        python -m pip install --upgrade pip
+        pip install django==${{ matrix.django-version }} coverage
+        python setup.py install
+
+    - name: Run coverage
+      run: coverage run setup.py test
+
+    - name: Upload Coverage to Codecov
+      uses: codecov/codecov-action@v1
+
+  unit-tests-dj4:
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ['3.8', '3.9', '3.10']
+        os: [
+          ubuntu-20.04,
+        ]
+
+    steps:
+    - uses: actions/checkout@v1
+    - name: Set up Python ${{ matrix.python-version }}
+
+      uses: actions/setup-python@v2
+      with:
+        python-version: ${{ matrix.python-version }}
+    - name: Install dependencies
+      run: |
+        python -m pip install --upgrade pip
+        pip install "django>=4.0,<4.1" coverage
+        python setup.py install
+
+    - name: Run coverage
+      run: coverage run setup.py test
+
+    - name: Upload Coverage to Codecov
+      uses: codecov/codecov-action@v1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/.gitignore 
new/django-classy-tags-3.0.1/.gitignore
--- old/django-classy-tags-2.0.0/.gitignore     2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/.gitignore     2022-02-01 23:26:47.000000000 
+0100
@@ -4,7 +4,7 @@
 *.log
 *.pot
 .DS_Store
-.coverage/
+.coverage
 .eggs/
 .idea/
 .project/
@@ -16,5 +16,7 @@
 build/
 dist/
 env/
+/*docs/env*/
+/*docs/_build*/
 
 local.sqlite
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/.pre-commit-config.yaml 
new/django-classy-tags-3.0.1/.pre-commit-config.yaml
--- old/django-classy-tags-2.0.0/.pre-commit-config.yaml        1970-01-01 
01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/.pre-commit-config.yaml        2022-02-01 
23:26:47.000000000 +0100
@@ -0,0 +1,33 @@
+repos:
+  - repo: https://github.com/asottile/pyupgrade
+    rev: v2.31.0
+    hooks:
+      - id: pyupgrade
+        args: ["--py37-plus"]
+
+  - repo: https://github.com/adamchainz/django-upgrade
+    rev: '1.4.0'
+    hooks:
+      - id: django-upgrade
+        args: [--target-version, "2.2"]
+
+  - repo: https://github.com/PyCQA/flake8
+    rev: 4.0.1
+    hooks:
+      - id: flake8
+
+  - repo: https://github.com/asottile/yesqa
+    rev: v1.3.0
+    hooks:
+      - id: yesqa
+
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v4.1.0
+    hooks:
+      - id: check-merge-conflict
+      - id: mixed-line-ending
+
+  - repo: https://github.com/pycqa/isort
+    rev: 5.10.1
+    hooks:
+      - id: isort
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/.travis.yml 
new/django-classy-tags-3.0.1/.travis.yml
--- old/django-classy-tags-2.0.0/.travis.yml    2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/.travis.yml    1970-01-01 01:00:00.000000000 
+0100
@@ -1,39 +0,0 @@
-language: python
-
-dist: xenial
-
-matrix:
-  include:
-    - python: 3.5
-      env: TOX_ENV='flake8'
-    - python: 3.5
-      env: TOX_ENV='isort'
-    # Django 2.2, run all supported versions for LTS releases
-    - python: 3.5
-      env: DJANGO='dj22'
-    - python: 3.6
-      env: DJANGO='dj22'
-    - python: 3.7
-      env: DJANGO='dj22'
-    - python: 3.8
-      env: DJANGO='dj22'
-    # Django 3.0, always run the lowest supported version
-    - python: 3.6
-      env: DJANGO='dj30'
-    # Django 3.1, always run the lowest supported version
-    - python: 3.6
-      env: DJANGO='dj31'
-
-install:
-  - pip install coverage isort tox
-  - "if [[ $TRAVIS_PYTHON_VERSION == '3.5' ]]; then export PY_VER=py35; fi"
-  - "if [[ $TRAVIS_PYTHON_VERSION == '3.6' ]]; then export PY_VER=py36; fi"
-  - "if [[ $TRAVIS_PYTHON_VERSION == '3.7' ]]; then export PY_VER=py37; fi"
-  - "if [[ $TRAVIS_PYTHON_VERSION == '3.8' ]]; then export PY_VER=py38; fi"
-  - "if [[ ${DJANGO}z != 'z' ]]; then export TOX_ENV=$PY_VER; fi"
-
-script:
-  - tox -e $TOX_ENV
-
-after_success:
-  - bash <(curl -s https://codecov.io/bash)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/CHANGELOG.rst 
new/django-classy-tags-3.0.1/CHANGELOG.rst
--- old/django-classy-tags-2.0.0/CHANGELOG.rst  2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/CHANGELOG.rst  2022-02-01 23:26:47.000000000 
+0100
@@ -2,6 +2,19 @@
 Changelog
 =========
 
+unreleased
+==========
+
+3.0.1 2022-02-01
+================
+
+* Update manifest to include all the tests dir (#72)
+
+3.0.0 2022-01-22
+================
+
+* Added support for Django 3.2 and 4.0
+* Drop support for python 3.5 and 3.6
 
 2.0.0 (2020-08-26)
 ==================
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/LICENSE 
new/django-classy-tags-3.0.1/LICENSE
--- old/django-classy-tags-2.0.0/LICENSE        1970-01-01 01:00:00.000000000 
+0100
+++ new/django-classy-tags-3.0.1/LICENSE        2022-02-01 23:26:47.000000000 
+0100
@@ -0,0 +1,24 @@
+Copyright (c) 2010, Jonas Obrist
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+    * Neither the name of Jonas Obrist nor the
+      names of its contributors may be used to endorse or promote products
+      derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL JONAS OBRIST BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/LICENSE.txt 
new/django-classy-tags-3.0.1/LICENSE.txt
--- old/django-classy-tags-2.0.0/LICENSE.txt    2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/LICENSE.txt    1970-01-01 01:00:00.000000000 
+0100
@@ -1,24 +0,0 @@
-Copyright (c) 2010, Jonas Obrist
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-    * Neither the name of Jonas Obrist nor the
-      names of its contributors may be used to endorse or promote products
-      derived from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL JONAS OBRIST BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/MANIFEST.in 
new/django-classy-tags-3.0.1/MANIFEST.in
--- old/django-classy-tags-2.0.0/MANIFEST.in    2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/MANIFEST.in    2022-02-01 23:26:47.000000000 
+0100
@@ -1,3 +1,6 @@
-include LICENSE.txt
+include LICENSE
 include README.rst
 recursive-exclude * *.py[co]
+recursive-include tests *.html
+recursive-include tests *.py
+recursive-include tests *.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/README.rst 
new/django-classy-tags-3.0.1/README.rst
--- old/django-classy-tags-2.0.0/README.rst     2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/README.rst     2022-02-01 23:26:47.000000000 
+0100
@@ -17,16 +17,27 @@
 * Extensible!
 
 
-Contributing
-============
+.. note:: 
 
-This is a an open-source project. We'll be delighted to receive your
+    This project is considered 3rd party (no supervision by the `django CMS 
Association <https://www.django-cms.org/en/about-us/>`_). Join us on `Slack     
            <https://www.django-cms.org/slack/>`_ for more information.
+
+
+*******************************************
+Contribute to this project and win rewards
+*******************************************
+
+Because this is a an open-source project, we welcome everyone to
+`get involved in the project <https://www.django-cms.org/en/contribute/>`_ and
+`receive a reward <https://www.django-cms.org/en/bounty-program/>`_ for their 
contribution. 
+Become part of a fantastic community and help us make django CMS the best CMS 
in the world.   
+
+We'll be delighted to receive your
 feedback in the form of issues and pull requests. Before submitting your
 pull request, please review our `contribution guidelines
 <http://docs.django-cms.org/en/latest/contributing/index.html>`_.
 
 We're grateful to all contributors who have helped create and maintain this 
package.
-Contributors are listed at the `contributors 
<https://github.com/divio/django-classy-tags/graphs/contributors>`_
+Contributors are listed at the `contributors 
<https://github.com/django-cms/django-classy-tags/graphs/contributors>`_
 section.
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/classytags/__init__.py 
new/django-classy-tags-3.0.1/classytags/__init__.py
--- old/django-classy-tags-2.0.0/classytags/__init__.py 2020-08-26 
11:20:50.000000000 +0200
+++ new/django-classy-tags-3.0.1/classytags/__init__.py 2022-02-01 
23:26:47.000000000 +0100
@@ -1 +1 @@
-__version__ = '2.0.0'
+__version__ = '3.0.1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/classytags/arguments.py 
new/django-classy-tags-3.0.1/classytags/arguments.py
--- old/django-classy-tags-2.0.0/classytags/arguments.py        2020-08-26 
11:20:50.000000000 +0200
+++ new/django-classy-tags-3.0.1/classytags/arguments.py        2022-02-01 
23:26:47.000000000 +0100
@@ -3,10 +3,7 @@
 
 from classytags.exceptions import InvalidFlag
 from classytags.utils import NULL, TemplateConstant, mixin
-from classytags.values import (
-    ChoiceValue, DictValue, IntegerValue, ListValue, StrictStringValue,
-    StringValue,
-)
+from classytags.values import ChoiceValue, DictValue, IntegerValue, ListValue, 
StrictStringValue, StringValue
 
 
 class Argument:
@@ -22,7 +19,7 @@
         self.resolve = resolve
 
     def __repr__(self):  # pragma: no cover
-        return '<%s: %s>' % (self.__class__.__name__, self.name)
+        return f'<{self.__class__.__name__}: {self.name}>'
 
     def get_default(self):
         """
@@ -164,7 +161,7 @@
     def get_default(self):
         items = self.default.items()
         return self.wrapper_class(
-            dict([(key, TemplateConstant(value)) for key, value in items])
+            {key: TemplateConstant(value) for key, value in items}
         )
 
     def parse(self, parser, token, tagname, kwargs):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/classytags/core.py 
new/django-classy-tags-3.0.1/classytags/core.py
--- old/django-classy-tags-2.0.0/classytags/core.py     2020-08-26 
11:20:50.000000000 +0200
+++ new/django-classy-tags-3.0.1/classytags/core.py     2022-02-01 
23:26:47.000000000 +0100
@@ -59,7 +59,7 @@
             blocks = ';%s' % ','.join(map(attrgetter('alias'), self.blocks))
         else:  # pragma: no cover
             blocks = ''
-        return '<Options:%s%s>' % (options, blocks)
+        return f'<Options:{options}{blocks}>'
 
     def __add__(self, other):
         if not isinstance(other, Options):
@@ -146,9 +146,9 @@
         Usually you should not override this method, but rather use render_tag.
         """
         items = self.kwargs.items()
-        kwargs = dict([(key, value.resolve(context)) for key, value in items])
+        kwargs = {key: value.resolve(context) for key, value in items}
         kwargs.update(self.blocks)
-        return self.render_tag(context, **kwargs)
+        return str(self.render_tag(context, **kwargs))
 
     def render_tag(self, context, **kwargs):
         """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/classytags/parser.py 
new/django-classy-tags-3.0.1/classytags/parser.py
--- old/django-classy-tags-2.0.0/classytags/parser.py   2020-08-26 
11:20:50.000000000 +0200
+++ new/django-classy-tags-3.0.1/classytags/parser.py   2022-02-01 
23:26:47.000000000 +0100
@@ -2,10 +2,7 @@
 
 from django import template
 
-from classytags.exceptions import (
-    ArgumentRequiredError, BreakpointExpected, TooManyArguments,
-    TrailingBreakpoint,
-)
+from classytags.exceptions import ArgumentRequiredError, BreakpointExpected, 
TooManyArguments, TrailingBreakpoint
 
 
 class Parser:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/classytags/utils.py 
new/django-classy-tags-3.0.1/classytags/utils.py
--- old/django-classy-tags-2.0.0/classytags/utils.py    2020-08-26 
11:20:50.000000000 +0200
+++ new/django-classy-tags-3.0.1/classytags/utils.py    2022-02-01 
23:26:47.000000000 +0100
@@ -39,9 +39,9 @@
         self.breakpoints = copy(breakpoints)
         self.blocks = copy(blocks)
         self.combined_breakpoints = dict(combind_breakpoints.items())
-        self.reversed_combined_breakpoints = dict(
-            (v, k) for k, v in combind_breakpoints.items()
-        )
+        self.reversed_combined_breakpoints = {
+            v: k for k, v in combind_breakpoints.items()
+        }
         self.current_breakpoint = None
         if self.breakpoints:
             self.next_breakpoint = self.breakpoints.pop(0)
@@ -79,7 +79,7 @@
 def mixin(parent, child, attrs=None):
     attrs = attrs or {}
     return type(
-        '%sx%s' % (parent.__name__, child.__name__),
+        f'{parent.__name__}x{child.__name__}',
         (child, parent),
         attrs
     )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/classytags/values.py 
new/django-classy-tags-3.0.1/classytags/values.py
--- old/django-classy-tags-2.0.0/classytags/values.py   2020-08-26 
11:20:50.000000000 +0200
+++ new/django-classy-tags-3.0.1/classytags/values.py   2022-02-01 
23:26:47.000000000 +0100
@@ -83,9 +83,9 @@
         dict.__init__(self, value)
 
     def resolve(self, context):
-        resolved = dict(
-            [(key, value.resolve(context)) for key, value in self.items()]
-        )
+        resolved = {
+            key: value.resolve(context) for key, value in self.items()
+        }
         return self.clean(resolved)
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/docs/Makefile 
new/django-classy-tags-3.0.1/docs/Makefile
--- old/django-classy-tags-2.0.0/docs/Makefile  2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/docs/Makefile  2022-02-01 23:26:47.000000000 
+0100
@@ -6,6 +6,8 @@
 SPHINXBUILD   = sphinx-build
 PAPER         =
 BUILDDIR      = _build
+VENV = env/bin/activate
+PORT = 8001
 
 # Internal variables.
 PAPEROPT_a4     = -D latex_paper_size=a4
@@ -30,34 +32,49 @@
 clean:
        -rm -rf $(BUILDDIR)/*
 
+install:
+       @echo "... setting up virtualenv"
+       python3 -m venv env
+       . $(VENV); pip install -r requirements.txt
+
+       @echo "\n" \
+             
"--------------------------------------------------------------------------------------------------
 \n" \
+                   "* watch, build and serve the documentation: make run \n" \
+                   "* check spelling: make spelling \n" \
+                   "\n" \
+                               "enchant must be installed in order for 
pyenchant (and therefore spelling checks) to work. See \n" \
+                               
"http://docs.django-cms.org/en/latest/contributing/documentation.html#install-the-spelling-software
 \n" \
+             
"--------------------------------------------------------------------------------------------------
 \n" \
+
+
 html:
-       $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+       . $(VENV); $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
        @echo
        @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
 
 dirhtml:
-       $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+       . $(VENV); $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) 
$(BUILDDIR)/dirhtml
        @echo
        @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
 
 pickle:
-       $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+       . $(VENV); $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
        @echo
        @echo "Build finished; now you can process the pickle files."
 
 json:
-       $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+       . $(VENV); $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
        @echo
        @echo "Build finished; now you can process the JSON files."
 
 htmlhelp:
-       $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+       . $(VENV); $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) 
$(BUILDDIR)/htmlhelp
        @echo
        @echo "Build finished; now you can run HTML Help Workshop with the" \
              ".hhp project file in $(BUILDDIR)/htmlhelp."
 
 qthelp:
-       $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+       . $(VENV); $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
        @echo
        @echo "Build finished; now you can run "qcollectiongenerator" with the" 
\
              ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@@ -66,24 +83,27 @@
        @echo "# assistant -collectionFile 
$(BUILDDIR)/qthelp/django-classy-tags.qhc"
 
 latex:
-       $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+       . $(VENV); $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
        @echo
        @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
        @echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
              "run these through (pdf)latex."
 
 changes:
-       $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+       . $(VENV); $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) 
$(BUILDDIR)/changes
        @echo
        @echo "The overview file is in $(BUILDDIR)/changes."
 
 linkcheck:
-       $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+       . $(VENV); $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) 
$(BUILDDIR)/linkcheck
        @echo
        @echo "Link check complete; look for any errors in the above output " \
              "or in $(BUILDDIR)/linkcheck/output.txt."
 
 doctest:
-       $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+       . $(VENV); $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) 
$(BUILDDIR)/doctest
        @echo "Testing of doctests in the sources finished, look at the " \
              "results in $(BUILDDIR)/doctest/output.txt."
+
+run:
+       . $(VENV); sphinx-autobuild $(ALLSPHINXOPTS) build/html --host 0.0.0.0 
--port $(PORT)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/docs/conf.py 
new/django-classy-tags-3.0.1/docs/conf.py
--- old/django-classy-tags-2.0.0/docs/conf.py   2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/docs/conf.py   2022-02-01 23:26:47.000000000 
+0100
@@ -10,8 +10,7 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
-import os
-import sys
+import datetime
 
 
 # If extensions (or modules to document with autodoc) are in another directory,
@@ -25,7 +24,9 @@
 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
 extensions = ["sphinx.ext.intersphinx"]
 
-intersphinx_mapping = {'django': 
('http://readthedocs.org/projects/eric/django/docs/', None)}
+intersphinx_mapping = {
+    'django': ('https://docs.djangoproject.com/en/3.2/', 
'https://docs.djangoproject.com/en/3.2/_objects/'),
+}
 
 # Add any paths that contain templates here, relative to this directory.
 templates_path = ['_templates']
@@ -39,18 +40,19 @@
 # The master toctree document.
 master_doc = 'index'
 
+current_year = datetime.datetime.now().year
 # General information about the project.
-project = u'django-classy-tags'
-copyright = u'2010, Jonas Obrist'
+project = 'django-classy-tags'
+copyright = f'2010-{current_year}, Jonas Obrist'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = '0.3'
+version = '3.0.1'
 # The full version, including alpha/beta/rc tags.
-release = '0.3.0'
+release = '3.0.1'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
@@ -94,7 +96,15 @@
 
 # The theme to use for HTML and HTML Help pages.  Major themes that come with
 # Sphinx are currently 'default' and 'sphinxdoc'.
-html_theme = 'default'
+try:
+    import furo
+
+    html_theme = 'furo'
+    html_theme_options = {
+        "navigation_with_keys": True,
+    }
+except ImportError:
+    html_theme = 'default'
 
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
@@ -175,8 +185,8 @@
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title, author, documentclass 
[howto/manual]).
 latex_documents = [
-  ('index', 'django-classy-tags.tex', u'django-classy-tags Documentation',
-   u'Jonas Obrist', 'manual'),
+  ('index', 'django-classy-tags.tex', 'django-classy-tags Documentation',
+   'Jonas Obrist', 'manual'),
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/docs/requirements.in 
new/django-classy-tags-3.0.1/docs/requirements.in
--- old/django-classy-tags-2.0.0/docs/requirements.in   1970-01-01 
01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/docs/requirements.in   2022-02-01 
23:26:47.000000000 +0100
@@ -0,0 +1,9 @@
+MarkupSafe
+Pygments
+furo
+Sphinx>=4.2.0
+sphinxcontrib-spelling
+pyenchant>3
+sphinx-autobuild
+datetime
+pip-tools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/docs/requirements.txt 
new/django-classy-tags-3.0.1/docs/requirements.txt
--- old/django-classy-tags-2.0.0/docs/requirements.txt  1970-01-01 
01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/docs/requirements.txt  2022-02-01 
23:26:47.000000000 +0100
@@ -0,0 +1,111 @@
+#
+# This file is autogenerated by pip-compile with python 3.9
+# To update, run:
+#
+#    pip-compile
+#
+--trusted-host pypi.python.org
+--trusted-host pypi.org
+--trusted-host files.pythonhosted.org
+
+alabaster==0.7.12
+    # via sphinx
+babel==2.9.1
+    # via sphinx
+beautifulsoup4==4.10.0
+    # via furo
+certifi==2021.10.8
+    # via requests
+charset-normalizer==2.0.10
+    # via requests
+click==8.0.3
+    # via pip-tools
+colorama==0.4.4
+    # via sphinx-autobuild
+datetime==4.3
+    # via -r requirements.in
+docutils==0.17.1
+    # via sphinx
+furo==2022.1.2
+    # via -r requirements.in
+idna==3.3
+    # via requests
+imagesize==1.3.0
+    # via sphinx
+importlib-metadata==4.10.1
+    # via sphinx
+jinja2==3.0.3
+    # via sphinx
+livereload==2.6.3
+    # via sphinx-autobuild
+markupsafe==2.0.1
+    # via
+    #   -r requirements.in
+    #   jinja2
+packaging==21.3
+    # via sphinx
+pep517==0.12.0
+    # via pip-tools
+pip-tools==6.4.0
+    # via -r requirements.in
+pyenchant==3.2.2
+    # via
+    #   -r requirements.in
+    #   sphinxcontrib-spelling
+pygments==2.11.2
+    # via
+    #   -r requirements.in
+    #   furo
+    #   sphinx
+pyparsing==3.0.7
+    # via packaging
+pytz==2021.3
+    # via
+    #   babel
+    #   datetime
+requests==2.27.1
+    # via sphinx
+six==1.16.0
+    # via livereload
+snowballstemmer==2.2.0
+    # via sphinx
+soupsieve==2.3.1
+    # via beautifulsoup4
+sphinx==4.4.0
+    # via
+    #   -r requirements.in
+    #   furo
+    #   sphinx-autobuild
+    #   sphinxcontrib-spelling
+sphinx-autobuild==2021.3.14
+    # via -r requirements.in
+sphinxcontrib-applehelp==1.0.2
+    # via sphinx
+sphinxcontrib-devhelp==1.0.2
+    # via sphinx
+sphinxcontrib-htmlhelp==2.0.0
+    # via sphinx
+sphinxcontrib-jsmath==1.0.1
+    # via sphinx
+sphinxcontrib-qthelp==1.0.3
+    # via sphinx
+sphinxcontrib-serializinghtml==1.1.5
+    # via sphinx
+sphinxcontrib-spelling==7.3.2
+    # via -r requirements.in
+tomli==2.0.0
+    # via pep517
+tornado==6.1
+    # via livereload
+urllib3==1.26.8
+    # via requests
+wheel==0.37.1
+    # via pip-tools
+zipp==3.7.0
+    # via importlib-metadata
+zope.interface==5.4.0
+    # via datetime
+
+# The following packages are considered to be unsafe in a requirements file:
+# pip
+# setuptools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/requirements.in 
new/django-classy-tags-3.0.1/requirements.in
--- old/django-classy-tags-2.0.0/requirements.in        1970-01-01 
01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/requirements.in        2022-02-01 
23:26:47.000000000 +0100
@@ -0,0 +1,5 @@
+bump2version
+Django>2.2
+pip-tools
+pre-commit
+wheel
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/requirements.txt 
new/django-classy-tags-3.0.1/requirements.txt
--- old/django-classy-tags-2.0.0/requirements.txt       1970-01-01 
01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/requirements.txt       2022-02-01 
23:26:47.000000000 +0100
@@ -0,0 +1,56 @@
+#
+# This file is autogenerated by pip-compile with python 3.9
+# To update, run:
+#
+#    pip-compile
+#
+--trusted-host pypi.python.org
+--trusted-host pypi.org
+--trusted-host files.pythonhosted.org
+
+asgiref==3.4.1
+    # via django
+bump2version==1.0.1
+    # via -r requirements.in
+cfgv==3.3.1
+    # via pre-commit
+click==8.0.3
+    # via pip-tools
+distlib==0.3.4
+    # via virtualenv
+django==4.0.1
+    # via -r requirements.in
+filelock==3.4.2
+    # via virtualenv
+identify==2.4.4
+    # via pre-commit
+nodeenv==1.6.0
+    # via pre-commit
+pep517==0.12.0
+    # via pip-tools
+pip-tools==6.4.0
+    # via -r requirements.in
+platformdirs==2.4.1
+    # via virtualenv
+pre-commit==2.17.0
+    # via -r requirements.in
+pyyaml==6.0
+    # via pre-commit
+six==1.16.0
+    # via virtualenv
+sqlparse==0.4.2
+    # via django
+toml==0.10.2
+    # via pre-commit
+tomli==2.0.0
+    # via pep517
+virtualenv==20.13.0
+    # via pre-commit
+wheel==0.37.1
+    # via
+    #   -r requirements.in
+    #   pip-tools
+
+# The following packages are considered to be unsafe in a requirements file:
+# pip
+# setuptools
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/setup.cfg 
new/django-classy-tags-3.0.1/setup.cfg
--- old/django-classy-tags-2.0.0/setup.cfg      1970-01-01 01:00:00.000000000 
+0100
+++ new/django-classy-tags-3.0.1/setup.cfg      2022-02-01 23:26:47.000000000 
+0100
@@ -0,0 +1,56 @@
+[bumpversion]
+current_version = 3.0.1
+commit = True
+tag = False
+
+[bumpversion:file:setup.py]
+search = version='{current_version}'
+replace = version='{new_version}'
+
+[bumpversion:file:classytags/__init__.py]
+search = __version__ = '{current_version}'
+replace = __version__ = '{new_version}'
+
+[bumpversion:file:docs/conf.py]
+search = '{current_version}'
+replace = '{new_version}'
+
+[bumpversion:file:CHANGELOG.rst]
+search = 
+       unreleased
+       ==========
+replace = 
+       unreleased
+       ==========
+       
+       {new_version} {utcnow:%%Y-%%m-%%d}
+       ================
+
+[flake8]
+max-line-length = 119
+exclude = 
+       *.egg-info,
+       .eggs,
+       .env,
+       .git,
+       .settings,
+       .tox,
+       .venv,
+       build,
+       data,
+       dist,
+       docs/conf.py,
+       *migrations*,
+       requirements,
+       tmp
+
+[isort]
+line_length = 119
+skip = manage.py, *migrations*, .tox, .eggs, data, .env, .venv
+include_trailing_comma = true
+multi_line_output = 5
+lines_after_imports = 2
+default_section = THIRDPARTY
+sections = FUTURE, STDLIB, DJANGO, THIRDPARTY, FIRSTPARTY, LOCALFOLDER
+known_first_party = classytags
+known_django = django
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/setup.py 
new/django-classy-tags-3.0.1/setup.py
--- old/django-classy-tags-2.0.0/setup.py       2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/setup.py       2022-02-01 23:26:47.000000000 
+0100
@@ -1,7 +1,7 @@
 #!/usr/bin/env python
-from setuptools import find_packages, setup
+from pathlib import Path
 
-from classytags import __version__
+from setuptools import find_packages, setup
 
 
 REQUIREMENTS = [
@@ -15,33 +15,39 @@
     'Intended Audience :: Developers',
     'License :: OSI Approved :: BSD License',
     'Operating System :: OS Independent',
-    'Programming Language :: Python',
     'Programming Language :: Python :: 3',
-    'Programming Language :: Python :: 3.5',
-    'Programming Language :: Python :: 3.6',
     'Programming Language :: Python :: 3.7',
     'Programming Language :: Python :: 3.8',
+    'Programming Language :: Python :: 3.9',
+    'Programming Language :: Python :: 3.10',
     'Framework :: Django',
     'Framework :: Django :: 2.2',
-    'Framework :: Django :: 3.0',
     'Framework :: Django :: 3.1',
+    'Framework :: Django :: 3.2',
+    'Framework :: Django :: 4.0',
     'Topic :: Internet :: WWW/HTTP',
     'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
     'Topic :: Software Development',
     'Topic :: Software Development :: Libraries',
 ]
 
+this_directory = Path(__file__).parent
+long_description = (this_directory / "README.rst").read_text()
 
 setup(
     name='django-classy-tags',
-    version=__version__,
+    version='3.0.1',
     author='Jonas Obrist',
     author_email='[email protected]',
-    url='http://github.com/ojii/django-classy-tags',
+    maintainer='Django CMS Association and contributors',
+    maintainer_email='[email protected]',
+    url='https://github.com/django-cms/django-classy-tags',
     license='BSD',
     description='Class based template tags for Django',
-    long_description=open('README.rst').read(),
-    packages=find_packages(),
+    long_description=long_description,
+    long_description_content_type='text/x-rst',
+    packages=find_packages(exclude=['tests']),
+    python_requires='>=3.7',
     include_package_data=True,
     zip_safe=False,
     install_requires=REQUIREMENTS,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/tests/requirements/base.txt 
new/django-classy-tags-3.0.1/tests/requirements/base.txt
--- old/django-classy-tags-2.0.0/tests/requirements/base.txt    1970-01-01 
01:00:00.000000000 +0100
+++ new/django-classy-tags-3.0.1/tests/requirements/base.txt    2022-02-01 
23:26:47.000000000 +0100
@@ -0,0 +1,4 @@
+# other requirements
+tox
+coverage
+flake8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/tests/requirements.txt 
new/django-classy-tags-3.0.1/tests/requirements.txt
--- old/django-classy-tags-2.0.0/tests/requirements.txt 2020-08-26 
11:20:50.000000000 +0200
+++ new/django-classy-tags-3.0.1/tests/requirements.txt 1970-01-01 
01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-# other requirements
-tox
-coverage
-flake8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/tests/test_core.py 
new/django-classy-tags-3.0.1/tests/test_core.py
--- old/django-classy-tags-2.0.0/tests/test_core.py     2020-08-26 
11:20:50.000000000 +0200
+++ new/django-classy-tags-3.0.1/tests/test_core.py     2022-02-01 
23:26:47.000000000 +0100
@@ -9,12 +9,9 @@
 from django.template import Context, RequestContext
 from django.test import RequestFactory
 
-from tests.context_managers import SettingsOverride, TemplateTags
-
-from classytags import (
-    arguments, core, exceptions, helpers, parser, utils, values,
-)
+from classytags import arguments, core, exceptions, helpers, parser, utils, 
values
 from classytags.blocks import BlockDefinition, VariableBlockName
+from tests.context_managers import SettingsOverride, TemplateTags
 
 
 CLASSY_TAGS_DIR = os.path.abspath(os.path.dirname(__file__))
@@ -639,7 +636,7 @@
             )
 
             def render_tag(self, context, kwargs):
-                return '|'.join('%s:%s' % (k, v) for k, v in kwargs.items())
+                return '|'.join(f'{k}:{v}' for k, v in kwargs.items())
         tpls = [
             ('{% filtered hello="world" %}', 'hello:world', {}),
             ('{% filtered hello=var %}', 'hello:world', {'var': 'world'}),
@@ -894,7 +891,7 @@
             )
 
             def render_tag(self, context, named):
-                return '%s:%s' % (
+                return '{}:{}'.format(
                     list(named.keys())[0], list(named.values())[0]
                 )
 
@@ -999,7 +996,7 @@
             )
 
             def render_tag(self, context, named):
-                return '%s:%s' % (
+                return '{}:{}'.format(
                     list(named.keys())[0], list(named.values())[0]
                 )
 
@@ -1010,7 +1007,7 @@
             )
 
             def render_tag(self, context, named):
-                return '%s:%s' % (
+                return '{}:{}'.format(
                     list(named.keys())[0], list(named.values())[0]
                 )
 
@@ -1106,8 +1103,10 @@
             )
 
             def render_tag(self, context, myarg, nodelist):
-                return "nodelist:%s;myarg:%s" % (nodelist.render(context),
-                                                 myarg)
+                return "nodelist:{};myarg:{}".format(
+                    nodelist.render(context),
+                    myarg
+                )
 
         with TemplateTags(StartBlock):
             ctx = template.Context()
@@ -1145,8 +1144,10 @@
             )
 
             def render_tag(self, context, myarg, nodelist):
-                return "nodelist:%s;myarg:%s" % (nodelist.render(context),
-                                                 myarg)
+                return "nodelist:{};myarg:{}".format(
+                    nodelist.render(context),
+                    myarg
+                )
 
         with TemplateTags(StartBlock):
             ctx = template.Context()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-classy-tags-2.0.0/tox.ini 
new/django-classy-tags-3.0.1/tox.ini
--- old/django-classy-tags-2.0.0/tox.ini        2020-08-26 11:20:50.000000000 
+0200
+++ new/django-classy-tags-3.0.1/tox.ini        2022-02-01 23:26:47.000000000 
+0100
@@ -2,45 +2,18 @@
 envlist =
     flake8
     isort
-    py{35,36,37,38}-dj{22}
-    py{36,37,38}-dj{30,31}
+    py{37,38,39}-dj{22,31,32}
+    py{38,39,310}-dj{31,32,40}
 
 skip_missing_interpreters=True
 
-[flake8]
-max-line-length = 119
-exclude =
-    *.egg-info,
-    .eggs,
-    .git,
-    .settings,
-    .tox,
-    build,
-    data,
-    dist,
-    docs,
-    *migrations*,
-    requirements,
-    tmp
-
-[isort]
-line_length = 79
-skip = manage.py, *migrations*, .tox, .eggs, data
-include_trailing_comma = true
-multi_line_output = 5
-not_skip = __init__.py
-lines_after_imports = 2
-default_section = THIRDPARTY
-sections = FUTURE, STDLIB, DJANGO, THIRDPARTY, FIRSTPARTY, LIB, LOCALFOLDER
-known_first_party = classytags
-known_django = django
-
 [testenv]
 deps =
-    -r{toxinidir}/tests/requirements.txt
+    -r{toxinidir}/tests/requirements/base.txt
     dj22: Django>=2.2,<3.0
-    dj30: Django>=3.0,<3.1
     dj31: Django>=3.1,<3.2
+    dj32: Django>=3.2,<3.3
+    dj40: Django>=4.0,<4.1
 commands =
     {envpython} --version
     {env:COMMAND:coverage} erase
@@ -53,5 +26,5 @@
 
 [testenv:isort]
 deps = isort
-commands = isort -c -rc -df classytags
+commands = isort -c --df classytags
 skip_install = true

++++++ django-4-1-support.patch ++++++
>From 191dc768b564e3b41f8f130561a4ddc51d82b9e9 Mon Sep 17 00:00:00 2001
From: Kevin Marsh <[email protected]>
Date: Fri, 23 Sep 2022 10:08:10 -0700
Subject: [PATCH 1/3] Stop supporting older deprecated Django versions (2.2 and
 3.1)

---
 .github/workflows/test.yml | 6 +-----
 .pre-commit-config.yaml    | 2 +-
 README.rst                 | 4 ++--
 requirements.in            | 2 +-
 setup.py                   | 4 +---
 tox.ini                    | 6 ++----
 6 files changed, 8 insertions(+), 16 deletions(-)

diff --git a/requirements.in b/requirements.in
index d9a47c7..ed4b0d4 100644
--- a/requirements.in
+++ b/requirements.in
@@ -1,5 +1,5 @@
 bump2version
-Django>2.2
+Django>3.2
 pip-tools
 pre-commit
 wheel
diff --git a/setup.py b/setup.py
index 212157e..bde3794 100644
--- a/setup.py
+++ b/setup.py
@@ -5,7 +5,7 @@
 
 
 REQUIREMENTS = [
-    'django>=2.2',
+    'django>=3.2',
 ]
 
 
@@ -21,8 +21,6 @@
     'Programming Language :: Python :: 3.9',
     'Programming Language :: Python :: 3.10',
     'Framework :: Django',
-    'Framework :: Django :: 2.2',
-    'Framework :: Django :: 3.1',
     'Framework :: Django :: 3.2',
     'Framework :: Django :: 4.0',
     'Topic :: Internet :: WWW/HTTP',

>From c345edf1e2180eea641a69f10939475820c6df8c Mon Sep 17 00:00:00 2001
From: Kevin Marsh <[email protected]>
Date: Fri, 23 Sep 2022 09:42:21 -0700
Subject: [PATCH 2/3] Fix `Tag` name breaking in Django 4.1

Django underwent some refactoring with regards to how it's
tag names are generated and registered in the template library

Closes #84
---
 classytags/core.py | 15 +++------------
 tests/test_core.py | 22 ++++++++++++++++++++++
 2 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/classytags/core.py b/classytags/core.py
index 9a991e1..8190e40 100644
--- a/classytags/core.py
+++ b/classytags/core.py
@@ -108,22 +108,13 @@ def parse(self, parser, tokens):
 class TagMeta(type):
     """
     Metaclass for the Tag class that set's the name attribute onto the class
-    and a _decorated_function pseudo-function which is used by Django's
-    template system to get the tag name.
     """
     def __new__(cls, name, bases, attrs):
-        parents = [base for base in bases if isinstance(base, TagMeta)]
-        if not parents:
+        if not any(base for base in bases if isinstance(base, TagMeta)):
             return super().__new__(cls, name, bases, attrs)
         tag_name = str(attrs.get('name', get_default_name(name)))
-
-        def fake_func():
-            pass  # pragma: no cover
-
-        fake_func.__name__ = tag_name
-        attrs['_decorated_function'] = fake_func
-        attrs['name'] = str(tag_name)
-        return super().__new__(cls, name, bases, attrs)
+        attrs['name'] = tag_name
+        return super().__new__(cls, tag_name, bases, attrs)
 
 
 class Tag(TagMeta('TagMeta', (Node,), {})):
diff --git a/tests/test_core.py b/tests/test_core.py
index e1cc8ae..13d6a2e 100644
--- a/tests/test_core.py
+++ b/tests/test_core.py
@@ -591,6 +591,22 @@ class MyTag2(core.Tag):
         msg = "'my_tag2' in %s" % lib.tags.keys()
         self.assertTrue('my_tag2' not in lib.tags, msg)
 
+        # test decorated naming
+        lib = template.Library()
+
+        @lib.tag(name="my_decorated_tag_5")
+        class MyTag5(core.Tag):
+            pass
+        msg = "'my_decorated_tag_5' not in %s" % lib.tags.keys()
+        self.assertTrue('my_decorated_tag_5' in lib.tags, msg)
+
+        # test decorated and explicit naming
+        # the tag registration takes precedence over the name attribute
+        lib = template.Library()
+        lib.tag('my_decorated_tag_6', MyTag2)
+        msg = "'my_decorated_tag_6' not in %s" % lib.tags.keys()
+        self.assertTrue('my_decorated_tag_6' in lib.tags, msg)
+
     def test_hello_world(self):
         class Hello(core.Tag):
             options = core.Options(
@@ -971,6 +987,12 @@ class MyTag(core.Tag):
         tag = MyTag(dummy_parser, DummyTokens())
         self.assertEqual('<Tag: mytag>', repr(tag))
 
+    def test_repr_without_explicit_name(self):
+        class MyTag(core.Tag):
+            pass
+        tag = MyTag(dummy_parser, DummyTokens())
+        self.assertEqual('<Tag: my_tag>', repr(tag))
+
     def test_non_required_multikwarg(self):
         options = core.Options(
             arguments.MultiKeywordArgument('multi', required=False),

>From 3292aeeaae38694e0efdf0842c6894efc25f6a3f Mon Sep 17 00:00:00 2001
From: Kevin Marsh <[email protected]>
Date: Fri, 23 Sep 2022 09:46:03 -0700
Subject: [PATCH 3/3] Officially support Django 4.1

---
 .github/workflows/test.yml | 5 +++--
 CHANGELOG.rst              | 4 +++-
 setup.py                   | 1 +
 tox.ini                    | 2 --
 4 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/setup.py b/setup.py
index bde3794..c8c7d43 100644
--- a/setup.py
+++ b/setup.py
@@ -23,6 +23,7 @@
     'Framework :: Django',
     'Framework :: Django :: 3.2',
     'Framework :: Django :: 4.0',
+    'Framework :: Django :: 4.1',
     'Topic :: Internet :: WWW/HTTP',
     'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
     'Topic :: Software Development',

Reply via email to