Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-django-compressor for 
openSUSE:Factory checked in at 2026-01-06 17:46:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-compressor (Old)
 and      /work/SRC/openSUSE:Factory/.python-django-compressor.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-django-compressor"

Tue Jan  6 17:46:39 2026 rev:16 rq:1325636 version:4.6.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-django-compressor/python-django-compressor.changes
        2025-06-03 17:53:46.934209534 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-django-compressor.new.1928/python-django-compressor.changes
      2026-01-06 17:47:43.189365888 +0100
@@ -1,0 +2,28 @@
+Tue Jan  6 12:41:12 UTC 2026 - Andreas Prittwitz <[email protected]>
+
+- Update to version 4.6.0
+  * build with git-tarball instead of pypi-tarball because the
+    pypi-tarball fails 438 out of 511 tests
+  * change source link to git
+  * reflect changes in git-tarball compared to pypi-tarball for the
+    %prep section by adding two new definitions:
+    %define git_tarball_name django-compressor
+    %define git_tarball_internal_version 4.6
+  * change requirements for rcssmin to 1.2.1
+  * change requirements for rjsmin to 1.2.4
+  * comment out %autopatch. No patches available at the moment
+  * remove reference to output.e3b0c44298fc.css. File does not 
+    exist anymore
+  * Fixed compatibility with latest BS4.
+  * Removed top pin for rcssmin and rjsmin dependencies.
+  * Avoid compressing the same node concurrently in offline compression.
+  * Avoid use of deprecated ast.Constant.s
+  * Officially support Django 6.0
+  * Officially support Django 5.2
+  * Drop support for EOL Django 5.0
+  * Add support for Python 3.14.
+  * Add support for Python 3.13.
+  * Drop support for EOL Python 3.9.
+  * Drop support for EOL Python 3.8.
+
+-------------------------------------------------------------------

Old:
----
  django_compressor-4.5.1.tar.gz

New:
----
  django_compressor-4.6.0.tar.gz

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

Other differences:
------------------
++++++ python-django-compressor.spec ++++++
--- /var/tmp/diff_new_pack.R2RE0j/_old  2026-01-06 17:47:43.741388598 +0100
+++ /var/tmp/diff_new_pack.R2RE0j/_new  2026-01-06 17:47:43.745388762 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package python-django-compressor
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2026 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,13 +18,15 @@
 
 %{?sle15_python_module_pythons}
 %define mod_name django_compressor
+%define git_tarball_name django-compressor
+%define git_tarball_internal_version 4.6
 Name:           python-django-compressor
-Version:        4.5.1
+Version:        4.6.0
 Release:        0
 Summary:        Python module to compress linked/inline JavaScript/CSS to 
cached files
 License:        Apache-2.0 AND BSD-3-Clause AND MIT
 URL:            https://github.com/django-compressor/django-compressor
-Source:         
https://files.pythonhosted.org/packages/source/d/%{mod_name}/%{mod_name}-%{version}.tar.gz
+Source:         
https://github.com/django-compressor/django-compressor/archive/refs/tags/%{git_tarball_internal_version}.tar.gz#/%{mod_name}-%{version}.tar.gz
 BuildRequires:  %{python_module Brotli >= 1.0.6}
 BuildRequires:  %{python_module Django >= 4.2}
 BuildRequires:  %{python_module Jinja2}
@@ -36,8 +38,8 @@
 BuildRequires:  %{python_module html5lib}
 BuildRequires:  %{python_module lxml >= 4.9.3}
 BuildRequires:  %{python_module pip}
-BuildRequires:  %{python_module rcssmin >= 1.1.1}
-BuildRequires:  %{python_module rjsmin >= 1.2.1}
+BuildRequires:  %{python_module rcssmin >= 1.2.1}
+BuildRequires:  %{python_module rjsmin >= 1.2.4}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module wheel}
 BuildRequires:  fdupes
@@ -46,8 +48,8 @@
 Requires:       python-beautifulsoup4
 Requires:       python-csscompressor
 Requires:       python-django-appconf >= 1.0.3
-Requires:       python-rcssmin >= 1.1.1
-Requires:       python-rjsmin >= 1.2.1
+Requires:       python-rcssmin >= 1.2.1
+Requires:       python-rjsmin >= 1.2.4
 Recommends:     python-Brotli >= 1.0.6
 Recommends:     python-Jinja2
 Recommends:     python-calmjs
@@ -63,8 +65,9 @@
 template tag.
 
 %prep
-%setup -q -n %{mod_name}-%{version}
-%autopatch -p1
+%setup -q -n %{git_tarball_name}-%{git_tarball_internal_version}
+# No patches available atm
+# %%autopatch -p1
 sed -i '1{/env python/d}' compressor/tests/precompiler.py
 
 %build
@@ -73,7 +76,6 @@
 %install
 %pyproject_install
 %{python_expand #
-echo '/* empty file */' >> 
%{buildroot}%{$python_sitelib}/compressor/tests/static/CACHE/css/output.e3b0c44298fc.css
 %fdupes %{buildroot}%{$python_sitelib}
 }
 

