Hello community,

here is the log from the commit of package python-django-pipeline for 
openSUSE:Factory checked in at 2020-09-10 22:53:35
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-django-pipeline (Old)
 and      /work/SRC/openSUSE:Factory/.python-django-pipeline.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-django-pipeline"

Thu Sep 10 22:53:35 2020 rev:4 rq:833448 version:2.0.5

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-django-pipeline/python-django-pipeline.changes
    2020-04-21 13:11:20.316892620 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-django-pipeline.new.4249/python-django-pipeline.changes
  2020-09-10 22:55:24.084426082 +0200
@@ -1,0 +2,10 @@
+Thu Sep 10 08:45:51 UTC 2020 - Marketa Calabkova <[email protected]>
+
+- Update to 2.0.5
+  * Definitely drop the support of Python 2.
+  * Drop support for Python 3.5
+  * Change import MutableMapping from collections.abc.
+  * Remove futures from pipeline setup.py requirements.
+  * Adding Django 3.1 compatibility.
+
+-------------------------------------------------------------------

Old:
----
  django-pipeline-1.7.0.tar.gz

New:
----
  django-pipeline-2.0.5.tar.gz

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

Other differences:
------------------
++++++ python-django-pipeline.spec ++++++
--- /var/tmp/diff_new_pack.sFvJU6/_old  2020-09-10 22:55:24.692426971 +0200
+++ /var/tmp/diff_new_pack.sFvJU6/_new  2020-09-10 22:55:24.696426977 +0200
@@ -17,9 +17,9 @@
 
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
-%bcond_without python2
+%define skip_python2 1
 Name:           python-django-pipeline
-Version:        1.7.0
+Version:        2.0.5
 Release:        0
 Summary:        An asset packaging library for Django
 License:        MIT
@@ -29,6 +29,8 @@
 BuildRequires:  %{python_module Django >= 1.11}
 BuildRequires:  %{python_module Jinja2}
 BuildRequires:  %{python_module jsmin}
+BuildRequires:  %{python_module pytest-django}
+BuildRequires:  %{python_module pytest}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  %{python_module slimit}
 BuildRequires:  fdupes
@@ -36,13 +38,6 @@
 Requires:       python-Django >= 1.11
 Requires:       python-Jinja2
 BuildArch:      noarch
-%if %{with python2}
-BuildRequires:  python2-futures >= 2.1.3
-BuildRequires:  python2-mock
-%endif
-%ifpython2
-Requires:       python2-futures >= 2.1.3
-%endif
 %python_subpackages
 
 %description
@@ -61,7 +56,10 @@
 %python_expand %fdupes %{buildroot}%{$python_sitelib}
 
 %check
-%python_expand %{_bindir}/django-admin.py-%{$python_bin_suffix} test tests 
--settings=tests.settings --pythonpath=`pwd`
+# we do not have python-css-html-js-minify, because it is nearly unpackageable 
(missing licenses, no tags on GitHub)
+PYTHONPATH=.
+export DJANGO_SETTINGS_MODULE=tests.settings
+%pytest -k "not test_csshtmljsminify"
 
 %files %{python_files}
 %license LICENSE

++++++ django-pipeline-1.7.0.tar.gz -> django-pipeline-2.0.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/AUTHORS 
new/django-pipeline-2.0.5/AUTHORS
--- old/django-pipeline-1.7.0/AUTHORS   2020-01-05 03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/AUTHORS   2020-08-16 22:47:54.000000000 +0200
@@ -21,6 +21,7 @@
  * Austin Pua <[email protected]>
  * Axel Haustant <[email protected]>
  * Balazs Kossovics <[email protected]>
+ * Ben Spaulding <[email protected]>
  * Ben Vinegar <[email protected]>
  * Brad Pitcher <[email protected]>
  * Brant Young <[email protected]>
@@ -120,3 +121,5 @@
  * Wismill
  * Zachary Kazanski <[email protected]>
  * Zenobius Jiricek <[email protected]>
+ * Zeus Kronion
+ 
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/HISTORY.rst 
new/django-pipeline-2.0.5/HISTORY.rst
--- old/django-pipeline-1.7.0/HISTORY.rst       2020-01-05 03:59:08.000000000 
+0100
+++ new/django-pipeline-2.0.5/HISTORY.rst       2020-08-16 22:47:54.000000000 
+0200
@@ -3,10 +3,65 @@
 History
 =======
 
+2.0.5
+======
+
+* Adding **Django 3.1** compatibility.
+* CachedStaticFilesStorage is removed from Django. Add a check
+  of the current version to prevent error while importing. Thank to @vmsp
+* Context in django.template.base is removed from Django and
+  not used anymore in django-pipeline.
+* Fixing widgets tests of django-pipeline due to Media.render_js change in 
+  Django. More information in Django ticket #31892
+
+2.0.4
+======
+
+* Adding **css-html-js-minify** support to compress JS and CSS.
+* Update compressors documentation with css-html-js-minify.
+* Create tests for css-html-js-minify compressor.
+* Optimization by grouping the tests yuglify compressor.
+
+2.0.3
+======
+
+* Remove futures from pipeline **setup.py** requirements.
+
+2.0.2
+=====
+
+* Fix Middleware to properly decode HTML. Thank to @gatsinski
+* Keep mimetypes as str. Thank to @benspaulding
+* Based on #642 add 'NonPackagingPipelineManifestStorage' and update
+  the documentation: **storages.rst**. Thank to @kronion
+
+2.0.1
+=====
+
+* Add subclass of ManifestStaticFilesStorage. Thank to @jhpinson
+* Change the documentation to use PipelineManifestStorage in configuration
+  instead of PipelineCachedStorage now deprecated.
+* Change import MutableMapping from collections.abc. Thank to @colons
+
+2.0.0
+=====
+
+* **Definitely drop the support of Python 2**.
+* Drop support for Python 3.5 (not compatible with PEP 498).
+* Remove 'decorator.py' how was used for backward compatibility
+  between python 2 and 3 for metaclass inheritance on PipelineFormMedia.
+* Replace 'format' by 'fstring' (PEP 498: Literal String Interpolation).
+* Remove of old imports form 'django.utils.six' and these fixes (1.7.0).
+* Remove tests of uncovered versions of Python and Django.
+* Replace tests for Pypy by Pypy3.
+* Explicitly specify when files are read / write in binary mode.
+* Set opening files for tests to deal with universal newlines.
+* Upgrade documentation version to 2.0 to follow the project version.
+
 1.7.0
 =====
 
-Release the last major version of django-pipeline working on Python 2.
+* Release the last major version of django-pipeline working on Python 2.
 * Thank you for all the modifications made since version 1.6.14, which we 
cannot quote.
 * Apply an optimization to save time during development. Thank to @blankser
 * Edit setup.py to follow the recommendation of the documentation. Thank to 
@shaneikennedy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/PKG-INFO 
new/django-pipeline-2.0.5/PKG-INFO
--- old/django-pipeline-1.7.0/PKG-INFO  2020-01-05 04:21:55.000000000 +0100
+++ new/django-pipeline-2.0.5/PKG-INFO  2020-08-16 22:49:19.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-pipeline
-Version: 1.7.0
+Version: 2.0.5
 Summary: Pipeline is an asset packaging library for Django.
 Home-page: https://github.com/jazzband/django-pipeline
 Author: Timothée Peignier
