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 2022-08-05 19:51:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-compressor (Old)
and /work/SRC/openSUSE:Factory/.python-django-compressor.new.1521 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-django-compressor"
Fri Aug 5 19:51:10 2022 rev:7 rq:993153 version:4.1
Changes:
--------
---
/work/SRC/openSUSE:Factory/python-django-compressor/python-django-compressor.changes
2022-04-27 21:41:13.121005751 +0200
+++
/work/SRC/openSUSE:Factory/.python-django-compressor.new.1521/python-django-compressor.changes
2022-08-05 19:52:09.809635774 +0200
@@ -1,0 +2,19 @@
+Thu Aug 4 17:45:11 UTC 2022 - Ben Greiner <[email protected]>
+
+- Update to 4.1
+ * Add Django 4.1 compatibility
+ * New setting ``COMPRESS_OFFLINE_MANIFEST_STORAGE`` to customize
+ the offline manifest's file storage (#1112) With this change
+ the function
+ ``compressor.cache.get_offline_manifest_filename()`` has been
+ removed. You can now use the new file storage
+ ``compressor.storage.default_offline_manifest_storage`` to
+ access the location of the manifest.
+- Release 4.0
+ * Fix intermittent No such file or directory errors by changing
+ strategy to deal with duplicate filenames in
+ CompressorFileStorage
+ * Deprecate SlimItFilter, stop testing it with Python 3.7 or
+ higher
+
+-------------------------------------------------------------------
Old:
----
django_compressor-3.1.tar.gz
New:
----
django_compressor-4.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-django-compressor.spec ++++++
--- /var/tmp/diff_new_pack.MZ8Z6T/_old 2022-08-05 19:52:10.309637065 +0200
+++ /var/tmp/diff_new_pack.MZ8Z6T/_new 2022-08-05 19:52:10.313637075 +0200
@@ -16,11 +16,11 @@
#
-%{?!python_module:%define python_module() python-%{**} python3-%{**}}
+%{?!python_module:%define python_module() python3-%{**}}
%define mod_name django_compressor
%define skip_python2 1
Name: python-django-compressor
-Version: 3.1
+Version: 4.1
Release: 0
Summary: Python module to compress linked/inline JavaScript/CSS to
cached files
License: Apache-2.0 AND BSD-3-Clause AND MIT
@@ -65,13 +65,17 @@
%prep
%setup -q -n %{mod_name}-%{version}
+sed -i '1{/env python/d}' compressor/tests/precompiler.py
%build
%python_build
%install
%python_install
-%python_expand %fdupes %{buildroot}%{$python_sitelib}
+%{python_expand #
+echo '/* empty file */' >>
%{buildroot}%{$python_sitelib}/compressor/tests/static/CACHE/css/output.e3b0c44298fc.css
+%fdupes %{buildroot}%{$python_sitelib}
+}
%check
%python_expand $python -m django test --settings=compressor.test_settings
compressor --pythonpath=`pwd` -v2
@@ -79,6 +83,7 @@
%files %{python_files}
%license LICENSE
%doc AUTHORS README.rst
-%{python_sitelib}/*
+%{python_sitelib}/compressor
+%{python_sitelib}/django_compressor-%{version}*-info
%changelog
++++++ django_compressor-3.1.tar.gz -> django_compressor-4.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/LICENSE
new/django_compressor-4.1/LICENSE
--- old/django_compressor-3.1/LICENSE 2021-05-01 13:21:12.000000000 +0200
+++ new/django_compressor-4.1/LICENSE 2022-04-23 12:19:10.000000000 +0200
@@ -1,6 +1,6 @@
django_compressor
-----------------
-Copyright (c) 2009-2015 Django Compressor authors (see AUTHORS file)
+Copyright (c) 2009-2022 Django Compressor authors (see AUTHORS file)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -42,87 +42,3 @@
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
-
-
-rjsmin.py (License-information from the file)
----------------------------------------------
-Copyright 2006, 2007, 2008, 2009, 2010, 2011
-Andr?? Malo or his licensors, as applicable
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-
-utils.cache.cached_property extracted from Celery
--------------------------------------------
-Copyright (c) 2009-2011, Ask Solem and contributors.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
-Neither the name of Ask Solem nor the names of its contributors may be used
-to endorse or promote products derived from this software without specific
-prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
-THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
-
-utils.FormattableString
------------------------
-Copyright (c) 2010 by Florent Xicluna.
-
-Some rights reserved.
-
-Redistribution and use in source and binary forms of the software as well
-as documentation, with or without modification, are permitted provided
-that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
-* Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials provided
- with the distribution.
-
-* The names of the contributors may not be used to endorse or
- promote products derived from this software without specific
- prior written permission.
-
-THIS SOFTWARE AND DOCUMENTATION IS PROVIDED BY THE COPYRIGHT HOLDERS AND
-CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT
-NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE AND DOCUMENTATION, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGE.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/PKG-INFO
new/django_compressor-4.1/PKG-INFO
--- old/django_compressor-3.1/PKG-INFO 2021-12-18 21:24:37.309890000 +0100
+++ new/django_compressor-4.1/PKG-INFO 2022-08-03 18:07:20.773594000 +0200
@@ -1,12 +1,12 @@
Metadata-Version: 2.1
Name: django_compressor
-Version: 3.1
+Version: 4.1
Summary: Compresses linked and inline JavaScript or CSS into single cached
files.
Home-page: https://django-compressor.readthedocs.io/en/latest/
Author: Jannis Leidel
Author-email: [email protected]
License: MIT
-Platform: UNKNOWN
+Project-URL: Source, https://github.com/django-compressor/django-compressor
Classifier: Development Status :: 5 - Production/Stable
Classifier: Framework :: Django
Classifier: Framework :: Django :: 2.2
@@ -106,5 +106,3 @@
.. _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-3.1/compressor/__init__.py
new/django_compressor-4.1/compressor/__init__.py
--- old/django_compressor-3.1/compressor/__init__.py 2021-12-18
21:23:39.000000000 +0100
+++ new/django_compressor-4.1/compressor/__init__.py 2022-08-03
18:04:55.000000000 +0200
@@ -1,2 +1,2 @@
# following PEP 386
-__version__ = "3.1"
+__version__ = "4.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/compressor/cache.py
new/django_compressor-4.1/compressor/cache.py
--- old/django_compressor-3.1/compressor/cache.py 2021-12-12
19:04:27.000000000 +0100
+++ new/django_compressor-4.1/compressor/cache.py 2022-08-03
18:03:37.000000000 +0200
@@ -11,7 +11,7 @@
from django.utils.functional import SimpleLazyObject
from compressor.conf import settings
-from compressor.storage import default_storage
+from compressor.storage import default_offline_manifest_storage
from compressor.utils import get_mod_func
_cachekey_func = None
@@ -66,20 +66,15 @@
return get_cachekey("offline.%s" % get_offline_hexdigest(source))
-def get_offline_manifest_filename():
- output_dir = settings.COMPRESS_OUTPUT_DIR.strip('/')
- return os.path.join(output_dir, settings.COMPRESS_OFFLINE_MANIFEST)
-
-
_offline_manifest = None
def get_offline_manifest():
global _offline_manifest
if _offline_manifest is None:
- filename = get_offline_manifest_filename()
- if default_storage.exists(filename):
- with default_storage.open(filename) as fp:
+ filename = settings.COMPRESS_OFFLINE_MANIFEST
+ if default_offline_manifest_storage.exists(filename):
+ with default_offline_manifest_storage.open(filename) as fp:
_offline_manifest = json.loads(fp.read().decode('utf8'))
else:
_offline_manifest = {}
@@ -92,9 +87,8 @@
def write_offline_manifest(manifest):
- filename = get_offline_manifest_filename()
content = json.dumps(manifest, indent=2).encode('utf8')
- default_storage.save(filename, ContentFile(content))
+ default_offline_manifest_storage.save(settings.COMPRESS_OFFLINE_MANIFEST,
ContentFile(content))
flush_offline_manifest()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/compressor/conf.py
new/django_compressor-4.1/compressor/conf.py
--- old/django_compressor-3.1/compressor/conf.py 2021-12-12
19:04:27.000000000 +0100
+++ new/django_compressor-4.1/compressor/conf.py 2022-08-03
18:03:37.000000000 +0200
@@ -75,6 +75,7 @@
OFFLINE_CONTEXT = {}
# The name of the manifest file (e.g. filename.ext)
OFFLINE_MANIFEST = 'manifest.json'
+ OFFLINE_MANIFEST_STORAGE = 'compressor.storage.OfflineManifestFileStorage'
# The Context to be used when TemplateFilter is used
TEMPLATE_FILTER_CONTEXT = {}
# Placeholder to be used instead of settings.COMPRESS_URL during offline
compression.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_compressor-3.1/compressor/filters/jsmin/__init__.py
new/django_compressor-4.1/compressor/filters/jsmin/__init__.py
--- old/django_compressor-3.1/compressor/filters/jsmin/__init__.py
2021-12-12 19:04:27.000000000 +0100
+++ new/django_compressor-4.1/compressor/filters/jsmin/__init__.py
2022-04-23 12:19:10.000000000 +0200
@@ -1,3 +1,5 @@
+import warnings
+
from django.core.exceptions import ImproperlyConfigured
from compressor.filters import FilterBase, CallbackOutputFilter
@@ -6,9 +8,7 @@
class rJSMinFilter(CallbackOutputFilter):
callback = "rjsmin.jsmin"
dependencies = ["rjsmin"]
- kwargs = {
- "keep_bang_comments": True
- }
+ kwargs = {"keep_bang_comments": True}
# This is for backwards compatibility
@@ -22,6 +22,14 @@
"mangle": True,
}
+ def __init__(self, *args, **kwargs):
+ warnings.warn(
+ "SlimItFilter is broken in Python 3.6+ and will be removed in "
+ "django-compressor 3.3.",
+ DeprecationWarning,
+ )
+ super().__init__(*args, **kwargs)
+
class CalmjsFilter(FilterBase):
def __init__(self, *args, **kwargs):
@@ -39,7 +47,8 @@
except ImportError:
raise ImproperlyConfigured(
"The module calmjs.parse couldn't be imported. "
- "Make sure it is correctly installed.")
+ "Make sure it is correctly installed."
+ )
if self._parser is None:
self._parser = calmjs.parse.es5
if self._unparser is None:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_compressor-3.1/compressor/management/commands/compress.py
new/django_compressor-4.1/compressor/management/commands/compress.py
--- old/django_compressor-3.1/compressor/management/commands/compress.py
2021-12-18 21:23:39.000000000 +0100
+++ new/django_compressor-4.1/compressor/management/commands/compress.py
2022-08-03 18:03:37.000000000 +0200
@@ -27,6 +27,11 @@
class Command(BaseCommand):
help = "Compress content outside of the request/response cycle"
+ if django.VERSION >= (3, 2):
+ requires_system_checks = []
+ else:
+ requires_system_checks = False
+
def add_arguments(self, parser):
parser.add_argument('--extension', '-e', action='append',
dest='extensions',
help='The file extension(s) to examine (default:
".html", '
@@ -322,5 +327,3 @@
final_offline_manifest.update(offline_manifest)
write_offline_manifest(final_offline_manifest)
return final_block_count, final_results
-
-Command.requires_system_checks = False
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/compressor/storage.py
new/django_compressor-4.1/compressor/storage.py
--- old/django_compressor-3.1/compressor/storage.py 2021-12-12
19:04:27.000000000 +0100
+++ new/django_compressor-4.1/compressor/storage.py 2022-08-03
18:03:37.000000000 +0200
@@ -2,6 +2,7 @@
import os
from datetime import datetime
import time
+from urllib.parse import urljoin
from django.core.files.storage import FileSystemStorage, get_storage_class
from django.utils.functional import LazyObject, SimpleLazyObject
@@ -33,13 +34,16 @@
def modified_time(self, name):
return datetime.fromtimestamp(os.path.getmtime(self.path(name)))
- def get_available_name(self, name, max_length=None):
- """
- Deletes the given file if it exists.
- """
- if self.exists(name):
- self.delete(name)
- return name
+ def save(self, filename, content):
+ temp_filename = super().save(filename, content)
+ # If a file already exists in the target location, FileSystemStorage
+ # will generate an unique filename and save content there instead.
+ # When that happens, we move the file to the intended location using
+ # os.replace() (which is an atomic operation):
+ if temp_filename != filename:
+ os.replace(self.path(temp_filename), self.path(filename))
+
+ return filename
compressor_file_storage = SimpleLazyObject(
@@ -107,3 +111,20 @@
default_storage = DefaultStorage()
+
+
+class OfflineManifestFileStorage(CompressorFileStorage):
+ def __init__(self, location=None, base_url=None, *args, **kwargs):
+ if location is None:
+ location = os.path.join(settings.COMPRESS_ROOT,
settings.COMPRESS_OUTPUT_DIR)
+ if base_url is None:
+ base_url = urljoin(settings.COMPRESS_URL,
settings.COMPRESS_OUTPUT_DIR)
+ super().__init__(location, base_url, *args, **kwargs)
+
+
+class DefaultOfflineManifestStorage(LazyObject):
+ def _setup(self):
+ self._wrapped =
get_storage_class(settings.COMPRESS_OFFLINE_MANIFEST_STORAGE)()
+
+
+default_offline_manifest_storage = DefaultOfflineManifestStorage()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_compressor-3.1/compressor/tests/test_filters.py
new/django_compressor-4.1/compressor/tests/test_filters.py
--- old/django_compressor-3.1/compressor/tests/test_filters.py 2021-12-12
19:04:27.000000000 +0100
+++ new/django_compressor-4.1/compressor/tests/test_filters.py 2022-04-23
12:19:10.000000000 +0200
@@ -2,7 +2,7 @@
import os
import sys
from collections import defaultdict
-from unittest import mock
+from unittest import mock, skipIf
from django.conf import settings
from django.test import override_settings, TestCase
@@ -202,6 +202,7 @@
self.assertEqual(output, rJSMinFilter(content).output())
+@skipIf(sys.version_info >= (3, 7), reason="Unsupported in Python 3.7+")
class SlimItTestCase(TestCase):
def test_slimit_filter(self):
content = """
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_compressor-3.1/compressor/tests/test_offline.py
new/django_compressor-4.1/compressor/tests/test_offline.py
--- old/django_compressor-3.1/compressor/tests/test_offline.py 2021-12-18
21:23:39.000000000 +0100
+++ new/django_compressor-4.1/compressor/tests/test_offline.py 2022-08-03
18:03:37.000000000 +0200
@@ -15,7 +15,7 @@
from compressor.cache import flush_offline_manifest, get_offline_manifest
from compressor.exceptions import OfflineGenerationError
from compressor.management.commands.compress import Command as CompressCommand
-from compressor.storage import default_storage
+from compressor.storage import default_offline_manifest_storage
from compressor.utils import get_mod_func
@@ -154,9 +154,9 @@
def tearDown(self):
self.override_settings.__exit__(None, None, None)
- manifest_path = os.path.join('CACHE', 'manifest.json')
- if default_storage.exists(manifest_path):
- default_storage.delete(manifest_path)
+ manifest_filename = 'manifest.json'
+ if default_offline_manifest_storage.exists(manifest_filename):
+ default_offline_manifest_storage.delete(manifest_filename)
def _prepare_contexts(self, engine):
contexts = settings.COMPRESS_OFFLINE_CONTEXT
@@ -311,9 +311,9 @@
def _test_deleting_manifest_does_not_affect_rendering(self, engine):
count, result = CompressCommand().handle_inner(engines=[engine],
verbosity=0)
get_offline_manifest()
- manifest_path = os.path.join('CACHE', 'manifest.json')
- if default_storage.exists(manifest_path):
- default_storage.delete(manifest_path)
+ manifest_filename = 'manifest.json'
+ if default_offline_manifest_storage.exists(manifest_filename):
+ default_offline_manifest_storage.delete(manifest_filename)
self.assertEqual(1, count)
self.assertEqual([self._render_script(self.expected_hash)], result)
rendered_template = self._render_template(engine)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_compressor-3.1/compressor/tests/test_storages.py
new/django_compressor-4.1/compressor/tests/test_storages.py
--- old/django_compressor-3.1/compressor/tests/test_storages.py 2021-12-12
19:04:27.000000000 +0100
+++ new/django_compressor-4.1/compressor/tests/test_storages.py 2022-08-03
18:03:37.000000000 +0200
@@ -61,3 +61,15 @@
context = {'STATIC_URL': settings.COMPRESS_URL}
out = css_tag("/static/CACHE/css/output.e701f86c6430.css")
self.assertEqual(out, render(template, context))
+
+ def test_duplicate_save_overwrites_same_file(self):
+ filename1 = self.default_storage.save('test.txt', ContentFile('yeah
yeah'))
+ filename2 = self.default_storage.save('test.txt', ContentFile('yeah
yeah'))
+ self.assertEqual(filename1, filename2)
+ self.assertNotIn("_", filename2)
+
+ def test_offline_manifest_storage(self):
+ storage.default_offline_manifest_storage.save('test.txt',
ContentFile('yeah yeah'))
+ self.assertTrue(os.path.exists(os.path.join(settings.COMPRESS_ROOT,
'CACHE', 'test.txt')))
+ # Check that the file is stored at the same default location as before
the new manifest storage.
+ self.assertTrue(self.default_storage.exists(os.path.join('CACHE',
'test.txt')))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/django_compressor-3.1/django_compressor.egg-info/PKG-INFO
new/django_compressor-4.1/django_compressor.egg-info/PKG-INFO
--- old/django_compressor-3.1/django_compressor.egg-info/PKG-INFO
2021-12-18 21:24:37.000000000 +0100
+++ new/django_compressor-4.1/django_compressor.egg-info/PKG-INFO
2022-08-03 18:07:20.000000000 +0200
@@ -1,12 +1,12 @@
Metadata-Version: 2.1
Name: django-compressor
-Version: 3.1
+Version: 4.1
Summary: Compresses linked and inline JavaScript or CSS into single cached
files.
Home-page: https://django-compressor.readthedocs.io/en/latest/
Author: Jannis Leidel
Author-email: [email protected]
License: MIT
-Platform: UNKNOWN
+Project-URL: Source, https://github.com/django-compressor/django-compressor
Classifier: Development Status :: 5 - Production/Stable
Classifier: Framework :: Django
Classifier: Framework :: Django :: 2.2
@@ -106,5 +106,3 @@
.. _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-3.1/docs/changelog.txt
new/django_compressor-4.1/docs/changelog.txt
--- old/django_compressor-3.1/docs/changelog.txt 2021-12-18
21:23:39.000000000 +0100
+++ new/django_compressor-4.1/docs/changelog.txt 2022-08-03
18:06:54.000000000 +0200
@@ -1,6 +1,28 @@
Changelog
=========
+v4.1 (2022-08-03)
+-----------------
+
+- Add Django 4.1 compatibility
+
+- New setting ``COMPRESS_OFFLINE_MANIFEST_STORAGE`` to customize the offline
manifest's file storage (#1112)
+
+ With this change the function
``compressor.cache.get_offline_manifest_filename()`` has been removed.
+ You can now use the new file storage
``compressor.storage.default_offline_manifest_storage`` to access the
+ location of the manifest.
+
+
+v4.0 (2022-03-23)
+-----------------
+
+`Full Changelog
<https://github.com/django-compressor/django-compressor/compare/3.1...4.0>`_
+
+- Fix intermittent No such file or directory errors by changing strategy to
+ deal with duplicate filenames in CompressorFileStorage
+- Deprecate SlimItFilter, stop testing it with Python 3.7 or higher
+
+
v3.1 (2021-12-18)
-----------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/docs/quickstart.txt
new/django_compressor-4.1/docs/quickstart.txt
--- old/django_compressor-3.1/docs/quickstart.txt 2021-12-12
19:04:27.000000000 +0100
+++ new/django_compressor-4.1/docs/quickstart.txt 2022-04-23
12:19:10.000000000 +0200
@@ -64,13 +64,6 @@
pip install html5lib
-- `Slim It`_
-
- For the :ref:`Slim It filter <slimit_filter>`
- ``compressor.filters.jsmin.SlimItFilter``::
-
- pip install slimit
-
- `Calmjs`_
For the :ref:`Calmjs filter <calmjs_filter>`
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/docs/settings.txt
new/django_compressor-4.1/docs/settings.txt
--- old/django_compressor-3.1/docs/settings.txt 2021-12-12 19:04:27.000000000
+0100
+++ new/django_compressor-4.1/docs/settings.txt 2022-08-03 18:03:37.000000000
+0200
@@ -69,7 +69,7 @@
.. attribute:: COMPRESS_FILTERS
- :default: ``{'css': ['compressor.filters.css_default.CssAbsoluteFilter'],
'js': ['compressor.filters.jsmin.JSMinFilter']}``
+ :default: ``{'css': ['compressor.filters.css_default.CssAbsoluteFilter',
'compressor.filters.cssmin.rCSSMinFilter'], 'js':
['compressor.filters.jsmin.rJSMinFilter']}``
A mapping of resource kinds to the list of filters to apply.
The key is used to refer to this resource type in templates
@@ -83,7 +83,7 @@
.. _compress_css_filters:
- :default: ``['compressor.filters.css_default.CssAbsoluteFilter']``
+ :default: ``['compressor.filters.css_default.CssAbsoluteFilter',
'compressor.filters.cssmin.rCSSMinFilter']``
A list of filters that will be applied to CSS.
@@ -190,24 +190,17 @@
.. _compress_js_filters:
- :Default: ``['compressor.filters.jsmin.JSMinFilter']``
+ :Default: ``['compressor.filters.jsmin.rJSMinFilter']``
A list of filters that will be applied to javascript.
Possible options are:
- - ``compressor.filters.jsmin.JSMinFilter``
+ - ``compressor.filters.jsmin.rJSMinFilter``
A filter that uses the jsmin implementation rJSmin_ to compress
JavaScript code (installed by default).
- .. _slimit_filter:
-
- - ``compressor.filters.jsmin.SlimItFilter``
-
- A filter that uses the jsmin implementation `Slim It`_ to compress
- JavaScript code.
-
.. _calmjs_filter:
- ``compressor.filters.jsmin.CalmjsFilter``
@@ -548,3 +541,26 @@
The name of the file to be used for saving the names of the files
compressed offline.
+
+.. attribute:: COMPRESS_OFFLINE_MANIFEST_STORAGE
+
+ :Default: ``compressor.storage.OfflineManifestFileStorage``
+
+ The dotted path to a Django Storage backend to be used to save the
+ offline manifest.
+
+ By default, the file configured with
+ :attr:`~django.conf.settings.COMPRESS_OFFLINE_MANIFEST` will be stored
+ into :attr:`~django.conf.settings.COMPRESS_OUTPUT_DIR`.
+
+ An example to output the manifest into the project's root directory::
+
+ # project/settings.py:
+ COMPRESS_STORAGE = 'project.module.PrivateOfflineManifestFileStorage'
+
+ # project/module.py:
+ from compressor.storage import OfflineManifestFileStorage
+ from django.conf import settings
+ class PrivateOfflineManifestFileStorage(OfflineManifestFileStorage):
+ def __init__(self, *args, **kwargs):
+ super().__init__(settings.BASE_DIR, None, *args, **kwargs)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/docs/usage.txt
new/django_compressor-4.1/docs/usage.txt
--- old/django_compressor-3.1/docs/usage.txt 2021-05-01 13:21:12.000000000
+0200
+++ new/django_compressor-4.1/docs/usage.txt 2022-08-03 18:03:37.000000000
+0200
@@ -79,6 +79,25 @@
<script type="text/javascript"
src="/static/CACHE/js/base.3f33b9146e12.js" charset="utf-8"></script>
+Javascript ``async`` and ``defer`` are supported:
+
+ .. code-block:: django
+
+ {% compress js %}
+ <script src="/static/js/one.js" async></script>
+ {% endcompress %}
+ {% compress js %}
+ <script src="/static/js/one.js" defer></script>
+ {% endcompress %}
+
+Result:
+
+ .. code-block:: django
+
+ <script async src="/static/CACHE/js/output.ccbb802fbf33.js"></script>
+ <script defer src="/static/CACHE/js/output.5bd495b0eb05.js"></script>
+
+
.. note::
Remember that django-compressor will try to :ref:`group outputs by media
<css_notes>`.
@@ -112,7 +131,7 @@
Django's `caching documentation`_).
.. _memcached: http://memcached.org/
-.. _caching documentation:
https://docs.djangoproject.com/en/2.1/topics/cache/#memcached
+.. _caching documentation:
https://docs.djangoproject.com/en/stable/topics/cache/#memcached
.. _offline_compression:
@@ -161,7 +180,7 @@
<django.conf.settings.COMPRESS_STORAGE>` to be able to be transferred from
your development
computer to the server easily.
-.. _TEMPLATE_LOADERS:
http://docs.djangoproject.com/en/dev/ref/settings/#template-loaders
+.. _TEMPLATE_LOADERS:
http://docs.djangoproject.com/en/stable/ref/settings/#template-loaders
.. _signals:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/requirements/tests.txt
new/django_compressor-4.1/requirements/tests.txt
--- old/django_compressor-3.1/requirements/tests.txt 2021-12-18
21:23:39.000000000 +0100
+++ new/django_compressor-4.1/requirements/tests.txt 2022-08-03
18:03:59.000000000 +0200
@@ -1,13 +1,13 @@
Jinja2==3.0.3
-beautifulsoup4==4.9.3
+beautifulsoup4==4.11.1
brotli==1.0.9
calmjs==3.4.2
coverage==5.5
csscompressor==0.9.5
django-sekizai==2.0.0
-flake8==3.9.1
+flake8==4.0.1
html5lib==1.1
-lxml==4.6.5
-rcssmin==1.1.0
+lxml==4.9.1
+rcssmin==1.1.1
rjsmin==1.2.0
slimit==0.8.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/setup.py
new/django_compressor-4.1/setup.py
--- old/django_compressor-3.1/setup.py 2021-12-12 19:20:53.000000000 +0100
+++ new/django_compressor-4.1/setup.py 2022-04-23 12:19:10.000000000 +0200
@@ -117,6 +117,9 @@
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'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/django_compressor-3.1/tox.ini
new/django_compressor-4.1/tox.ini
--- old/django_compressor-3.1/tox.ini 2021-12-12 19:04:27.000000000 +0100
+++ new/django_compressor-4.1/tox.ini 2022-08-03 18:03:59.000000000 +0200
@@ -3,7 +3,8 @@
{py36,py37,py38,py39}-2.2.X
{py36,py37,py38,py39}-3.1.X
{py36,py37,py38,py39,py310}-3.2.X
- {py38,py39,,py310}-4.0.X
+ {py38,py39,py310}-4.0.X
+ {py38,py39,py310}-4.1.X
[testenv]
basepython =
py36: python3.6
@@ -22,5 +23,6 @@
2.2.X: Django>=2.2,<2.3
3.1.X: Django>=3.1,<3.2
3.2.X: Django>=3.2,<4.0
- 4.0.X: Django>=4.0a1,<5.0
+ 4.0.X: Django>=4.0,<4.1
+ 4.1.X: Django>=4.1,<4.2
-r{toxinidir}/requirements/tests.txt