++++++ django_compressor-4.5.1.tar.gz -> django_compressor-4.6.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/.github/dependabot.yml 
new/django-compressor-4.6/.github/dependabot.yml
--- old/django_compressor-4.5.1/.github/dependabot.yml  1970-01-01 
01:00:00.000000000 +0100
+++ new/django-compressor-4.6/.github/dependabot.yml    2025-11-10 
12:14:39.000000000 +0100
@@ -0,0 +1,15 @@
+version: 2
+updates:
+- package-ecosystem: pip
+  directory: "/requirements"
+  groups:
+       PyPI:
+          patterns:
+            - "*"  # Group all PyPI updates into a single larger pull request
+  schedule:
+    interval: weekly
+  open-pull-requests-limit: 99
+- package-ecosystem: github-actions
+  directory: "/"
+  schedule:
+    interval: weekly
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/.github/workflows/ci.yml 
new/django-compressor-4.6/.github/workflows/ci.yml
--- old/django_compressor-4.5.1/.github/workflows/ci.yml        1970-01-01 
01:00:00.000000000 +0100
+++ new/django-compressor-4.6/.github/workflows/ci.yml  2025-11-10 
12:14:39.000000000 +0100
@@ -0,0 +1,59 @@
+name: CI
+
+on:
+  push:
+    branches:
+      - develop
+      - master
+  pull_request:
+
+jobs:
+  test:
+    strategy:
+      fail-fast: false
+      matrix:
+        versions:
+          - python: "3.10"
+            toxenv: py310-4.2.X
+          - python: "3.11"
+            toxenv: py311-4.2.X
+
+          - python: "3.10"
+            toxenv: py310-5.1.X
+          - python: "3.11"
+            toxenv: py311-5.1.X
+          - python: "3.12"
+            toxenv: py312-5.1.X
+          - python: "3.13"
+            toxenv: py313-5.1.X
+
+          - python: "3.10"
+            toxenv: py310-5.2.X
+          - python: "3.11"
+            toxenv: py311-5.2.X
+          - python: "3.12"
+            toxenv: py312-5.2.X
+          - python: "3.13"
+            toxenv: py313-5.2.X
+          - python: "3.14"
+            toxenv: py314-5.2.X
+
+          - python: "3.12"
+            toxenv: py312-6.0.X
+          - python: "3.13"
+            toxenv: py313-6.0.X
+          - python: "3.14"
+            toxenv: py314-6.0.X
+
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v5
+      - uses: actions/setup-python@v6
+        with:
+          python-version: ${{ matrix.versions.python }}
+      - run: |
+          pip install tox
+      - run: tox -e ${{ matrix.versions.toxenv }}
+      - run: |
+          pip install codecov
+          codecov
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/.gitignore 
new/django-compressor-4.6/.gitignore
--- old/django_compressor-4.5.1/.gitignore      1970-01-01 01:00:00.000000000 
+0100
+++ new/django-compressor-4.6/.gitignore        2025-11-10 12:14:39.000000000 
+0100
@@ -0,0 +1,19 @@
+build
+compressor/tests/static/CACHE
+compressor/tests/static/custom
+compressor/tests/static/js/066cd253eada.js
+compressor/tests/static/js/d728fc7f9301.js
+compressor/tests/static/js/74e158ccb432.js
+compressor/tests/static/js/8a0fed36c317.js
+compressor/tests/static/test.txt*
+
+dist
+MANIFEST
+*.pyc
+*.egg-info
+*.egg
+docs/_build/
+.sass-cache
+.coverage
+.tox
+.eggs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/.readthedocs.yaml 
new/django-compressor-4.6/.readthedocs.yaml
--- old/django_compressor-4.5.1/.readthedocs.yaml       1970-01-01 
01:00:00.000000000 +0100
+++ new/django-compressor-4.6/.readthedocs.yaml 2025-11-10 12:14:39.000000000 
+0100
@@ -0,0 +1,15 @@
+# Read the Docs configuration file for Sphinx projects
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+
+# Required
+version: 2
+
+# Set the OS, Python version and other tools you might need
+build:
+  os: ubuntu-22.04
+  tools:
+    python: "3.11"
+
+# Build documentation in the "docs/" directory with Sphinx
+sphinx:
+  configuration: docs/conf.py
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/PKG-INFO 
new/django-compressor-4.6/PKG-INFO
--- old/django_compressor-4.5.1/PKG-INFO        2024-07-22 11:56:16.581524400 
+0200
+++ new/django-compressor-4.6/PKG-INFO  1970-01-01 01:00:00.000000000 +0100
@@ -1,108 +0,0 @@
-Metadata-Version: 2.1
-Name: django_compressor
-Version: 4.5.1
-Summary: ('Compresses linked and inline JavaScript or CSS into single cached 
files.',)
-Home-page: https://django-compressor.readthedocs.io/en/latest/
-Maintainer: Mathieu Pillard
-License: MIT
-Project-URL: Source, https://github.com/django-compressor/django-compressor
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Framework :: Django
-Classifier: Framework :: Django :: 4.2
-Classifier: Framework :: Django :: 5.0
-Classifier: Framework :: Django :: 5.1
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Topic :: Internet :: WWW/HTTP
-Requires-Python: >=3.8
-License-File: LICENSE
-License-File: AUTHORS
-
-Django Compressor
-=================
-
-.. image:: 
https://codecov.io/github/django-compressor/django-compressor/coverage.svg?branch=develop
-    :target: 
https://codecov.io/github/django-compressor/django-compressor?branch=develop
-
-.. image:: https://img.shields.io/pypi/v/django_compressor.svg
-        :target: https://pypi.python.org/pypi/django_compressor
-
-.. image:: 
https://img.shields.io/github/actions/workflow/status/django-compressor/django-compressor/ci.yml?branch=develop
-    :alt: Build Status
-    :target: 
https://github.com/django-compressor/django-compressor/actions?query=workflow%3ACI
-
-Django Compressor processes, combines and minifies linked and inline
-Javascript or CSS in a Django template into cacheable static files.
-
-It supports compilers such as coffeescript, LESS and SASS and is
-extensible by custom processing steps.
-
-How it works
-------------
-In your templates, all HTML code between the tags ``{% compress js/css %}`` and
-``{% endcompress %}`` is parsed and searched for CSS or JS. These styles and
-scripts are subsequently processed with optional, configurable compilers and
-filters.
-
-The default filter for CSS rewrites paths to static files to be absolute.
-Both Javascript and CSS files are by default concatenated and minified.
-
-As the final step the template tag outputs a ``<script>`` or ``<link>``
-tag pointing to the optimized file. Alternatively it can also
-inline the resulting content into the original template directly.
-
-Since the file name is dependent on the content, these files can be given
-a far future expiration date without worrying about stale browser caches.
-
-For increased performance, the concatenation and compressing process
-can also be run once manually outside of the request/response cycle by using
-the Django management command ``manage.py compress``.
-
-Configurability & Extensibility
--------------------------------
-
-Django Compressor is highly configurable and extensible. The HTML parsing
-is done using lxml_ or if it's not available Python's built-in HTMLParser by
-default. As an alternative Django Compressor provides a BeautifulSoup_ and a
-html5lib_ based parser, as well as an abstract base class that makes it easy to
-write a custom parser.
-
-Django Compressor also comes with built-in support for
-`YUI CSS and JS`_ compressor, `yUglify CSS and JS`_ compressor, Google's
-`Closure Compiler`_, a Python port of Douglas Crockford's JSmin_, a Python port
-of the YUI CSS Compressor csscompressor_ and a filter to convert (some) images 
into
-`data URIs`_.
-
-If your setup requires a different compressor or other post-processing
-tool it will be fairly easy to implement a custom filter. Simply extend
-from one of the available base classes.
-
-More documentation about the usage and settings of Django Compressor can be
-found on `django-compressor.readthedocs.org`_.
-
-The source code for Django Compressor can be found and contributed to on
-`github.com/django-compressor/django-compressor`_. There you can also file 
tickets.
-
-The in-development version of Django Compressor can be installed with
-``pip install git+https://github.com/django-compressor/django-compressor.git``
-
-.. _BeautifulSoup: http://www.crummy.com/software/BeautifulSoup/
-.. _lxml: http://lxml.de/
-.. _html5lib: https://github.com/html5lib/html5lib-python
-.. _YUI CSS and JS: http://developer.yahoo.com/yui/compressor/
-.. _yUglify CSS and JS: https://github.com/yui/yuglify
-.. _Closure Compiler: http://code.google.com/closure/compiler/
-.. _JSMin: http://www.crockford.com/javascript/jsmin.html
-.. _csscompressor: https://github.com/sprymix/csscompressor
-.. _data URIs: http://en.wikipedia.org/wiki/Data_URI_scheme
-.. _django-compressor.readthedocs.org: 
https://django-compressor.readthedocs.io/en/latest/
-.. _github.com/django-compressor/django-compressor: 
https://github.com/django-compressor/django-compressor
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/compressor/__init__.py 
new/django-compressor-4.6/compressor/__init__.py
--- old/django_compressor-4.5.1/compressor/__init__.py  2024-07-21 
17:54:18.000000000 +0200
+++ new/django-compressor-4.6/compressor/__init__.py    2025-11-10 
12:14:39.000000000 +0100
@@ -1,2 +1,2 @@
 # following PEP 386
-__version__ = "4.5.1"
+__version__ = "4.6.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/management/commands/compress.py 
new/django-compressor-4.6/compressor/management/commands/compress.py
--- old/django_compressor-4.5.1/compressor/management/commands/compress.py      
2023-04-30 10:44:40.000000000 +0200
+++ new/django-compressor-4.6/compressor/management/commands/compress.py        
2025-11-10 12:14:39.000000000 +0100
@@ -32,6 +32,8 @@
 from compressor.utils import get_mod_func
 
 offline_manifest_lock = Lock()
+node_locks_lock = Lock()
+node_locks = defaultdict(Lock)
 
 
 class Command(BaseCommand):
@@ -328,8 +330,14 @@
 
                     offline_manifest[key] = None
 
+                node_id = id(node)
+
+                with node_locks_lock:
+                    node_lock = node_locks[node_id]
+
                 try:
-                    result = parser.render_node(template, context, node)
+                    with node_lock:
+                        result = parser.render_node(template, context, node)
                 except Exception as e:
                     errors.append(
                         CommandError(
@@ -339,6 +347,9 @@
                     )
                     del offline_manifest[key]
                     return
+                finally:
+                    with node_locks_lock:
+                        node_locks.pop(node_id, None)
                 result = result.replace(
                     settings.COMPRESS_URL, settings.COMPRESS_URL_PLACEHOLDER
                 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/parser/beautifulsoup.py 
new/django-compressor-4.6/compressor/parser/beautifulsoup.py
--- old/django_compressor-4.5.1/compressor/parser/beautifulsoup.py      
2023-04-30 10:44:40.000000000 +0200
+++ new/django-compressor-4.6/compressor/parser/beautifulsoup.py        
2025-11-10 12:14:39.000000000 +0100
@@ -10,7 +10,9 @@
         try:
             from bs4 import BeautifulSoup
 
-            self.soup = BeautifulSoup(self.content, "html.parser")
+            # Disable multi_valued_attributes
+            # 
http://www.crummy.com/software/BeautifulSoup/bs4/doc/#multi-valued-attributes
+            self.soup = BeautifulSoup(self.content, "html.parser", 
multi_valued_attributes=None)
         except ImportError as err:
             raise ImproperlyConfigured("Error while importing BeautifulSoup: 
%s" % err)
 
@@ -21,13 +23,7 @@
         return self.soup.find_all("script")
 
     def elem_attribs(self, elem):
-        attrs = dict(elem.attrs)
-        # hack around changed behaviour in bs4, it returns lists now instead 
of one string, see
-        # 
http://www.crummy.com/software/BeautifulSoup/bs4/doc/#multi-valued-attributes
-        for key, value in attrs.items():
-            if type(value) is list:
-                attrs[key] = " ".join(value)
-        return attrs
+        return elem.attrs
 
     def elem_content(self, elem):
         return elem.string
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/0618b11949aa.css 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/0618b11949aa.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/0618b11949aa.css  
    2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/0618b11949aa.css    
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-body{color:#fff}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/5c6a60375256.css 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/5c6a60375256.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/5c6a60375256.css  
    2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/5c6a60375256.css    
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-body{background:#990}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/600674ea1d3d.css 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/600674ea1d3d.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/600674ea1d3d.css  
    2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/600674ea1d3d.css    
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-body{background:#990}p{border:5px solid green}body{color:#fff}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/7f02c21025ae.css 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/7f02c21025ae.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/7f02c21025ae.css  
    2021-11-22 11:56:57.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/7f02c21025ae.css    
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-h1{border:5px solid green}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/919e93a2fea0.css 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/919e93a2fea0.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/919e93a2fea0.css  
    2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/919e93a2fea0.css    
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-p{border:5px solid green}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/block_name.a1e074d0c4ac.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/block_name.a1e074d0c4ac.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/block_name.a1e074d0c4ac.css
   2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/block_name.a1e074d0c4ac.css
     1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-body{background:#990}p{border:5px solid blue}body{color:#fff}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/dff24a7e6003.css 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/dff24a7e6003.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/dff24a7e6003.css  
    2021-11-22 11:56:57.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/dff24a7e6003.css    
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-p{border:10px solid red}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.187e2ce75808.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.187e2ce75808.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.187e2ce75808.css
       2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.187e2ce75808.css
 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-body{background:orange}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.44f040b05f91.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.44f040b05f91.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.44f040b05f91.css
       2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.44f040b05f91.css
 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-body{background:#990}body{color:#fff}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.600674ea1d3d.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.600674ea1d3d.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.600674ea1d3d.css
       2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.600674ea1d3d.css
 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-body{background:#990}p{border:5px solid green}body{color:#fff}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.d5444a1ab4a3.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.d5444a1ab4a3.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.d5444a1ab4a3.css
       2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.d5444a1ab4a3.css
 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-.byline:before{content:" —  "}p{border:5px solid green}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.e701f86c6430.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.e701f86c6430.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.e701f86c6430.css
       2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.e701f86c6430.css
 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-body{background:#990}p{border:5px solid white}body{color:#fff}
\ No newline at end of file
Binary files 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.e701f86c6430.css.gz
 and 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.e701f86c6430.css.gz
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.fffafcdf428e.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.fffafcdf428e.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/output.fffafcdf428e.css
       2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/output.fffafcdf428e.css
 1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-body{background:purple}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/relative_url.376db5682982.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/relative_url.376db5682982.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/relative_url.376db5682982.css
 2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/relative_url.376db5682982.css
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-p { background: url('/static/img/python.png?ccb38978f900'); }
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/relative_url.e8602322bfa6.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/relative_url.e8602322bfa6.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/relative_url.e8602322bfa6.css
 2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/relative_url.e8602322bfa6.css
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-p { background: url('../img/python.png'); }
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/test.222f958fb191.css
 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/test.222f958fb191.css
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/css/test.222f958fb191.css
 2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/css/test.222f958fb191.css
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-p { color: url('/static/images/image.gif') }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/29e69fc86958.js 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/29e69fc86958.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/29e69fc86958.js    
    2021-11-22 11:56:57.000000000 +0100
+++ new/django-compressor-4.6/compressor/tests/static/CACHE/js/29e69fc86958.js  
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-pollos={};
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/302673cb0d9e.js 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/302673cb0d9e.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/302673cb0d9e.js    
    2021-11-22 11:56:57.000000000 +0100
+++ new/django-compressor-4.6/compressor/tests/static/CACHE/js/302673cb0d9e.js  
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj={};;pollos={};
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/8a0fed36c317.js 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/8a0fed36c317.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/8a0fed36c317.js    
    2021-11-22 11:56:56.000000000 +0100
+++ new/django-compressor-4.6/compressor/tests/static/CACHE/js/8a0fed36c317.js  
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj={};;obj.value="value";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/d5474411b7a5.js 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/d5474411b7a5.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/d5474411b7a5.js    
    2021-11-22 11:56:57.000000000 +0100
+++ new/django-compressor-4.6/compressor/tests/static/CACHE/js/d5474411b7a5.js  
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-hermanos={};
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/e1cc01dd11ac.js 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/e1cc01dd11ac.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/e1cc01dd11ac.js    
    2021-11-22 11:56:57.000000000 +0100
+++ new/django-compressor-4.6/compressor/tests/static/CACHE/js/e1cc01dd11ac.js  
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj={};;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/ed0dff257832.js 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/ed0dff257832.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/ed0dff257832.js    
    2021-11-22 11:56:57.000000000 +0100
+++ new/django-compressor-4.6/compressor/tests/static/CACHE/js/ed0dff257832.js  
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj.value="value";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/one.4b3570601b8c.js
 new/django-compressor-4.6/compressor/tests/static/CACHE/js/one.4b3570601b8c.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/one.4b3570601b8c.js
    2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/one.4b3570601b8c.js  
    1970-01-01 01:00:00.000000000 +0100
@@ -1,2 +0,0 @@
-# this is a comment.
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/one.8ab93aace8fa.js
 new/django-compressor-4.6/compressor/tests/static/CACHE/js/one.8ab93aace8fa.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/one.8ab93aace8fa.js
    2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/one.8ab93aace8fa.js  
    1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj = {};
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.0241107e9a9a.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.0241107e9a9a.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.0241107e9a9a.js
 2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.0241107e9a9a.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("Hello world from django template");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.055f88f4751f.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.055f88f4751f.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.055f88f4751f.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.055f88f4751f.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("test using multiple inheritance and block.super");;alert("this alert 
shouldn't be alone!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.06a98ccfd380.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.06a98ccfd380.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.06a98ccfd380.js
 2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.06a98ccfd380.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-var test_value="Überstríng";;var test_value="—";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.2bb88185b4f5.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.2bb88185b4f5.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.2bb88185b4f5.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.2bb88185b4f5.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("testtemplatetag");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.55b3123e884c.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.55b3123e884c.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.55b3123e884c.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.55b3123e884c.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("OK 2!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.567bb77b13db.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.567bb77b13db.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.567bb77b13db.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.567bb77b13db.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-var ok="ok";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.5694ca83dd14.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.5694ca83dd14.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.5694ca83dd14.js
 2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.5694ca83dd14.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("Hello world from jinja2 template");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.6ac9e4b29feb.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.6ac9e4b29feb.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.6ac9e4b29feb.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.6ac9e4b29feb.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("OK 3!");;alert("this alert shouldn't be alone!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.7219642b8ab4.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.7219642b8ab4.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.7219642b8ab4.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.7219642b8ab4.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-var not_ok;;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.76a82cfab9ab.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.76a82cfab9ab.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.76a82cfab9ab.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.76a82cfab9ab.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("OK!");;obj={};;var test_value="—";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.817b5defb197.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.817b5defb197.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.817b5defb197.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.817b5defb197.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("test using block.super");;alert("this alert shouldn't be alone!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.822ac7501287.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.822ac7501287.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.822ac7501287.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.822ac7501287.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("Basic test");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.8a0fed36c317.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.8a0fed36c317.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.8a0fed36c317.js
 2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.8a0fed36c317.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj={};;obj.value="value";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.8b4a7452e1c5.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.8b4a7452e1c5.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.8b4a7452e1c5.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.8b4a7452e1c5.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("OK 1!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.8c00f1cf1e0a.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.8c00f1cf1e0a.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.8c00f1cf1e0a.js
 2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.8c00f1cf1e0a.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-var test_value="—";;var test_value="—";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.9a7f06880ce3.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.9a7f06880ce3.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.9a7f06880ce3.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.9a7f06880ce3.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-a=1;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.9cecd41a505f.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.9cecd41a505f.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.9cecd41a505f.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.9cecd41a505f.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("test using multiple inheritance and block.super");;alert("this alert 
should be included");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.a3275743dc69.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.a3275743dc69.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.a3275743dc69.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.a3275743dc69.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("red");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.b0bfc3754fd4.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.b0bfc3754fd4.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.b0bfc3754fd4.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.b0bfc3754fd4.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-STATIC_URL='/custom/static/url/';;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.b39975a8f6ea.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.b39975a8f6ea.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.b39975a8f6ea.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.b39975a8f6ea.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("OK 1!");;alert("this alert shouldn't be alone!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.b8376aad1357.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.b8376aad1357.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.b8376aad1357.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.b8376aad1357.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("test using template extension passed in variable parent=base.html");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.be0b1eade28b.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.be0b1eade28b.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.be0b1eade28b.js
 2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.be0b1eade28b.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert('amazing');;obj={};;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.bfc63829cc58.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.bfc63829cc58.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.bfc63829cc58.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.bfc63829cc58.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("OK 3!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.bfcec76e0f28.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.bfcec76e0f28.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.bfcec76e0f28.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.bfcec76e0f28.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("this alert should be alone.");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.c6bf81bca7ad.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.c6bf81bca7ad.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.c6bf81bca7ad.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.c6bf81bca7ad.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("OK!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.c877c436363a.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.c877c436363a.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.c877c436363a.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.c877c436363a.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("test using template extension passed in variable parent=base2.html");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.cee48db7cedc.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.cee48db7cedc.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.cee48db7cedc.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.cee48db7cedc.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("test using template extension passed in variable parent=base1.html");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.d3f749e83c81.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.d3f749e83c81.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.d3f749e83c81.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.d3f749e83c81.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("test using multiple inheritance and block.super");;alert("this alert 
should be included");;alert("this alert shouldn't be alone!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.dd79e1bd1527.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.dd79e1bd1527.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.dd79e1bd1527.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.dd79e1bd1527.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("OK!");;alert("this alert shouldn't be alone!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.e4d043b4cde4.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.e4d043b4cde4.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.e4d043b4cde4.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.e4d043b4cde4.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert('test');;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.e4e9263fa4c0.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.e4e9263fa4c0.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.e4e9263fa4c0.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.e4e9263fa4c0.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("test using multiple inheritance and block.super");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.e682d84f6b17.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.e682d84f6b17.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.e682d84f6b17.js
 2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.e682d84f6b17.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj={};;pollos={};hermanos={};
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.ec862f0ff42c.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.ec862f0ff42c.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.ec862f0ff42c.js
 2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.ec862f0ff42c.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#this is a comment.;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.ed565a1d262f.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.ed565a1d262f.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.ed565a1d262f.js
 2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.ed565a1d262f.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("OK 2!");;alert("this alert shouldn't be alone!");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.eeabdac29232.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.eeabdac29232.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.eeabdac29232.js
 2024-07-06 15:02:49.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.eeabdac29232.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("Basic test, should pass in spite of errors in other templates");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.fb4a0d84e914.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.fb4a0d84e914.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.fb4a0d84e914.js
 2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.fb4a0d84e914.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-#this is a comment.;#this too is a comment.;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.ffc39dec05fd.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.ffc39dec05fd.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output.ffc39dec05fd.js
 2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output.ffc39dec05fd.js
   1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-var tmpl="{% if x == 3 %}x IS 3{% endif %}";
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output_name.822ac7501287.js
 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output_name.822ac7501287.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/js/output_name.822ac7501287.js
    2024-07-06 15:02:48.000000000 +0200
+++ 
new/django-compressor-4.6/compressor/tests/static/CACHE/js/output_name.822ac7501287.js
      1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-alert("Basic test");;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/CACHE/test.txt 
new/django-compressor-4.6/compressor/tests/static/CACHE/test.txt
--- old/django_compressor-4.5.1/compressor/tests/static/CACHE/test.txt  
2024-07-06 15:02:49.000000000 +0200
+++ new/django-compressor-4.6/compressor/tests/static/CACHE/test.txt    
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-yeah yeah
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/custom/js/8a0fed36c317.js 
new/django-compressor-4.6/compressor/tests/static/custom/js/8a0fed36c317.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/custom/js/8a0fed36c317.js   
    2021-11-22 11:56:56.000000000 +0100
+++ new/django-compressor-4.6/compressor/tests/static/custom/js/8a0fed36c317.js 
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj={};;obj.value="value";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/custom/nested/js/8a0fed36c317.js
 
new/django-compressor-4.6/compressor/tests/static/custom/nested/js/8a0fed36c317.js
--- 
old/django_compressor-4.5.1/compressor/tests/static/custom/nested/js/8a0fed36c317.js
        2021-11-22 11:56:56.000000000 +0100
+++ 
new/django-compressor-4.6/compressor/tests/static/custom/nested/js/8a0fed36c317.js
  1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj={};;obj.value="value";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/js/8a0fed36c317.js 
new/django-compressor-4.6/compressor/tests/static/js/8a0fed36c317.js
--- old/django_compressor-4.5.1/compressor/tests/static/js/8a0fed36c317.js      
2021-11-22 11:56:56.000000000 +0100
+++ new/django-compressor-4.6/compressor/tests/static/js/8a0fed36c317.js        
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-obj={};;obj.value="value";;
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/static/test.txt 
new/django-compressor-4.6/compressor/tests/static/test.txt
--- old/django_compressor-4.5.1/compressor/tests/static/test.txt        
2024-07-06 15:02:49.000000000 +0200
+++ new/django-compressor-4.6/compressor/tests/static/test.txt  1970-01-01 
01:00:00.000000000 +0100
@@ -1 +0,0 @@
-yeah yeah
\ No newline at end of file
Binary files old/django_compressor-4.5.1/compressor/tests/static/test.txt.br 
and new/django-compressor-4.6/compressor/tests/static/test.txt.br differ
Binary files old/django_compressor-4.5.1/compressor/tests/static/test.txt.gz 
and new/django-compressor-4.6/compressor/tests/static/test.txt.gz differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/compressor/tests/test_offline.py 
new/django-compressor-4.6/compressor/tests/test_offline.py
--- old/django_compressor-4.5.1/compressor/tests/test_offline.py        
2024-06-09 10:44:46.000000000 +0200
+++ new/django-compressor-4.6/compressor/tests/test_offline.py  2025-11-10 
12:14:39.000000000 +0100
@@ -3,13 +3,14 @@
 import os
 from contextlib import contextmanager
 from importlib import import_module
+import threading
 from unittest import SkipTest
 from unittest.mock import patch
 
+
 from django.conf import settings
 from django.core.management import call_command, CommandError
 from django.template import Context, Origin, Template
-from django.test import override_settings, TestCase
 from django.urls import get_script_prefix, set_script_prefix
 
 from compressor.cache import flush_offline_manifest, get_offline_manifest
@@ -19,6 +20,12 @@
 from compressor.utils import get_mod_func
 
 
+import time
+import types
+
+from django.test import TestCase, override_settings
+
+
 def offline_context_generator():
     for i in range(1, 4):
         yield {"content": "OK %d!" % i}
@@ -942,3 +949,104 @@
 
                 self.assertEqual(actual_result, expected_result)
                 self.assertIn(str(settings.COMPRESS_URL), actual_result)
+
+
+@override_settings(COMPRESS_URL="/static/", 
COMPRESS_URL_PLACEHOLDER="__STATIC__")
+class OfflineCompressPerNodeLockingTestCase(TestCase):
+    """
+    Validates that the per-node lock prevents concurrent render of the same 
node,
+    but does allow concurrent rendering of different nodes.
+    """
+
+    class DummyNode():
+        def __init__(self, rendered):
+            self.rendered = rendered
+
+    def _make_parser(self, active, max_active, active_lock):
+        def process_template(template, context):
+            return True
+
+        def process_node(template, context, node):
+            return True
+
+        def render_nodelist(template, context, node):
+            return "nodelist-rendered " + node.rendered
+
+        def render_node(template, context, node):
+            with active_lock:
+                # keep track of how many concurrent "render_node"
+                # methods are called (by Command._compress_template)
+                active[0] += 1
+                if active[0] > max_active[0]:
+                    max_active[0] = active[0]
+            try:
+                # time.sleep(1) to pretend that it takes 1 second to render
+                # the node (and allows the unit tests to exercise the
+                # waiting for one the node rendering before doing the same
+                # one again)
+                time.sleep(1)
+                return node.rendered
+            finally:
+                with active_lock:
+                    active[0] -= 1
+
+        return types.SimpleNamespace(render_nodelist=render_nodelist, 
process_template=process_template, process_node=process_node, 
render_node=render_node)
+
+    def _call_compress_template(self, nodes, parser, offline_manifest, errors):
+        from compressor.management.commands.compress import Command
+
+        class DummyTemplate:
+            template_name = "dummy.html"
+
+        template = DummyTemplate()
+        Command._compress_template(offline_manifest, nodes, parser, template, 
errors)
+
+    def _assert_concurrency(self, nodes_1, nodes_2, expected_max_active):
+        # Shared state to measure concurrency
+        active = [0]      # current in-flight renders
+        max_active = [0]  # max observed concurrent renders
+        active_lock = threading.Lock()
+
+        parser_1 = self._make_parser(active, max_active, active_lock)
+        parser_2 = self._make_parser(active, max_active, active_lock)
+
+        offline_manifest_1, offline_manifest_2 = {}, {}
+        errors_1, errors_2 = [], []
+
+        thread_1 = threading.Thread(
+            target=self._call_compress_template,
+            args=(nodes_1, parser_1, offline_manifest_1, errors_1),
+        )
+        thread_2 = threading.Thread(
+            target=self._call_compress_template,
+            args=(nodes_2, parser_2, offline_manifest_2, errors_2),
+        )
+
+        thread_1.start()
+        thread_2.start()
+
+        thread_1.join()
+        thread_2.join()
+
+        self.assertFalse(thread_1.is_alive())
+        self.assertFalse(thread_2.is_alive())
+
+        self.assertEqual(max_active[0], expected_max_active)
+
+        self.assertFalse(errors_1)
+        self.assertFalse(errors_2)
+
+    def test_same_node_is_not_rendered_concurrently(self):
+        shared_node = OfflineCompressPerNodeLockingTestCase.DummyNode("node")
+        nodes = {shared_node: [Context({})]}
+
+        self._assert_concurrency(nodes, nodes, expected_max_active=1)
+
+    def test_different_nodes_are_render_concurrently(self):
+        node_1 = OfflineCompressPerNodeLockingTestCase.DummyNode("node-1")
+        node_2 = OfflineCompressPerNodeLockingTestCase.DummyNode("node-2")
+
+        nodes_1 = {node_1: [Context({})]}
+        nodes_2 = {node_2: [Context({})]}
+
+        self._assert_concurrency(nodes_1, nodes_2, expected_max_active=2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/django_compressor.egg-info/PKG-INFO 
new/django-compressor-4.6/django_compressor.egg-info/PKG-INFO
--- old/django_compressor-4.5.1/django_compressor.egg-info/PKG-INFO     
2024-07-22 11:56:16.000000000 +0200
+++ new/django-compressor-4.6/django_compressor.egg-info/PKG-INFO       
1970-01-01 01:00:00.000000000 +0100
@@ -1,108 +0,0 @@
-Metadata-Version: 2.1
-Name: django-compressor
-Version: 4.5.1
-Summary: ('Compresses linked and inline JavaScript or CSS into single cached 
files.',)
-Home-page: https://django-compressor.readthedocs.io/en/latest/
-Maintainer: Mathieu Pillard
-License: MIT
-Project-URL: Source, https://github.com/django-compressor/django-compressor
-Platform: UNKNOWN
-Classifier: Development Status :: 5 - Production/Stable
-Classifier: Framework :: Django
-Classifier: Framework :: Django :: 4.2
-Classifier: Framework :: Django :: 5.0
-Classifier: Framework :: Django :: 5.1
-Classifier: Intended Audience :: Developers
-Classifier: License :: OSI Approved :: MIT License
-Classifier: Operating System :: OS Independent
-Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 3 :: Only
-Classifier: Programming Language :: Python :: 3.10
-Classifier: Programming Language :: Python :: 3.11
-Classifier: Programming Language :: Python :: 3.12
-Classifier: Topic :: Internet :: WWW/HTTP
-Requires-Python: >=3.8
-License-File: LICENSE
-License-File: AUTHORS
-
-Django Compressor
-=================
-
-.. image:: 
https://codecov.io/github/django-compressor/django-compressor/coverage.svg?branch=develop
-    :target: 
https://codecov.io/github/django-compressor/django-compressor?branch=develop
-
-.. image:: https://img.shields.io/pypi/v/django_compressor.svg
-        :target: https://pypi.python.org/pypi/django_compressor
-
-.. image:: 
https://img.shields.io/github/actions/workflow/status/django-compressor/django-compressor/ci.yml?branch=develop
-    :alt: Build Status
-    :target: 
https://github.com/django-compressor/django-compressor/actions?query=workflow%3ACI
-
-Django Compressor processes, combines and minifies linked and inline
-Javascript or CSS in a Django template into cacheable static files.
-
-It supports compilers such as coffeescript, LESS and SASS and is
-extensible by custom processing steps.
-
-How it works
-------------
-In your templates, all HTML code between the tags ``{% compress js/css %}`` and
-``{% endcompress %}`` is parsed and searched for CSS or JS. These styles and
-scripts are subsequently processed with optional, configurable compilers and
-filters.
-
-The default filter for CSS rewrites paths to static files to be absolute.
-Both Javascript and CSS files are by default concatenated and minified.
-
-As the final step the template tag outputs a ``<script>`` or ``<link>``
-tag pointing to the optimized file. Alternatively it can also
-inline the resulting content into the original template directly.
-
-Since the file name is dependent on the content, these files can be given
-a far future expiration date without worrying about stale browser caches.
-
-For increased performance, the concatenation and compressing process
-can also be run once manually outside of the request/response cycle by using
-the Django management command ``manage.py compress``.
-
-Configurability & Extensibility
--------------------------------
-
-Django Compressor is highly configurable and extensible. The HTML parsing
-is done using lxml_ or if it's not available Python's built-in HTMLParser by
-default. As an alternative Django Compressor provides a BeautifulSoup_ and a
-html5lib_ based parser, as well as an abstract base class that makes it easy to
-write a custom parser.
-
-Django Compressor also comes with built-in support for
-`YUI CSS and JS`_ compressor, `yUglify CSS and JS`_ compressor, Google's
-`Closure Compiler`_, a Python port of Douglas Crockford's JSmin_, a Python port
-of the YUI CSS Compressor csscompressor_ and a filter to convert (some) images 
into
-`data URIs`_.
-
-If your setup requires a different compressor or other post-processing
-tool it will be fairly easy to implement a custom filter. Simply extend
-from one of the available base classes.
-
-More documentation about the usage and settings of Django Compressor can be
-found on `django-compressor.readthedocs.org`_.
-
-The source code for Django Compressor can be found and contributed to on
-`github.com/django-compressor/django-compressor`_. There you can also file 
tickets.
-
-The in-development version of Django Compressor can be installed with
-``pip install git+https://github.com/django-compressor/django-compressor.git``
-
-.. _BeautifulSoup: http://www.crummy.com/software/BeautifulSoup/
-.. _lxml: http://lxml.de/
-.. _html5lib: https://github.com/html5lib/html5lib-python
-.. _YUI CSS and JS: http://developer.yahoo.com/yui/compressor/
-.. _yUglify CSS and JS: https://github.com/yui/yuglify
-.. _Closure Compiler: http://code.google.com/closure/compiler/
-.. _JSMin: http://www.crockford.com/javascript/jsmin.html
-.. _csscompressor: https://github.com/sprymix/csscompressor
-.. _data URIs: http://en.wikipedia.org/wiki/Data_URI_scheme
-.. _django-compressor.readthedocs.org: 
https://django-compressor.readthedocs.io/en/latest/
-.. _github.com/django-compressor/django-compressor: 
https://github.com/django-compressor/django-compressor
-
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/django_compressor.egg-info/SOURCES.txt 
new/django-compressor-4.6/django_compressor.egg-info/SOURCES.txt
--- old/django_compressor-4.5.1/django_compressor.egg-info/SOURCES.txt  
2024-07-22 11:56:16.000000000 +0200
+++ new/django-compressor-4.6/django_compressor.egg-info/SOURCES.txt    
1970-01-01 01:00:00.000000000 +0100
@@ -1,257 +0,0 @@
-AUTHORS
-LICENSE
-MANIFEST.in
-Makefile
-README.rst
-setup.cfg
-setup.py
-tox.ini
-compressor/__init__.py
-compressor/base.py
-compressor/cache.py
-compressor/conf.py
-compressor/css.py
-compressor/exceptions.py
-compressor/finders.py
-compressor/js.py
-compressor/models.py
-compressor/signals.py
-compressor/storage.py
-compressor/test_settings.py
-compressor/contrib/__init__.py
-compressor/contrib/jinja2ext.py
-compressor/contrib/sekizai.py
-compressor/filters/__init__.py
-compressor/filters/base.py
-compressor/filters/cleancss.py
-compressor/filters/closure.py
-compressor/filters/css_default.py
-compressor/filters/datauri.py
-compressor/filters/template.py
-compressor/filters/yuglify.py
-compressor/filters/yui.py
-compressor/filters/cssmin/__init__.py
-compressor/filters/jsmin/__init__.py
-compressor/management/__init__.py
-compressor/management/commands/__init__.py
-compressor/management/commands/compress.py
-compressor/management/commands/mtime_cache.py
-compressor/offline/__init__.py
-compressor/offline/django.py
-compressor/offline/jinja2.py
-compressor/parser/__init__.py
-compressor/parser/base.py
-compressor/parser/beautifulsoup.py
-compressor/parser/default_htmlparser.py
-compressor/parser/html5lib.py
-compressor/parser/lxml.py
-compressor/templates/compressor/css_file.html
-compressor/templates/compressor/css_inline.html
-compressor/templates/compressor/css_preload.html
-compressor/templates/compressor/js_file.html
-compressor/templates/compressor/js_inline.html
-compressor/templates/compressor/js_preload.html
-compressor/templatetags/__init__.py
-compressor/templatetags/compress.py
-compressor/tests/__init__.py
-compressor/tests/precompiler.py
-compressor/tests/test_base.py
-compressor/tests/test_conf.py
-compressor/tests/test_filters.py
-compressor/tests/test_finder.py
-compressor/tests/test_jinja2ext.py
-compressor/tests/test_mtime_cache.py
-compressor/tests/test_offline.py
-compressor/tests/test_parsers.py
-compressor/tests/test_sekizai.py
-compressor/tests/test_signals.py
-compressor/tests/test_storages.py
-compressor/tests/test_templatetags.py
-compressor/tests/test_utils.py
-compressor/tests/static/test.txt
-compressor/tests/static/test.txt.br
-compressor/tests/static/test.txt.gz
-compressor/tests/static/CACHE/test.txt
-compressor/tests/static/CACHE/css/0618b11949aa.css
-compressor/tests/static/CACHE/css/5c6a60375256.css
-compressor/tests/static/CACHE/css/600674ea1d3d.css
-compressor/tests/static/CACHE/css/7f02c21025ae.css
-compressor/tests/static/CACHE/css/919e93a2fea0.css
-compressor/tests/static/CACHE/css/block_name.a1e074d0c4ac.css
-compressor/tests/static/CACHE/css/dff24a7e6003.css
-compressor/tests/static/CACHE/css/output.187e2ce75808.css
-compressor/tests/static/CACHE/css/output.44f040b05f91.css
-compressor/tests/static/CACHE/css/output.600674ea1d3d.css
-compressor/tests/static/CACHE/css/output.d5444a1ab4a3.css
-compressor/tests/static/CACHE/css/output.e3b0c44298fc.css
-compressor/tests/static/CACHE/css/output.e701f86c6430.css
-compressor/tests/static/CACHE/css/output.e701f86c6430.css.gz
-compressor/tests/static/CACHE/css/output.fffafcdf428e.css
-compressor/tests/static/CACHE/css/relative_url.376db5682982.css
-compressor/tests/static/CACHE/css/relative_url.e8602322bfa6.css
-compressor/tests/static/CACHE/css/test.222f958fb191.css
-compressor/tests/static/CACHE/js/29e69fc86958.js
-compressor/tests/static/CACHE/js/302673cb0d9e.js
-compressor/tests/static/CACHE/js/8a0fed36c317.js
-compressor/tests/static/CACHE/js/d5474411b7a5.js
-compressor/tests/static/CACHE/js/e1cc01dd11ac.js
-compressor/tests/static/CACHE/js/ed0dff257832.js
-compressor/tests/static/CACHE/js/one.4b3570601b8c.js
-compressor/tests/static/CACHE/js/one.8ab93aace8fa.js
-compressor/tests/static/CACHE/js/output.0241107e9a9a.js
-compressor/tests/static/CACHE/js/output.055f88f4751f.js
-compressor/tests/static/CACHE/js/output.06a98ccfd380.js
-compressor/tests/static/CACHE/js/output.2bb88185b4f5.js
-compressor/tests/static/CACHE/js/output.55b3123e884c.js
-compressor/tests/static/CACHE/js/output.567bb77b13db.js
-compressor/tests/static/CACHE/js/output.5694ca83dd14.js
-compressor/tests/static/CACHE/js/output.6ac9e4b29feb.js
-compressor/tests/static/CACHE/js/output.7219642b8ab4.js
-compressor/tests/static/CACHE/js/output.76a82cfab9ab.js
-compressor/tests/static/CACHE/js/output.817b5defb197.js
-compressor/tests/static/CACHE/js/output.822ac7501287.js
-compressor/tests/static/CACHE/js/output.8a0fed36c317.js
-compressor/tests/static/CACHE/js/output.8b4a7452e1c5.js
-compressor/tests/static/CACHE/js/output.8c00f1cf1e0a.js
-compressor/tests/static/CACHE/js/output.9a7f06880ce3.js
-compressor/tests/static/CACHE/js/output.9cecd41a505f.js
-compressor/tests/static/CACHE/js/output.a3275743dc69.js
-compressor/tests/static/CACHE/js/output.b0bfc3754fd4.js
-compressor/tests/static/CACHE/js/output.b39975a8f6ea.js
-compressor/tests/static/CACHE/js/output.b8376aad1357.js
-compressor/tests/static/CACHE/js/output.be0b1eade28b.js
-compressor/tests/static/CACHE/js/output.bfc63829cc58.js
-compressor/tests/static/CACHE/js/output.bfcec76e0f28.js
-compressor/tests/static/CACHE/js/output.c6bf81bca7ad.js
-compressor/tests/static/CACHE/js/output.c877c436363a.js
-compressor/tests/static/CACHE/js/output.cee48db7cedc.js
-compressor/tests/static/CACHE/js/output.d3f749e83c81.js
-compressor/tests/static/CACHE/js/output.dd79e1bd1527.js
-compressor/tests/static/CACHE/js/output.e4d043b4cde4.js
-compressor/tests/static/CACHE/js/output.e4e9263fa4c0.js
-compressor/tests/static/CACHE/js/output.e682d84f6b17.js
-compressor/tests/static/CACHE/js/output.ec862f0ff42c.js
-compressor/tests/static/CACHE/js/output.ed565a1d262f.js
-compressor/tests/static/CACHE/js/output.eeabdac29232.js
-compressor/tests/static/CACHE/js/output.fb4a0d84e914.js
-compressor/tests/static/CACHE/js/output.ffc39dec05fd.js
-compressor/tests/static/CACHE/js/output_name.822ac7501287.js
-compressor/tests/static/css/datauri.css
-compressor/tests/static/css/filename with spaces.css
-compressor/tests/static/css/nonasc.css
-compressor/tests/static/css/one.css
-compressor/tests/static/css/relative_url.css
-compressor/tests/static/css/two.css
-compressor/tests/static/css/utf-8_with-BOM.css
-compressor/tests/static/css/url/nonasc.css
-compressor/tests/static/css/url/test.css
-compressor/tests/static/css/url/url1.css
-compressor/tests/static/css/url/2/url2.css
-compressor/tests/static/custom/js/8a0fed36c317.js
-compressor/tests/static/custom/nested/js/8a0fed36c317.js
-compressor/tests/static/img/add with spaces.png
-compressor/tests/static/img/add.png
-compressor/tests/static/img/python.png
-compressor/tests/static/js/8a0fed36c317.js
-compressor/tests/static/js/nonasc-latin1.js
-compressor/tests/static/js/nonasc.js
-compressor/tests/static/js/one.coffee
-compressor/tests/static/js/one.js
-compressor/tests/static/js/three.js
-compressor/tests/static/js/two.js
-compressor/tests/test_templates/basic/test_compressor_offline.html
-compressor/tests/test_templates/test_block_super/base.html
-compressor/tests/test_templates/test_block_super/test_compressor_offline.html
-compressor/tests/test_templates/test_block_super_base_compressed/base.html
-compressor/tests/test_templates/test_block_super_base_compressed/base2.html
-compressor/tests/test_templates/test_block_super_base_compressed/test_compressor_offline.html
-compressor/tests/test_templates/test_block_super_extra/base.html
-compressor/tests/test_templates/test_block_super_extra/test_compressor_offline.html
-compressor/tests/test_templates/test_block_super_multiple/base.html
-compressor/tests/test_templates/test_block_super_multiple/base2.html
-compressor/tests/test_templates/test_block_super_multiple/test_compressor_offline.html
-compressor/tests/test_templates/test_block_super_multiple_cached/base.html
-compressor/tests/test_templates/test_block_super_multiple_cached/base2.html
-compressor/tests/test_templates/test_block_super_multiple_cached/test_compressor_offline.html
-compressor/tests/test_templates/test_complex/test_compressor_offline.html
-compressor/tests/test_templates/test_compress_command/test_compressor_offline.html
-compressor/tests/test_templates/test_condition/test_compressor_offline.html
-compressor/tests/test_templates/test_duplicate/test_compressor_offline.html
-compressor/tests/test_templates/test_error_handling/buggy_extends.html
-compressor/tests/test_templates/test_error_handling/buggy_template.html
-compressor/tests/test_templates/test_error_handling/missing_extends.html
-compressor/tests/test_templates/test_error_handling/test_compressor_offline.html
-compressor/tests/test_templates/test_error_handling/with_coffeescript.html
-compressor/tests/test_templates/test_extends_recursion/test_compressor_offline.html
-compressor/tests/test_templates/test_extends_recursion/admin/index.html
-compressor/tests/test_templates/test_extends_relative/base.html
-compressor/tests/test_templates/test_extends_relative/test_compressor_offline.html
-compressor/tests/test_templates/test_inline_non_ascii/test_compressor_offline.html
-compressor/tests/test_templates/test_static_templatetag/test_compressor_offline.html
-compressor/tests/test_templates/test_static_url_independence/test_compressor_offline.html
-compressor/tests/test_templates/test_templatetag/test_compressor_offline.html
-compressor/tests/test_templates/test_templatetag_named/test_compressor_offline.html
-compressor/tests/test_templates/test_with_context/test_compressor_offline.html
-compressor/tests/test_templates/test_with_context_super/base.html
-compressor/tests/test_templates/test_with_context_super/test_compressor_offline.html
-compressor/tests/test_templates/test_with_context_variable_inheritance/base.html
-compressor/tests/test_templates/test_with_context_variable_inheritance/test_compressor_offline.html
-compressor/tests/test_templates/test_with_context_variable_inheritance_super/base1.html
-compressor/tests/test_templates/test_with_context_variable_inheritance_super/base2.html
-compressor/tests/test_templates/test_with_context_variable_inheritance_super/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/basic/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_block_super/base.html
-compressor/tests/test_templates_jinja2/test_block_super/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_block_super_extra/base.html
-compressor/tests/test_templates_jinja2/test_block_super_extra/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_block_super_multiple/base.html
-compressor/tests/test_templates_jinja2/test_block_super_multiple/base2.html
-compressor/tests/test_templates_jinja2/test_block_super_multiple/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_block_super_multiple_cached/base.html
-compressor/tests/test_templates_jinja2/test_block_super_multiple_cached/base2.html
-compressor/tests/test_templates_jinja2/test_block_super_multiple_cached/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_coffin/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_complex/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_compress_command/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_condition/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_duplicate/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_error_handling/buggy_extends.html
-compressor/tests/test_templates_jinja2/test_error_handling/buggy_template.html
-compressor/tests/test_templates_jinja2/test_error_handling/missing_extends.html
-compressor/tests/test_templates_jinja2/test_error_handling/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_error_handling/with_coffeescript.html
-compressor/tests/test_templates_jinja2/test_extends_recursion/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_extends_recursion/admin/index.html
-compressor/tests/test_templates_jinja2/test_inline_non_ascii/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_jingo/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_static_templatetag/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_static_url_independence/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_templatetag/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_templatetag_named/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_with_context/test_compressor_offline.html
-compressor/tests/test_templates_jinja2/test_with_context_variable_inheritance/base.html
-compressor/tests/test_templates_jinja2/test_with_context_variable_inheritance/test_compressor_offline.html
-compressor/utils/__init__.py
-compressor/utils/staticfiles.py
-django_compressor.egg-info/PKG-INFO
-django_compressor.egg-info/SOURCES.txt
-django_compressor.egg-info/dependency_links.txt
-django_compressor.egg-info/not-zip-safe
-django_compressor.egg-info/requires.txt
-django_compressor.egg-info/top_level.txt
-docs/Makefile
-docs/behind-the-scenes.txt
-docs/changelog.txt
-docs/conf.py
-docs/contributing.txt
-docs/django-sekizai.txt
-docs/index.txt
-docs/jinja2.txt
-docs/make.bat
-docs/quickstart.txt
-docs/reactjs.txt
-docs/remote-storages.txt
-docs/scenarios.txt
-docs/settings.txt
-docs/usage.txt
-requirements/tests.txt
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/django_compressor.egg-info/dependency_links.txt 
new/django-compressor-4.6/django_compressor.egg-info/dependency_links.txt
--- old/django_compressor-4.5.1/django_compressor.egg-info/dependency_links.txt 
2024-07-22 11:56:16.000000000 +0200
+++ new/django-compressor-4.6/django_compressor.egg-info/dependency_links.txt   
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/django_compressor.egg-info/not-zip-safe 
new/django-compressor-4.6/django_compressor.egg-info/not-zip-safe
--- old/django_compressor-4.5.1/django_compressor.egg-info/not-zip-safe 
2021-11-22 11:54:58.000000000 +0100
+++ new/django-compressor-4.6/django_compressor.egg-info/not-zip-safe   
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/django_compressor.egg-info/requires.txt 
new/django-compressor-4.6/django_compressor.egg-info/requires.txt
--- old/django_compressor-4.5.1/django_compressor.egg-info/requires.txt 
2024-07-22 11:56:16.000000000 +0200
+++ new/django-compressor-4.6/django_compressor.egg-info/requires.txt   
1970-01-01 01:00:00.000000000 +0100
@@ -1,4 +0,0 @@
-Django>=4.2
-django-appconf>=1.0.3
-rcssmin==1.1.2
-rjsmin==1.2.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django_compressor-4.5.1/django_compressor.egg-info/top_level.txt 
new/django-compressor-4.6/django_compressor.egg-info/top_level.txt
--- old/django_compressor-4.5.1/django_compressor.egg-info/top_level.txt        
2024-07-22 11:56:16.000000000 +0200
+++ new/django-compressor-4.6/django_compressor.egg-info/top_level.txt  
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-compressor
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/docs/changelog.txt 
new/django-compressor-4.6/docs/changelog.txt
--- old/django_compressor-4.5.1/docs/changelog.txt      2024-07-21 
17:54:58.000000000 +0200
+++ new/django-compressor-4.6/docs/changelog.txt        2025-11-10 
12:14:39.000000000 +0100
@@ -1,6 +1,23 @@
 Changelog
 =========
 
+v4.6 (2025-11-10)
+-----------------
+
+`Full list of changes from v4.5.1 
<https://github.com/django-compressor/django-compressor/compare/4.5.1...4.6>`_
+
+- Fixed compatibility with latest BS4.
+- Removed top pin for rcssmin and rjsmin dependencies.
+- Avoid compressing the same node concurrently in offline compression.
+- Avoid use of deprecated ast.Constant.s
+- Officially support Django 6.0
+- Officially support Django 5.2
+- Drop support for EOL Django 5.0
+- Add support for Python 3.14.
+- Add support for Python 3.13.
+- Drop support for EOL Python 3.9.
+- Drop support for EOL Python 3.8.
+
 v4.5.1 (2024-07-22)
 -------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/pyproject.toml 
new/django-compressor-4.6/pyproject.toml
--- old/django_compressor-4.5.1/pyproject.toml  1970-01-01 01:00:00.000000000 
+0100
+++ new/django-compressor-4.6/pyproject.toml    2025-11-10 12:14:39.000000000 
+0100
@@ -0,0 +1,47 @@
+[build-system]
+build-backend = "setuptools.build_meta"
+requires = [ "setuptools>=77.0.3" ]
+
+[project]
+name = "django_compressor"
+description = "Compresses linked and inline JavaScript or CSS into single 
cached files."
+readme = "README.rst"
+license = "MIT"
+maintainers = [
+  { name = "Mathieu Pillard" },
+]
+requires-python = ">=3.10"
+classifiers = [
+  "Development Status :: 5 - Production/Stable",
+  "Framework :: Django",
+  "Framework :: Django :: 4.2",
+  "Framework :: Django :: 5.1",
+  "Framework :: Django :: 5.2",
+  "Framework :: Django :: 6.0",
+  "Intended Audience :: Developers",
+  "Operating System :: OS Independent",
+  "Programming Language :: Python",
+  "Programming Language :: Python :: 3 :: Only",
+  "Programming Language :: Python :: 3.10",
+  "Programming Language :: Python :: 3.11",
+  "Programming Language :: Python :: 3.12",
+  "Programming Language :: Python :: 3.13",
+  "Programming Language :: Python :: 3.14",
+  "Topic :: Internet :: WWW/HTTP",
+]
+dynamic = [ "version" ]
+dependencies = [
+  "django>=4.2",
+  "django-appconf>=1.0.3",
+  "rcssmin>=1.2.1",
+  "rjsmin>=1.2.4",
+]
+
+urls.Homepage = "https://django-compressor.readthedocs.io/en/latest/";
+urls.Source = "https://github.com/django-compressor/django-compressor";
+
+[tool.setuptools.dynamic]
+version = { attr = "compressor.__version__" }
+
+[tool.setuptools.packages.find]
+include = [ "compressor*" ]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/requirements/tests.txt 
new/django-compressor-4.6/requirements/tests.txt
--- old/django_compressor-4.5.1/requirements/tests.txt  2024-07-21 
17:53:46.000000000 +0200
+++ new/django-compressor-4.6/requirements/tests.txt    2025-11-10 
12:14:39.000000000 +0100
@@ -1,13 +1,12 @@
-Jinja2==3.1.4
-beautifulsoup4==4.12.3
-brotli==1.1.0
+Jinja2==3.1.6
+beautifulsoup4>=4.13
+brotli==1.2.0
 calmjs==3.4.4
-coverage==7.6.0
+coverage==7.11.1
 csscompressor==0.9.5
 django-sekizai==4.1.0
-flake8==7.1.0
+flake8==7.3.0
 html5lib==1.1
-lxml==5.2.2
-rcssmin==1.1.2
-rjsmin==1.2.2
-slimit==0.8.1
+lxml==6.0.2
+rcssmin>=1.2.1
+rjsmin>=1.2.4
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/setup.cfg 
new/django-compressor-4.6/setup.cfg
--- old/django_compressor-4.5.1/setup.cfg       2024-07-22 11:56:16.581829300 
+0200
+++ new/django-compressor-4.6/setup.cfg 1970-01-01 01:00:00.000000000 +0100
@@ -1,7 +0,0 @@
-[wheel]
-universal = 1
-
-[egg_info]
-tag_build = 
-tag_date = 0
-
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/setup.py 
new/django-compressor-4.6/setup.py
--- old/django_compressor-4.5.1/setup.py        2024-06-16 16:46:44.000000000 
+0200
+++ new/django-compressor-4.6/setup.py  1970-01-01 01:00:00.000000000 +0100
@@ -1,170 +0,0 @@
-import ast
-import codecs
-import os
-import sys
-from fnmatch import fnmatchcase
-from pathlib import Path
-
-from setuptools import find_packages, setup
-
-
-class VersionFinder(ast.NodeVisitor):
-    def __init__(self):
-        self.version = None
-
-    def visit_Assign(self, node):
-        if node.targets[0].id == "__version__":
-            self.version = node.value.s
-
-
-def read(*parts):
-    filename = os.path.join(os.path.dirname(__file__), *parts)
-    with codecs.open(filename, encoding="utf-8") as fp:
-        return fp.read()
-
-
-def find_version(*parts):
-    finder = VersionFinder()
-    finder.visit(ast.parse(read(*parts)))
-    return finder.version
-
-
-# Provided as an attribute, so you can append to these instead
-# of replicating them:
-standard_exclude = ("*.py", "*.pyc", "*$py.class", "*~", ".*", "*.bak")
-standard_exclude_directories = (
-    ".*",
-    "CVS",
-    "_darcs",
-    "./build",
-    "./dist",
-    "EGG-INFO",
-    "*.egg-info",
-)
-
-
-# (c) 2005 Ian Bicking and contributors; written for Paste 
(http://pythonpaste.org)
-# Licensed under the MIT license: 
http://www.opensource.org/licenses/mit-license.php
-# Note: you may want to copy this into your setup.py file verbatim, as
-# you can't import this from another package, when you don't know if
-# that package is installed yet.
-def find_package_data(
-    where=".",
-    package="",
-    exclude=standard_exclude,
-    exclude_directories=standard_exclude_directories,
-    only_in_packages=True,
-    show_ignored=False,
-):
-    """
-    Return a dictionary suitable for use in ``package_data``
-    in a distutils ``setup.py`` file.
-
-    The dictionary looks like::
-
-        {'package': [files]}
-
-    Where ``files`` is a list of all the files in that package that
-    don't match anything in ``exclude``.
-
-    If ``only_in_packages`` is true, then top-level directories that
-    are not packages won't be included (but directories under packages
-    will).
-
-    Directories matching any pattern in ``exclude_directories`` will
-    be ignored; by default directories with leading ``.``, ``CVS``,
-    and ``_darcs`` will be ignored.
-
-    If ``show_ignored`` is true, then all the files that aren't
-    included in package data are shown on stderr (for debugging
-    purposes).
-
-    Note patterns use wildcards, or can be exact paths (including
-    leading ``./``), and all searching is case-insensitive.
-    """
-
-    out = {}
-    stack = [(str(Path(where)), "", package, only_in_packages)]
-    while stack:
-        where, prefix, package, only_in_packages = stack.pop(0)
-        for name in os.listdir(where):
-            fn = os.path.join(where, name)
-            if os.path.isdir(fn):
-                bad_name = False
-                for pattern in exclude_directories:
-                    if fnmatchcase(name, pattern) or fn.lower() == 
pattern.lower():
-                        bad_name = True
-                        if show_ignored:
-                            print(
-                                "Directory %s ignored by pattern %s" % (fn, 
pattern),
-                                file=sys.stderr,
-                            )
-                        break
-                if bad_name:
-                    continue
-                if os.path.isfile(os.path.join(fn, "__init__.py")) and not 
prefix:
-                    if not package:
-                        new_package = name
-                    else:
-                        new_package = package + "." + name
-                    stack.append((fn, "", new_package, False))
-                else:
-                    stack.append((fn, prefix + name + "/", package, 
only_in_packages))
-            elif package or not only_in_packages:
-                # is a file
-                bad_name = False
-                for pattern in exclude:
-                    if fnmatchcase(name, pattern) or fn.lower() == 
pattern.lower():
-                        bad_name = True
-                        if show_ignored:
-                            print(
-                                "File %s ignored by pattern %s" % (fn, 
pattern),
-                                file=sys.stderr,
-                            )
-                        break
-                if bad_name:
-                    continue
-                out.setdefault(package, []).append(prefix + name)
-    return out
-
-
-setup(
-    name="django_compressor",
-    version=find_version("compressor", "__init__.py"),
-    url="https://django-compressor.readthedocs.io/en/latest/";,
-    project_urls={
-        "Source": "https://github.com/django-compressor/django-compressor";,
-    },
-    license="MIT",
-    description=(
-        "Compresses linked and inline JavaScript or CSS into single cached 
files.",
-    ),
-    long_description=read("README.rst"),
-    maintainer="Mathieu Pillard",
-    packages=find_packages(),
-    package_data=find_package_data(),
-    classifiers=[
-        "Development Status :: 5 - Production/Stable",
-        "Framework :: Django",
-        "Framework :: Django :: 4.2",
-        "Framework :: Django :: 5.0",
-        "Framework :: Django :: 5.1",
-        "Intended Audience :: Developers",
-        "License :: OSI Approved :: MIT License",
-        "Operating System :: OS Independent",
-        "Programming Language :: Python",
-        "Programming Language :: Python :: 3 :: Only",
-        "Programming Language :: Python :: 3.10",
-        "Programming Language :: Python :: 3.11",
-        "Programming Language :: Python :: 3.12",
-        "Topic :: Internet :: WWW/HTTP",
-    ],
-    zip_safe=False,
-    python_requires=">=3.8",
-    install_requires=[
-        "Django >= 4.2",
-        "django-appconf >= 1.0.3",
-        "rcssmin == 1.1.2",
-        "rjsmin == 1.2.2",
-    ],
-)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django_compressor-4.5.1/tox.ini 
new/django-compressor-4.6/tox.ini
--- old/django_compressor-4.5.1/tox.ini 2024-07-21 17:53:57.000000000 +0200
+++ new/django-compressor-4.6/tox.ini   2025-11-10 12:14:39.000000000 +0100
@@ -1,15 +1,16 @@
 [tox]
 envlist =
-    {py38,py39,py310,py311}-4.2.X
-    {py310,py311,py312}-5.0.X
-    {py310,py311,py312}-5.1.X
+    {py310,py311}-4.2.X
+    {py310,py311,py312,py313}-5.1.X
+    {py310,py311,py312,py313,py314}-5.2.X
+    {py312,py313,py314}-6.0.X
 [testenv]
 basepython =
-    py38: python3.8
-    py39: python3.9
     py310: python3.10
     py311: python3.11
     py312: python3.12
+    py313: python3.13
+    py314: python3.14
 usedevelop = true
 setenv =
     CPPFLAGS=-O0
@@ -20,5 +21,7 @@
 deps =
     4.2.X: Django>=4.2,<5.0
     5.0.X: Django>=5.0,<5.1
-    5.1.X: Django>=5.1b1,<5.2
+    5.1.X: Django>=5.1,<5.2
+    5.2.X: Django>=5.2,<6.0
+    6.0.X: Django>=6.0b1,<6.1
     -r{toxinidir}/requirements/tests.txt

Reply via email to