@@ -55,10 +55,65 @@
         History
         =======
         
+        2.0.5
+        ======
+        
+        * Adding **Django 3.1** compatibility.
+        * CachedStaticFilesStorage is removed from Django. Add a check
+          of the current version to prevent error while importing. Thank to 
@vmsp
+        * Context in django.template.base is removed from Django and
+          not used anymore in django-pipeline.
+        * Fixing widgets tests of django-pipeline due to Media.render_js 
change in 
+          Django. More information in Django ticket #31892
+        
+        2.0.4
+        ======
+        
+        * Adding **css-html-js-minify** support to compress JS and CSS.
+        * Update compressors documentation with css-html-js-minify.
+        * Create tests for css-html-js-minify compressor.
+        * Optimization by grouping the tests yuglify compressor.
+        
+        2.0.3
+        ======
+        
+        * Remove futures from pipeline **setup.py** requirements.
+        
+        2.0.2
+        =====
+        
+        * Fix Middleware to properly decode HTML. Thank to @gatsinski
+        * Keep mimetypes as str. Thank to @benspaulding
+        * Based on #642 add 'NonPackagingPipelineManifestStorage' and update
+          the documentation: **storages.rst**. Thank to @kronion
+        
+        2.0.1
+        =====
+        
+        * Add subclass of ManifestStaticFilesStorage. Thank to @jhpinson
+        * Change the documentation to use PipelineManifestStorage in 
configuration
+          instead of PipelineCachedStorage now deprecated.
+        * Change import MutableMapping from collections.abc. Thank to @colons
+        
+        2.0.0
+        =====
+        
+        * **Definitely drop the support of Python 2**.
+        * Drop support for Python 3.5 (not compatible with PEP 498).
+        * Remove 'decorator.py' how was used for backward compatibility
+          between python 2 and 3 for metaclass inheritance on 
PipelineFormMedia.
+        * Replace 'format' by 'fstring' (PEP 498: Literal String 
Interpolation).
+        * Remove of old imports form 'django.utils.six' and these fixes 
(1.7.0).
+        * Remove tests of uncovered versions of Python and Django.
+        * Replace tests for Pypy by Pypy3.
+        * Explicitly specify when files are read / write in binary mode.
+        * Set opening files for tests to deal with universal newlines.
+        * Upgrade documentation version to 2.0 to follow the project version.
+        
         1.7.0
         =====
         
-        Release the last major version of django-pipeline working on Python 2.
+        * Release the last major version of django-pipeline working on Python 
2.
         * Thank you for all the modifications made since version 1.6.14, which 
we cannot quote.
         * Apply an optimization to save time during development. Thank to 
@blankser
         * Edit setup.py to follow the recommendation of the documentation. 
Thank to @shaneikennedy
@@ -184,17 +239,14 @@
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: Web Environment
 Classifier: Framework :: Django
-Classifier: Framework :: Django :: 1.11
-Classifier: Framework :: Django :: 2.0
 Classifier: Framework :: Django :: 2.2
 Classifier: Framework :: Django :: 3.0
+Classifier: Framework :: Django :: 3.1
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/django_pipeline.egg-info/PKG-INFO 
new/django-pipeline-2.0.5/django_pipeline.egg-info/PKG-INFO
--- old/django-pipeline-1.7.0/django_pipeline.egg-info/PKG-INFO 2020-01-05 
04:21:54.000000000 +0100
+++ new/django-pipeline-2.0.5/django_pipeline.egg-info/PKG-INFO 2020-08-16 
22:49:19.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: django-pipeline
-Version: 1.7.0
+Version: 2.0.5
 Summary: Pipeline is an asset packaging library for Django.
 Home-page: https://github.com/jazzband/django-pipeline
 Author: Timothée Peignier
@@ -55,10 +55,65 @@
         History
         =======
         
+        2.0.5
+        ======
+        
+        * Adding **Django 3.1** compatibility.
+        * CachedStaticFilesStorage is removed from Django. Add a check
+          of the current version to prevent error while importing. Thank to 
@vmsp
+        * Context in django.template.base is removed from Django and
+          not used anymore in django-pipeline.
+        * Fixing widgets tests of django-pipeline due to Media.render_js 
change in 
+          Django. More information in Django ticket #31892
+        
+        2.0.4
+        ======
+        
+        * Adding **css-html-js-minify** support to compress JS and CSS.
+        * Update compressors documentation with css-html-js-minify.
+        * Create tests for css-html-js-minify compressor.
+        * Optimization by grouping the tests yuglify compressor.
+        
+        2.0.3
+        ======
+        
+        * Remove futures from pipeline **setup.py** requirements.
+        
+        2.0.2
+        =====
+        
+        * Fix Middleware to properly decode HTML. Thank to @gatsinski
+        * Keep mimetypes as str. Thank to @benspaulding
+        * Based on #642 add 'NonPackagingPipelineManifestStorage' and update
+          the documentation: **storages.rst**. Thank to @kronion
+        
+        2.0.1
+        =====
+        
+        * Add subclass of ManifestStaticFilesStorage. Thank to @jhpinson
+        * Change the documentation to use PipelineManifestStorage in 
configuration
+          instead of PipelineCachedStorage now deprecated.
+        * Change import MutableMapping from collections.abc. Thank to @colons
+        
+        2.0.0
+        =====
+        
+        * **Definitely drop the support of Python 2**.
+        * Drop support for Python 3.5 (not compatible with PEP 498).
+        * Remove 'decorator.py' how was used for backward compatibility
+          between python 2 and 3 for metaclass inheritance on 
PipelineFormMedia.
+        * Replace 'format' by 'fstring' (PEP 498: Literal String 
Interpolation).
+        * Remove of old imports form 'django.utils.six' and these fixes 
(1.7.0).
+        * Remove tests of uncovered versions of Python and Django.
+        * Replace tests for Pypy by Pypy3.
+        * Explicitly specify when files are read / write in binary mode.
+        * Set opening files for tests to deal with universal newlines.
+        * Upgrade documentation version to 2.0 to follow the project version.
+        
         1.7.0
         =====
         
-        Release the last major version of django-pipeline working on Python 2.
+        * Release the last major version of django-pipeline working on Python 
2.
         * Thank you for all the modifications made since version 1.6.14, which 
we cannot quote.
         * Apply an optimization to save time during development. Thank to 
@blankser
         * Edit setup.py to follow the recommendation of the documentation. 
Thank to @shaneikennedy
@@ -184,17 +239,14 @@
 Classifier: Development Status :: 5 - Production/Stable
 Classifier: Environment :: Web Environment
 Classifier: Framework :: Django
-Classifier: Framework :: Django :: 1.11
-Classifier: Framework :: Django :: 2.0
 Classifier: Framework :: Django :: 2.2
 Classifier: Framework :: Django :: 3.0
+Classifier: Framework :: Django :: 3.1
 Classifier: Intended Audience :: Developers
 Classifier: License :: OSI Approved :: MIT License
 Classifier: Operating System :: OS Independent
 Classifier: Programming Language :: Python
-Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
 Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: 3.8
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/django_pipeline.egg-info/SOURCES.txt 
new/django-pipeline-2.0.5/django_pipeline.egg-info/SOURCES.txt
--- old/django-pipeline-1.7.0/django_pipeline.egg-info/SOURCES.txt      
2020-01-05 04:21:54.000000000 +0100
+++ new/django-pipeline-2.0.5/django_pipeline.egg-info/SOURCES.txt      
2020-08-16 22:49:19.000000000 +0200
@@ -10,7 +10,6 @@
 django_pipeline.egg-info/SOURCES.txt
 django_pipeline.egg-info/dependency_links.txt
 django_pipeline.egg-info/not-zip-safe
-django_pipeline.egg-info/requires.txt
 django_pipeline.egg-info/top_level.txt
 docs/Makefile
 docs/compilers.rst
@@ -28,7 +27,6 @@
 pipeline/__init__.py
 pipeline/collector.py
 pipeline/conf.py
-pipeline/decorator.py
 pipeline/exceptions.py
 pipeline/finders.py
 pipeline/forms.py
@@ -49,6 +47,7 @@
 pipeline/compilers/stylus.py
 pipeline/compressors/__init__.py
 pipeline/compressors/closure.py
+pipeline/compressors/csshtmljsminify.py
 pipeline/compressors/cssmin.py
 pipeline/compressors/csstidy.py
 pipeline/compressors/jsmin.py
@@ -88,6 +87,8 @@
 tests/assets/compilers/stylus/expected.css
 tests/assets/compilers/stylus/input.styl
 tests/assets/compressors/closure.js
+tests/assets/compressors/csshtmljsminify.css
+tests/assets/compressors/csshtmljsminify.js
 tests/assets/compressors/cssmin.css
 tests/assets/compressors/csstidy.css
 tests/assets/compressors/jsmin.js
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/django_pipeline.egg-info/requires.txt 
new/django-pipeline-2.0.5/django_pipeline.egg-info/requires.txt
--- old/django-pipeline-1.7.0/django_pipeline.egg-info/requires.txt     
2020-01-05 04:21:54.000000000 +0100
+++ new/django-pipeline-2.0.5/django_pipeline.egg-info/requires.txt     
1970-01-01 01:00:00.000000000 +0100
@@ -1,3 +0,0 @@
-
-[:python_version < "3"]
-futures>=2.1.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/docs/compressors.rst 
new/django-pipeline-2.0.5/docs/compressors.rst
--- old/django-pipeline-1.7.0/docs/compressors.rst      2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/docs/compressors.rst      2020-08-16 
22:47:54.000000000 +0200
@@ -198,6 +198,7 @@
 
   Default to ``'--template=highest'``
 
+
 CSSMin compressor
 =================
 
@@ -221,6 +222,26 @@
 
   Default to ``''``
 
+
+css-html-js-minify compressor
+=============================
+
+The css-html-js-minify is full Python compressor using `css-html-js-minify 
<https://github.com/ciotto/css-html-js-minify>`_
+for compressing javascript and stylesheets.
+
+To use it for your stylesheets add this to your ``PIPELINE['CSS_COMPRESSOR']`` 
::
+
+  PIPELINE['CSS_COMPRESSOR'] = 
'pipeline.compressors.csshtmljsminify.CssHtmlJsMinifyCompressor'
+
+To use it for your javascripts add this to your ``PIPELINE['JS_COMPRESSOR']`` 
::
+
+  PIPELINE['JS_COMPRESSOR'] = 
'pipeline.compressors.csshtmljsminify.CssHtmlJsMinifyCompressor'
+
+Install the css-html-js-minify library with your favorite Python package 
manager ::
+
+  pip install css-html-js-minify
+
+
 No-Op Compressors
 =================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/docs/conf.py 
new/django-pipeline-2.0.5/docs/conf.py
--- old/django-pipeline-1.7.0/docs/conf.py      2020-01-05 03:59:08.000000000 
+0100
+++ new/django-pipeline-2.0.5/docs/conf.py      2020-08-16 22:47:54.000000000 
+0200
@@ -49,9 +49,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = '1.6'
+version = '2.0'
 # The full version, including alpha/beta/rc tags.
-release = '1.6.14'
+release = '2.0.0'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/docs/configuration.rst 
new/django-pipeline-2.0.5/docs/configuration.rst
--- old/django-pipeline-1.7.0/docs/configuration.rst    2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/docs/configuration.rst    2020-08-16 
22:47:54.000000000 +0200
@@ -231,11 +231,11 @@
 Defaults to ::
 
   (
-    (b'text/coffeescript', '.coffee'),
-    (b'text/less', '.less'),
-    (b'text/javascript', '.js'),
-    (b'text/x-sass', '.sass'),
-    (b'text/x-scss', '.scss')
+    ('text/coffeescript', '.coffee'),
+    ('text/less', '.less'),
+    ('text/javascript', '.js'),
+    ('text/x-sass', '.sass'),
+    ('text/x-scss', '.scss')
   )
 
 .. warning::
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/docs/installation.rst 
new/django-pipeline-2.0.5/docs/installation.rst
--- old/django-pipeline-1.7.0/docs/installation.rst     2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/docs/installation.rst     2020-08-16 
22:47:54.000000000 +0200
@@ -17,7 +17,7 @@
 
 3. Use a pipeline storage for ``STATICFILES_STORAGE`` ::
 
-        STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
+        STATICFILES_STORAGE = 'pipeline.storage.PipelineManifestStorage'
 
 4. Add the ``PipelineFinder`` to ``STATICFILES_FINDERS`` ::
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/docs/storages.rst 
new/django-pipeline-2.0.5/docs/storages.rst
--- old/django-pipeline-1.7.0/docs/storages.rst 2020-01-05 03:59:08.000000000 
+0100
+++ new/django-pipeline-2.0.5/docs/storages.rst 2020-08-16 22:47:54.000000000 
+0200
@@ -15,7 +15,7 @@
 
 And if you want versioning use ::
 
-  STATICFILES_STORAGE = 'pipeline.storage.PipelineCachedStorage'
+  STATICFILES_STORAGE = 'pipeline.storage.PipelineManifestStorage'
 
 There is also non-packing storage available, that allows you to run 
``collectstatic`` command
 without packaging your assets. Useful for production when you don't want to 
run compressor or compilers ::
@@ -24,7 +24,7 @@
 
 Also available if you want versioning ::
 
-  STATICFILES_STORAGE = 'pipeline.storage.NonPackagingPipelineCachedStorage'
+  STATICFILES_STORAGE = 'pipeline.storage.NonPackagingPipelineManifestStorage'
 
 If you use staticfiles with ``DEBUG = False`` (i.e. for integration tests
 with `Selenium <http://docs.seleniumhq.org/>`_) you should install the finder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/collector.py 
new/django-pipeline-2.0.5/pipeline/collector.py
--- old/django-pipeline-1.7.0/pipeline/collector.py     2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/collector.py     2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import os
 
 from collections import OrderedDict
@@ -7,11 +5,6 @@
 import django
 from django.contrib.staticfiles import finders
 from django.contrib.staticfiles.storage import staticfiles_storage
-try:
-    from django.utils.six import iterkeys
-except ImportError:
-    iterkeys = iter
-
 
 from pipeline.finders import PipelineFinder
 
@@ -61,7 +54,7 @@
                 if files and len(files) == len(found_files):
                     break
 
-        return iterkeys(found_files)
+        return found_files.keys()
 
     def copy_file(self, path, prefixed_path, source_storage):
         # Delete the target file if needed or break
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compilers/__init__.py 
new/django-pipeline-2.0.5/pipeline/compilers/__init__.py
--- old/django-pipeline-1.7.0/pipeline/compilers/__init__.py    2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compilers/__init__.py    2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import os
 import shutil
 import subprocess
@@ -8,12 +6,6 @@
 from django.contrib.staticfiles import finders
 from django.contrib.staticfiles.storage import staticfiles_storage
 from django.core.files.base import ContentFile
-from django.utils.encoding import smart_bytes
-try:
-   from django.utils.six import string_types, text_type
-except ImportError:
-    string_types = (str,)
-    text_type = str
 
 from pipeline.conf import settings
 from pipeline.exceptions import CompilerError
@@ -73,7 +65,7 @@
         raise NotImplementedError
 
     def save_file(self, path, content):
-        return self.storage.save(path, ContentFile(smart_bytes(content)))
+        return self.storage.save(path, ContentFile(content))
 
     def read_file(self, path):
         file = self.storage.open(path, 'rb')
@@ -114,7 +106,7 @@
         """
         argument_list = []
         for flattening_arg in command:
-            if isinstance(flattening_arg, string_types):
+            if isinstance(flattening_arg, (str,)):
                 argument_list.append(flattening_arg)
             else:
                 argument_list.extend(flattening_arg)
@@ -126,7 +118,7 @@
         try:
             # We always catch stdout in a file, but we may not have a use for 
it.
             temp_file_container = cwd or os.path.dirname(stdout_captured or 
"") or os.getcwd()
-            with NamedTemporaryFile(delete=False, dir=temp_file_container) as 
stdout:
+            with NamedTemporaryFile('wb', delete=False, 
dir=temp_file_container) as stdout:
                 compiling = subprocess.Popen(argument_list, cwd=cwd,
                                              stdout=stdout,
                                              stderr=subprocess.PIPE)
@@ -136,19 +128,19 @@
             if compiling.returncode != 0:
                 stdout_captured = None  # Don't save erroneous result.
                 raise CompilerError(
-                    "{0!r} exit code {1}\n{2}".format(argument_list, 
compiling.returncode, stderr),
+                    f"{argument_list!r} exit code 
{compiling.returncode}\n{stderr}",
                     command=argument_list,
                     error_output=stderr)
 
             # User wants to see everything that happened.
             if self.verbose:
-                with open(stdout.name) as out:
+                with open(stdout.name, 'rb') as out:
                     print(out.read())
                 print(stderr)
         except OSError as e:
             stdout_captured = None  # Don't save erroneous result.
             raise CompilerError(e, command=argument_list,
-                                error_output=text_type(e))
+                                error_output=str(e))
         finally:
             # Decide what to do with captured stdout.
             if stdout:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compilers/coffee.py 
new/django-pipeline-2.0.5/pipeline/compilers/coffee.py
--- old/django-pipeline-1.7.0/pipeline/compilers/coffee.py      2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compilers/coffee.py      2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from pipeline.conf import settings
 from pipeline.compilers import SubProcessCompiler
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compilers/es6.py 
new/django-pipeline-2.0.5/pipeline/compilers/es6.py
--- old/django-pipeline-1.7.0/pipeline/compilers/es6.py 2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compilers/es6.py 2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from pipeline.conf import settings
 from pipeline.compilers import SubProcessCompiler
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compilers/less.py 
new/django-pipeline-2.0.5/pipeline/compilers/less.py
--- old/django-pipeline-1.7.0/pipeline/compilers/less.py        2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compilers/less.py        2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from os.path import dirname
 
 from pipeline.conf import settings
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/pipeline/compilers/livescript.py 
new/django-pipeline-2.0.5/pipeline/compilers/livescript.py
--- old/django-pipeline-1.7.0/pipeline/compilers/livescript.py  2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compilers/livescript.py  2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from pipeline.conf import settings
 from pipeline.compilers import SubProcessCompiler
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compilers/sass.py 
new/django-pipeline-2.0.5/pipeline/compilers/sass.py
--- old/django-pipeline-1.7.0/pipeline/compilers/sass.py        2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compilers/sass.py        2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from os.path import dirname
 
 from pipeline.conf import settings
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compilers/stylus.py 
new/django-pipeline-2.0.5/pipeline/compilers/stylus.py
--- old/django-pipeline-1.7.0/pipeline/compilers/stylus.py      2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compilers/stylus.py      2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from os.path import dirname
 
 from pipeline.conf import settings
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/pipeline/compressors/__init__.py 
new/django-pipeline-2.0.5/pipeline/compressors/__init__.py
--- old/django-pipeline-1.7.0/pipeline/compressors/__init__.py  2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/__init__.py  2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import base64
 import os
 import posixpath
@@ -10,10 +8,6 @@
 
 from django.contrib.staticfiles.storage import staticfiles_storage
 from django.utils.encoding import smart_bytes, force_text
-try:
-    from django.utils.six import string_types
-except ImportError:
-    string_types = (str,)
 
 from pipeline.conf import settings
 from pipeline.exceptions import CompressorError
@@ -84,7 +78,7 @@
         elif variant == "datauri":
             return self.with_data_uri(css)
         else:
-            raise CompressorError("\"%s\" is not a valid variant" % variant)
+            raise CompressorError(f"\"{variant}\" is not a valid variant")
 
     def compile_templates(self, paths):
         compiled = []
@@ -135,10 +129,10 @@
                 quote = match.group(1) or ''
                 asset_path = match.group(2)
                 if NON_REWRITABLE_URL.match(asset_path):
-                    return "url(%s%s%s)" % (quote, asset_path, quote)
+                    return f"url({quote}{asset_path}{quote})"
                 asset_url = self.construct_asset_path(asset_path, path,
                                                       output_filename, variant)
-                return "url(%s)" % asset_url
+                return f"url({asset_url})"
             content = self.read_text(path)
             # content needs to be unicode to avoid explosions with non-ascii 
chars
             content = re.sub(URL_DETECTOR, reconstruct, content)
@@ -181,7 +175,7 @@
             path = match.group(1)
             mime_type = self.mime_type(path)
             data = self.encoded_content(path)
-            return "url(\"data:%s;charset=utf-8;base64,%s\")" % (mime_type, 
data)
+            return f"url(\"data:{mime_type};charset=utf-8;base64,{data}\")"
         return re.sub(URL_REPLACER, datauri, css)
 
     def encoded_content(self, path):
@@ -241,7 +235,7 @@
     def execute_command(self, command, content):
         argument_list = []
         for flattening_arg in command:
-            if isinstance(flattening_arg, string_types):
+            if isinstance(flattening_arg, (str,)):
                 argument_list.append(flattening_arg)
             else:
                 argument_list.extend(flattening_arg)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/pipeline/compressors/closure.py 
new/django-pipeline-2.0.5/pipeline/compressors/closure.py
--- old/django-pipeline-1.7.0/pipeline/compressors/closure.py   2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/closure.py   2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from pipeline.conf import settings
 from pipeline.compressors import SubProcessCompressor
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/pipeline/compressors/csshtmljsminify.py 
new/django-pipeline-2.0.5/pipeline/compressors/csshtmljsminify.py
--- old/django-pipeline-1.7.0/pipeline/compressors/csshtmljsminify.py   
1970-01-01 01:00:00.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/csshtmljsminify.py   
2020-08-16 22:47:54.000000000 +0200
@@ -0,0 +1,15 @@
+from pipeline.compressors import CompressorBase
+
+
+class CssHtmlJsMinifyCompressor(CompressorBase):
+    """
+    CSS, HTML and JS compressor based on the Python library css-html-js-minify
+    (https://pypi.org/project/css-html-js-minify/).
+    """
+    def compress_css(self, css):
+        from css_html_js_minify import css_minify
+        return css_minify(css)
+
+    def compress_js(self, js):
+        from css_html_js_minify import js_minify
+        return js_minify(js)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compressors/cssmin.py 
new/django-pipeline-2.0.5/pipeline/compressors/cssmin.py
--- old/django-pipeline-1.7.0/pipeline/compressors/cssmin.py    2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/cssmin.py    2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from pipeline.conf import settings
 from pipeline.compressors import SubProcessCompressor
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/pipeline/compressors/csstidy.py 
new/django-pipeline-2.0.5/pipeline/compressors/csstidy.py
--- old/django-pipeline-1.7.0/pipeline/compressors/csstidy.py   2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/csstidy.py   2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from django.core.files import temp as tempfile
 
 from pipeline.conf import settings
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compressors/jsmin.py 
new/django-pipeline-2.0.5/pipeline/compressors/jsmin.py
--- old/django-pipeline-1.7.0/pipeline/compressors/jsmin.py     2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/jsmin.py     2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, unicode_literals
-
 from pipeline.compressors import CompressorBase
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compressors/slimit.py 
new/django-pipeline-2.0.5/pipeline/compressors/slimit.py
--- old/django-pipeline-1.7.0/pipeline/compressors/slimit.py    2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/slimit.py    2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import absolute_import, unicode_literals
-
 from pipeline.compressors import CompressorBase
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/pipeline/compressors/uglifyjs.py 
new/django-pipeline-2.0.5/pipeline/compressors/uglifyjs.py
--- old/django-pipeline-1.7.0/pipeline/compressors/uglifyjs.py  2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/uglifyjs.py  2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from pipeline.conf import settings
 from pipeline.compressors import SubProcessCompressor
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/pipeline/compressors/yuglify.py 
new/django-pipeline-2.0.5/pipeline/compressors/yuglify.py
--- old/django-pipeline-1.7.0/pipeline/compressors/yuglify.py   2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/yuglify.py   2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from pipeline.conf import settings
 from pipeline.compressors import SubProcessCompressor
 
@@ -8,7 +6,7 @@
     def compress_common(self, content, compress_type, arguments):
         command = (
             settings.YUGLIFY_BINARY,
-            "--type={}".format(compress_type),
+            f"--type={compress_type}",
             arguments
         )
         return self.execute_command(command, content)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/compressors/yui.py 
new/django-pipeline-2.0.5/pipeline/compressors/yui.py
--- old/django-pipeline-1.7.0/pipeline/compressors/yui.py       2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/compressors/yui.py       2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from pipeline.conf import settings
 from pipeline.compressors import SubProcessCompressor
 
@@ -8,7 +6,7 @@
     def compress_common(self, content, compress_type, arguments):
         command = (
             settings.YUI_BINARY,
-            "--type={}".format(compress_type),
+            f"--type={compress_type}",
             arguments
         )
         return self.execute_command(command, content)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/conf.py 
new/django-pipeline-2.0.5/pipeline/conf.py
--- old/django-pipeline-1.7.0/pipeline/conf.py  2020-01-05 03:59:08.000000000 
+0100
+++ new/django-pipeline-2.0.5/pipeline/conf.py  2020-08-16 22:47:54.000000000 
+0200
@@ -1,17 +1,10 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 import os
-from collections import MutableMapping
+from collections.abc import MutableMapping
 import shlex
 
 from django.conf import settings as _settings
 from django.core.signals import setting_changed
 from django.dispatch import receiver
-try:
-    from django.utils.six import string_types
-except ImportError:
-    string_types = (str,)
 
 
 DEFAULTS = {
@@ -78,11 +71,11 @@
     'LESS_ARGUMENTS': '',
 
     'MIMETYPES': (
-        (b'text/coffeescript', '.coffee'),
-        (b'text/less', '.less'),
-        (b'text/javascript', '.js'),
-        (b'text/x-sass', '.sass'),
-        (b'text/x-scss', '.scss')
+        (('text/coffeescript'), ('.coffee')),
+        (('text/less'), ('.less')),
+        (('text/javascript'), ('.js')),
+        (('text/x-sass'), ('.sass')),
+        (('text/x-scss'), ('.scss'))
     ),
 
     'EMBED_MAX_IMAGE_SIZE': 32700,
@@ -101,7 +94,7 @@
     def __getitem__(self, key):
         value = self.settings[key]
         if key.endswith(("_BINARY", "_ARGUMENTS")):
-            if isinstance(value, string_types):
+            if isinstance(value, (str,)):
                 return tuple(shlex.split(value, posix=(os.name == 'posix')))
             return tuple(value)
         return value
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/decorator.py 
new/django-pipeline-2.0.5/pipeline/decorator.py
--- old/django-pipeline-1.7.0/pipeline/decorator.py     2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/decorator.py     1970-01-01 
01:00:00.000000000 +0100
@@ -1,23 +0,0 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
-""" 
-    This code is a part of django.utils.six on 
https://github.com/django/django/blob/stable/2.2.x/django/utils/six.py removed 
form Django 3.0
-    To keep the backward compatibility between python 2 and 3 the decorator 
need to be used as well, during the time we find a proper way to 
-    handle MetaClass overwright working on both versions (or dropping python 2 
support).
-"""
-
-def add_metaclass(metaclass):
-    """Class decorator for creating a class with a metaclass."""
-    def wrapper(cls):
-        orig_vars = cls.__dict__.copy()
-        slots = orig_vars.get('__slots__')
-        if slots is not None:
-            if isinstance(slots, str):
-                slots = [slots]
-            for slots_var in slots:
-                orig_vars.pop(slots_var)
-        orig_vars.pop('__dict__', None)
-        orig_vars.pop('__weakref__', None)
-        return metaclass(cls.__name__, cls.__bases__, orig_vars)
-    return wrapper
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/exceptions.py 
new/django-pipeline-2.0.5/pipeline/exceptions.py
--- old/django-pipeline-1.7.0/pipeline/exceptions.py    2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/exceptions.py    2020-08-16 
22:47:54.000000000 +0200
@@ -1,4 +1,3 @@
-from __future__ import unicode_literals
 
 
 class PipelineException(Exception):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/forms.py 
new/django-pipeline-2.0.5/pipeline/forms.py
--- old/django-pipeline-1.7.0/pipeline/forms.py 2020-01-05 03:59:08.000000000 
+0100
+++ new/django-pipeline-2.0.5/pipeline/forms.py 2020-08-16 22:47:54.000000000 
+0200
@@ -1,15 +1,7 @@
 """Support for referencing Pipeline packages in forms and widgets."""
 
-from __future__ import unicode_literals
-
 from django.contrib.staticfiles.storage import staticfiles_storage
 from django.utils.functional import cached_property
-try:
-    from django.utils.six import iteritems, add_metaclass
-except ImportError:
-    from .decorator import add_metaclass
-    def iteritems(dictionary):
-        return dictionary.items()
 
 from .collector import default_collector
 from .conf import settings
@@ -136,7 +128,7 @@
         # If we define any packages, we'll need to use our special
         # PipelineFormMediaProperty class. We use this instead of intercepting
         # in __getattribute__ because Django does not access them through
-        # normal properpty access. Instead, grabs the Media class's __dict__
+        # normal property access. Instead, grabs the Media class's __dict__
         # and accesses them from there. By using these special properties, we
         # can handle direct access (Media.css) and dictionary-based access
         # (Media.__dict__['css']).
@@ -173,7 +165,7 @@
                                   media_type='css',
                                   extra_files=extra_files.get(media_target,
                                                               [])))
-            for media_target, media_packages in iteritems(css_packages)
+            for media_target, media_packages in css_packages.items()
         )
 
     def _get_js_files(cls, extra_files):
@@ -238,8 +230,7 @@
         return source_files
 
 
-@add_metaclass(PipelineFormMediaMetaClass)
-class PipelineFormMedia(object):
+class PipelineFormMedia(object, metaclass=PipelineFormMediaMetaClass):
     """Base class for form or widget Media classes that use Pipeline packages.
 
     Forms or widgets that need custom CSS or JavaScript media on a page can
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/glob.py 
new/django-pipeline-2.0.5/pipeline/glob.py
--- old/django-pipeline-1.7.0/pipeline/glob.py  2020-01-05 03:59:08.000000000 
+0100
+++ new/django-pipeline-2.0.5/pipeline/glob.py  2020-08-16 22:47:54.000000000 
+0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import os
 import re
 import fnmatch
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/jinja2/__init__.py 
new/django-pipeline-2.0.5/pipeline/jinja2/__init__.py
--- old/django-pipeline-1.7.0/pipeline/jinja2/__init__.py       2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/jinja2/__init__.py       2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from jinja2 import nodes, TemplateSyntaxError
 from jinja2.ext import Extension
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/manifest.py 
new/django-pipeline-2.0.5/pipeline/manifest.py
--- old/django-pipeline-1.7.0/pipeline/manifest.py      2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/manifest.py      2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import os
 
 from django.conf.settings import settings as django_settings
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/middleware.py 
new/django-pipeline-2.0.5/pipeline/middleware.py
--- old/django-pipeline-1.7.0/pipeline/middleware.py    2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/middleware.py    2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from django.core.exceptions import MiddlewareNotUsed
 from django.utils.encoding import DjangoUnicodeDecodeError
 from django.utils.html import strip_spaces_between_tags as minify_html
@@ -18,7 +16,7 @@
     def process_response(self, request, response):
         if response.has_header('Content-Type') and 'text/html' in 
response['Content-Type']:
             try:
-                response.content = minify_html(response.content.strip())
+                response.content = 
minify_html(response.content.decode('utf-8').strip())
                 response['Content-Length'] = str(len(response.content))
             except DjangoUnicodeDecodeError:
                 pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/packager.py 
new/django-pipeline-2.0.5/pipeline/packager.py
--- old/django-pipeline-1.7.0/pipeline/packager.py      2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/packager.py      2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from django.contrib.staticfiles.storage import staticfiles_storage
 from django.contrib.staticfiles.finders import find
 from django.core.files.base import ContentFile
@@ -109,7 +107,7 @@
     def pack(self, package, compress, signal, **kwargs):
         output_filename = package.output_filename
         if self.verbose:
-            print("Saving: %s" % output_filename)
+            print(f"Saving: {output_filename}")
         paths = self.compile(
             package.paths,
             compiler_options=package.compiler_options,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/signals.py 
new/django-pipeline-2.0.5/pipeline/signals.py
--- old/django-pipeline-1.7.0/pipeline/signals.py       2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/signals.py       2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from django.dispatch import Signal
 
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/storage.py 
new/django-pipeline-2.0.5/pipeline/storage.py
--- old/django-pipeline-1.7.0/pipeline/storage.py       2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/storage.py       2020-08-16 
22:47:54.000000000 +0200
@@ -1,10 +1,14 @@
-from __future__ import unicode_literals
-
 import gzip
 
 from io import BytesIO
 
-from django.contrib.staticfiles.storage import CachedStaticFilesStorage, 
StaticFilesStorage
+from django import get_version as django_version
+
+_CACHED_STATIC_FILES_STORAGE_AVAILABLE = django_version() < '3.1'
+
+if _CACHED_STATIC_FILES_STORAGE_AVAILABLE:
+    from django.contrib.staticfiles.storage import CachedStaticFilesStorage
+from django.contrib.staticfiles.storage import ManifestStaticFilesStorage, 
StaticFilesStorage
 from django.contrib.staticfiles.utils import matches_patterns
 
 from django.core.files.base import File
@@ -72,7 +76,7 @@
                 if not matches_patterns(path, self.gzip_patterns):
                     continue
                 original_file = self.open(path)
-                gzipped_path = "{0}.gz".format(path)
+                gzipped_path = f"{path}.gz"
                 if self.exists(gzipped_path):
                     self.delete(gzipped_path)
                 gzipped_file = self._compress(original_file)
@@ -92,9 +96,22 @@
     pass
 
 
-class PipelineCachedStorage(PipelineMixin, CachedStaticFilesStorage):
+if _CACHED_STATIC_FILES_STORAGE_AVAILABLE:
+    class PipelineCachedStorage(PipelineMixin, CachedStaticFilesStorage):
+        # Deprecated since Django 2.2
+        # Removed in Django 3.1
+        pass
+
+
+    class NonPackagingPipelineCachedStorage(NonPackagingMixin, 
PipelineCachedStorage):
+        # Deprecated since Django 2.2
+        # Removed in Django 3.1
+        pass
+
+
+class PipelineManifestStorage(PipelineMixin, ManifestStaticFilesStorage):
     pass
 
 
-class NonPackagingPipelineCachedStorage(NonPackagingMixin, 
PipelineCachedStorage):
+class NonPackagingPipelineManifestStorage(NonPackagingMixin, 
ManifestStaticFilesStorage):
     pass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/pipeline/templatetags/pipeline.py 
new/django-pipeline-2.0.5/pipeline/templatetags/pipeline.py
--- old/django-pipeline-1.7.0/pipeline/templatetags/pipeline.py 2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/pipeline/templatetags/pipeline.py 2020-08-16 
22:47:54.000000000 +0200
@@ -1,12 +1,10 @@
-from __future__ import unicode_literals
-
 import logging
 import subprocess
 
 from django.contrib.staticfiles.storage import staticfiles_storage
 
 from django import template
-from django.template.base import Context, VariableDoesNotExist
+from django.template.base import VariableDoesNotExist
 from django.template.loader import render_to_string
 from django.utils.safestring import mark_safe
 
@@ -77,7 +75,7 @@
         Subclasses can override this method to provide custom behavior for
         rendering the output file.
         """
-        method = getattr(self, 'render_{0}'.format(package_type))
+        method = getattr(self, f'render_{package_type}')
 
         return method(package, package.output_filename)
 
@@ -98,15 +96,13 @@
             default_collector.collect(self.request)
 
         packager = Packager()
-        method = getattr(self, 'render_individual_{0}'.format(package_type))
+        method = getattr(self, f'render_individual_{package_type}')
 
         try:
             paths = packager.compile(package.paths)
         except CompilerError as e:
             if settings.SHOW_ERRORS_INLINE:
-                method = getattr(self, 'render_error_{0}'.format(
-                    package_type))
-
+                method = getattr(self, f'render_error_{package_type}')
                 return method(package_name, e)
             else:
                 raise
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/utils.py 
new/django-pipeline-2.0.5/pipeline/utils.py
--- old/django-pipeline-1.7.0/pipeline/utils.py 2020-01-05 03:59:08.000000000 
+0100
+++ new/django-pipeline-2.0.5/pipeline/utils.py 2020-08-16 22:47:54.000000000 
+0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 try:
     import fcntl
 except ImportError:
@@ -12,10 +10,7 @@
 import os
 import sys
 
-try:
-    from urllib.parse import quote
-except ImportError:
-    from urllib import quote
+from urllib.parse import quote
 
 from django.utils.encoding import smart_text
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/pipeline/views.py 
new/django-pipeline-2.0.5/pipeline/views.py
--- old/django-pipeline-1.7.0/pipeline/views.py 2020-01-05 03:59:08.000000000 
+0100
+++ new/django-pipeline-2.0.5/pipeline/views.py 2020-08-16 22:47:54.000000000 
+0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from django.conf import settings as django_settings
 from django.core.exceptions import ImproperlyConfigured
 from django.views.static import serve
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/setup.py 
new/django-pipeline-2.0.5/setup.py
--- old/django-pipeline-1.7.0/setup.py  2020-01-05 04:20:37.000000000 +0100
+++ new/django-pipeline-2.0.5/setup.py  2020-08-16 22:47:54.000000000 +0200
@@ -6,7 +6,7 @@
 
 setup(
     name='django-pipeline',
-    version='1.7.0',
+    version='2.0.5',
     description='Pipeline is an asset packaging library for Django.',
     long_description=io.open('README.rst', encoding='utf-8').read() + '\n\n' +
         io.open('HISTORY.rst', encoding='utf-8').read(),
@@ -16,7 +16,6 @@
     license='MIT',
     packages=find_packages(exclude=['tests', 'tests.tests']),
     zip_safe=False,
-    install_requires=['futures >= 2.1.3;python_version<"3"'],
     include_package_data=True,
     keywords=('django pipeline asset compiling concatenation compression'
               ' packaging'),
@@ -24,17 +23,14 @@
         'Development Status :: 5 - Production/Stable',
         'Environment :: Web Environment',
         'Framework :: Django',
-        'Framework :: Django :: 1.11',
-        'Framework :: Django :: 2.0',
         'Framework :: Django :: 2.2',
         'Framework :: Django :: 3.0',
+        'Framework :: Django :: 3.1',
         'Intended Audience :: Developers',
         'License :: OSI Approved :: MIT License',
         'Operating System :: OS Independent',
         'Programming Language :: Python',
-        'Programming Language :: Python :: 2.7',
         'Programming Language :: Python :: 3',
-        'Programming Language :: Python :: 3.5',
         'Programming Language :: Python :: 3.6',
         'Programming Language :: Python :: 3.7',
         'Programming Language :: Python :: 3.8',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/tests/assets/compressors/csshtmljsminify.css 
new/django-pipeline-2.0.5/tests/assets/compressors/csshtmljsminify.css
--- old/django-pipeline-1.7.0/tests/assets/compressors/csshtmljsminify.css      
1970-01-01 01:00:00.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/assets/compressors/csshtmljsminify.css      
2020-08-16 22:47:54.000000000 +0200
@@ -0,0 +1 @@
+@charset "utf-8";.concat{display:none}.concatenate{display:block}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/django-pipeline-1.7.0/tests/assets/compressors/csshtmljsminify.js 
new/django-pipeline-2.0.5/tests/assets/compressors/csshtmljsminify.js
--- old/django-pipeline-1.7.0/tests/assets/compressors/csshtmljsminify.js       
1970-01-01 01:00:00.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/assets/compressors/csshtmljsminify.js       
2020-08-16 22:47:54.000000000 +0200
@@ -0,0 +1 @@
+(function(){(function(){window.concat=function(){console.log(arguments);}}());(function(){window.cat=function(){console.log("hello
 world");}}());}).call(this);
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_collector.py 
new/django-pipeline-2.0.5/tests/tests/test_collector.py
--- old/django-pipeline-1.7.0/tests/tests/test_collector.py     2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_collector.py     2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import os
 
 from django.contrib.staticfiles import finders
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_compiler.py 
new/django-pipeline-2.0.5/tests/tests/test_compiler.py
--- old/django-pipeline-1.7.0/tests/tests/test_compiler.py      2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_compiler.py      2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import sys
 from unittest import skipIf, skipUnless
 
@@ -7,7 +5,6 @@
 from django.contrib.staticfiles.storage import staticfiles_storage
 from django.test import TestCase
 from django.test.client import RequestFactory
-from django.utils.encoding import smart_bytes
 
 from pipeline.collector import default_collector
 from pipeline.compilers import Compiler, CompilerBase, SubProcessCompiler
@@ -231,11 +228,11 @@
         infile_path = staticfiles_storage.path(infile)
         outfile_path = compiler.output_path(infile_path, 
compiler.output_extension)
         compiler.compile_file(_(infile_path), _(outfile_path), force=True)
-        with open(outfile_path) as f:
+        with open(outfile_path, 'r') as f:
             result = f.read()
-        with staticfiles_storage.open(expected) as f:
+        with staticfiles_storage.open(expected, 'r') as f:
             expected = f.read()
-        self.assertEqual(smart_bytes(result), expected)
+        self.assertEqual(result, expected)
 
     def test_sass(self):
         self._test_compiler('pipeline.compilers.sass.SASSCompiler',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_compressor.py 
new/django-pipeline-2.0.5/tests/tests/test_compressor.py
--- old/django-pipeline-1.7.0/tests/tests/test_compressor.py    2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_compressor.py    2020-08-16 
22:47:54.000000000 +0200
@@ -1,6 +1,3 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 import base64
 import io
 import os
@@ -16,7 +13,6 @@
 from django.conf import settings
 from django.test import TestCase
 from django.test.client import RequestFactory
-from django.utils.encoding import smart_bytes
 
 from pipeline.compressors import (
     Compressor, TEMPLATE_FUNC, SubProcessCompressor)
@@ -46,14 +42,16 @@
             _('pipeline/css/first.css'),
             _('pipeline/css/second.css')
         ], 'css/screen.css')
-        self.assertEqual(""".concat {\n  display: none;\n}\n\n.concatenate {\n 
 display: block;\n}\n""", css)
+        expected = """.concat {\n  display: none;\n}\n\n.concatenate {\n  
display: block;\n}\n"""
+        self.assertEqual(expected, css)
 
     def test_concatenate(self):
         js = self.compressor.concatenate([
             _('pipeline/js/first.js'),
             _('pipeline/js/second.js')
         ])
-        self.assertEqual("""(function() {\n  window.concat = function() {\n    
console.log(arguments);\n  }\n}()) // No semicolon\n\n;(function() {\n  
window.cat = function() {\n    console.log("hello world");\n  }\n}());\n""", js)
+        expected = """(function() {\n  window.concat = function() {\n    
console.log(arguments);\n  }\n}()) // No semicolon\n\n;(function() {\n  
window.cat = function() {\n    console.log("hello world");\n  }\n}());\n"""
+        self.assertEqual(expected, js)
 
     @patch.object(base64, 'b64encode')
     def test_encoded_content(self, mock):
@@ -220,9 +218,9 @@
                 result = self.compressor.compress_css(
                     [_('pipeline/css/first.css'), 
_('pipeline/css/second.css')],
                     os.path.join('pipeline', 'css', 
os.path.basename(expected_file)))
-        with self.compressor.storage.open(expected_file) as f:
+        with self.compressor.storage.open(expected_file, 'r') as f:
             expected = f.read()
-        self.assertEqual(smart_bytes(result), expected)
+        self.assertEqual(result, expected)
 
     def test_jsmin(self):
         self._test_compressor('pipeline.compressors.jsmin.JSMinCompressor',
@@ -232,20 +230,23 @@
         self._test_compressor('pipeline.compressors.slimit.SlimItCompressor',
             'js', 'pipeline/compressors/slimit.js')
 
+    def test_csshtmljsminify(self):
+        
self._test_compressor('pipeline.compressors.csshtmljsminify.CssHtmlJsMinifyCompressor',
+            'css', 'pipeline/compressors/csshtmljsminify.css')
+        
self._test_compressor('pipeline.compressors.csshtmljsminify.CssHtmlJsMinifyCompressor',
+            'js', 'pipeline/compressors/csshtmljsminify.js')
+
     @skipUnless(settings.HAS_NODE, "requires node")
     def test_uglifyjs(self):
         
self._test_compressor('pipeline.compressors.uglifyjs.UglifyJSCompressor',
             'js', 'pipeline/compressors/uglifyjs.js')
-
+        
     @skipUnless(settings.HAS_NODE, "requires node")
-    def test_yuglify_js(self):
-        self._test_compressor('pipeline.compressors.yuglify.YuglifyCompressor',
-            'js', 'pipeline/compressors/yuglify.js')
-
-    @skipUnless(settings.HAS_NODE, "requires node")
-    def test_yuglify_css(self):
+    def test_yuglify(self):
         self._test_compressor('pipeline.compressors.yuglify.YuglifyCompressor',
             'css', 'pipeline/compressors/yuglify.css')
+        self._test_compressor('pipeline.compressors.yuglify.YuglifyCompressor',
+            'js', 'pipeline/compressors/yuglify.js')
 
     @skipUnless(settings.HAS_NODE, "requires node")
     def test_cssmin(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_conf.py 
new/django-pipeline-2.0.5/tests/tests/test_conf.py
--- old/django-pipeline-1.7.0/tests/tests/test_conf.py  2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_conf.py  2020-08-16 
22:47:54.000000000 +0200
@@ -1,6 +1,3 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 import sys
 from unittest import skipIf, skipUnless
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_forms.py 
new/django-pipeline-2.0.5/tests/tests/test_forms.py
--- old/django-pipeline-1.7.0/tests/tests/test_forms.py 2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_forms.py 2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,4 @@
-from __future__ import unicode_literals
-
+from django import get_version as django_version
 from django.forms import Media
 from django.test import TestCase
 
@@ -149,6 +148,7 @@
             js = ('extra1.js', 'extra2.js')
 
         media = Media(MyMedia)
+        script_tag = '<script type="text/javascript" src="%s"></script>' if 
django_version() < '3.1' else '<script src="%s"></script>'
 
         self.assertEqual(
             MyMedia.js,
@@ -162,7 +162,7 @@
         self.assertEqual(
             media.render_js(),
             [
-                '<script type="text/javascript" src="%s"></script>' % path
+                script_tag % path
                 for path in (
                     '/static/extra1.js',
                     '/static/extra2.js',
@@ -179,6 +179,7 @@
             js = ('extra1.js', 'extra2.js')
 
         media = Media(MyMedia)
+        script_tag = '<script type="text/javascript" src="%s"></script>' if 
django_version() < '3.1' else '<script src="%s"></script>'
 
         self.assertEqual(
             MyMedia.js,
@@ -193,7 +194,7 @@
         self.assertEqual(
             media.render_js(),
             [
-                '<script type="text/javascript" src="%s"></script>' % path
+                script_tag % path
                 for path in (
                     '/static/extra1.js',
                     '/static/extra2.js',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_glob.py 
new/django-pipeline-2.0.5/tests/tests/test_glob.py
--- old/django-pipeline-1.7.0/tests/tests/test_glob.py  2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_glob.py  2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 import os
 import shutil
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_middleware.py 
new/django-pipeline-2.0.5/tests/tests/test_middleware.py
--- old/django-pipeline-1.7.0/tests/tests/test_middleware.py    2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_middleware.py    2020-08-16 
22:47:54.000000000 +0200
@@ -1,10 +1,5 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
 
-try:
-    from mock import patch
-except ImportError:
-    from unittest.mock import patch  # noqa
+from unittest.mock import patch
 
 from django.core.exceptions import MiddlewareNotUsed
 from django.test import TestCase
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_packager.py 
new/django-pipeline-2.0.5/tests/tests/test_packager.py
--- old/django-pipeline-1.7.0/tests/tests/test_packager.py      2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_packager.py      2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from django.test import TestCase
 
 from pipeline.collector import default_collector
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_storage.py 
new/django-pipeline-2.0.5/tests/tests/test_storage.py
--- old/django-pipeline-1.7.0/tests/tests/test_storage.py       2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_storage.py       2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from django.contrib.staticfiles import finders
 from django.contrib.staticfiles.storage import staticfiles_storage
 from django.core.management import call_command
@@ -14,10 +12,7 @@
 from tests.tests.test_compiler import DummyCompiler
 from tests.utils import pipeline_settings
 
-try:
-    from io import StringIO
-except ImportError:
-    from StringIO import StringIO
+from io import StringIO
 
 
 class PipelineNoPathStorage(PipelineStorage):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_template.py 
new/django-pipeline-2.0.5/tests/tests/test_template.py
--- old/django-pipeline-1.7.0/tests/tests/test_template.py      2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_template.py      2020-08-16 
22:47:54.000000000 +0200
@@ -1,6 +1,3 @@
-# -*- coding: utf-8 -*-
-from __future__ import unicode_literals
-
 from jinja2 import Environment, PackageLoader
 
 from django.template import Template, Context
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_utils.py 
new/django-pipeline-2.0.5/tests/tests/test_utils.py
--- old/django-pipeline-1.7.0/tests/tests/test_utils.py 2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_utils.py 2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,6 @@
 # -*- coding: utf-8 -*-
-from __future__ import unicode_literals
+
+import mimetypes
 
 from django.test import TestCase
 
@@ -11,3 +12,8 @@
         self.assertEqual('text/css', guess_type('stylesheet.css'))
         self.assertEqual('text/coffeescript', guess_type('application.coffee'))
         self.assertEqual('text/less', guess_type('stylesheet.less'))
+
+    def test_mimetypes_are_str(self):
+        for ext, mtype in mimetypes.types_map.items():
+            self.assertIsInstance(ext, str)
+            self.assertIsInstance(mtype, str)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/django-pipeline-1.7.0/tests/tests/test_views.py 
new/django-pipeline-2.0.5/tests/tests/test_views.py
--- old/django-pipeline-1.7.0/tests/tests/test_views.py 2020-01-05 
03:59:08.000000000 +0100
+++ new/django-pipeline-2.0.5/tests/tests/test_views.py 2020-08-16 
22:47:54.000000000 +0200
@@ -1,5 +1,3 @@
-from __future__ import unicode_literals
-
 from django.contrib.staticfiles.storage import staticfiles_storage
 from django.core.exceptions import ImproperlyConfigured
 from django.http import Http404


Reply via email to