New Upstream Snapshot - python-django-storages

Ready changes

Summary

Merged new upstream version: 1.13.2+git20230101.1.94c3092 (was: 1.13.2).

Resulting package

Built on 2023-01-25T01:36 (took 3m43s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots python-django-storages-docapt install -t fresh-snapshots python3-django-storages-boto3apt install -t fresh-snapshots python3-django-storages-dropboxapt install -t fresh-snapshots python3-django-storages-ftpapt install -t fresh-snapshots python3-django-storages-libcloudapt install -t fresh-snapshots python3-django-storages-sftpapt install -t fresh-snapshots python3-django-storages

Lintian Result

Diff

diff --git a/.gitattributes b/.gitattributes
deleted file mode 100644
index 176a458..0000000
--- a/.gitattributes
+++ /dev/null
@@ -1 +0,0 @@
-* text=auto
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
deleted file mode 100644
index a6cde04..0000000
--- a/.github/FUNDING.yml
+++ /dev/null
@@ -1 +0,0 @@
-tidelift: pypi/django-storages
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
deleted file mode 100644
index be51d21..0000000
--- a/.github/workflows/ci.yml
+++ /dev/null
@@ -1,72 +0,0 @@
-name: CI
-
-on:
-  push:
-    branches: [ master ]
-  pull_request:
-    branches:
-      - '**'
-
-
-jobs:
-  run_unittest_tests:
-    name: Unittest
-    runs-on: ${{ matrix.os }}
-    strategy:
-      matrix:
-        os: [ubuntu-20.04]
-        python-version: ["3.7", "3.8", "3.9", "3.10", "3.11"]
-        django-version: ["3.2", "4.0", "4.1", "main"]
-        exclude:
-            - python-version: "3.7"
-              django-version: "4.0"
-            - python-version: "3.7"
-              django-version: "4.1"
-            - python-version: "3.7"
-              django-version: "main"
-            - python-version: "3.11"
-              django-version: "3.2"
-            - python-version: "3.11"
-              django-version: "4.0"
-
-    steps:
-      - uses: actions/checkout@v2
-      - name: setup python
-        uses: actions/setup-python@v2
-        with:
-          python-version: ${{ matrix.python-version }}
-
-      - name: Install Dependencies
-        run: |
-          pip install --upgrade setuptools
-          pip install tox
-
-      - name: Run unittest Python ${{ matrix.python-version }} -- Django ${{ matrix.django-version }}
-        env:
-          TOXENV: py${{ matrix.python-version }}-django${{ matrix.django-version }}
-        run: tox
-
-  run_quality_tests:
-    name: Quality tests
-    runs-on: ${{ matrix.os }}
-    strategy:
-      matrix:
-        os: [ubuntu-20.04]
-        python-version: ["3.7"]
-
-    steps:
-      - uses: actions/checkout@v2
-      - name: setup python
-        uses: actions/setup-python@v2
-        with:
-          python-version: ${{ matrix.python-version }}
-
-      - name: Install Dependencies
-        run: |
-          pip install tox
-
-      - name: Quality tests
-        env:
-          TOXENV: flake8
-        run: |
-          tox
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 24d9002..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,21 +0,0 @@
-*.egg
-*.egg-info
-*.orig
-*.pyc
-*.swp
-
-.tox/
-build/
-__pycache__
-.coverage
-.cache
-
-.idea/
-.vscode/
-.pytest_cache/
-venv/
-
-dist/
-docs/_build
-
-.DS_Store
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..d29401b
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,1264 @@
+Metadata-Version: 2.1
+Name: django-storages
+Version: 1.13.2
+Summary: Support for many storage backends in Django
+Home-page: https://github.com/jschneier/django-storages
+Author: Josh Schneier
+Author-email: josh.schneier@gmail.com
+License: BSD-3-Clause
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Web Environment
+Classifier: Framework :: Django
+Classifier: Framework :: Django :: 3.2
+Classifier: Framework :: Django :: 4.0
+Classifier: Framework :: Django :: 4.1
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Requires-Python: >=3.7
+Provides-Extra: azure
+Provides-Extra: boto3
+Provides-Extra: dropbox
+Provides-Extra: google
+Provides-Extra: libcloud
+Provides-Extra: sftp
+License-File: LICENSE
+License-File: AUTHORS
+
+.. image:: https://raw.githubusercontent.com/jschneier/django-storages/master/docs/logos/horizontal.png
+    :alt: Django-Storages
+    :width: 100%
+
+.. image:: https://img.shields.io/pypi/v/django-storages.svg
+    :target: https://pypi.org/project/django-storages/
+    :alt: PyPI Version
+
+.. image:: https://github.com/jschneier/django-storages/actions/workflows/ci.yml/badge.svg
+    :target: https://github.com/jschneier/django-storages/actions/workflows/ci.yml
+    :alt: Build Status
+
+Installation
+============
+Installing from PyPI is as easy as doing:
+
+.. code-block:: bash
+
+  pip install django-storages
+
+If you'd prefer to install from source (maybe there is a bugfix in master that
+hasn't been released yet) then the magic incantation you are looking for is:
+
+.. code-block:: bash
+
+  pip install -e 'git+https://github.com/jschneier/django-storages.git#egg=django-storages'
+
+Once that is done set ``DEFAULT_FILE_STORAGE`` to the backend of your choice.
+If, for example, you want to use the boto3 backend you would set:
+
+.. code-block:: python
+
+  DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
+
+
+If you are using the ``FileSystemStorage`` as your storage management class in your models ``FileField`` fields, remove them
+and don't specify any storage parameter. That way, the ``DEFAULT_FILE_STORAGE`` class will be used by default in your field.
+For example, if you have a `photo` field defined as:
+
+.. code-block:: python
+
+    photo = models.FileField(
+        storage=FileSystemStorage(location=settings.MEDIA_ROOT),
+        upload_to='photos',
+    )
+
+Set it to just:
+
+.. code-block:: python
+
+    photo = models.FileField(
+        upload_to='photos',
+    )
+
+There are also a number of settings available to control how each storage backend functions,
+please consult the documentation for a comprehensive list.
+
+About
+=====
+django-storages is a project to provide a variety of storage backends in a single library.
+
+This library is usually compatible with the currently supported versions of
+Django. Check the Trove classifiers in setup.py to be sure.
+
+django-storages is backed in part by `Tidelift`_. Check them out for all of your enterprise open source
+software commercial support needs.
+
+.. _Tidelift: https://tidelift.com/subscription/pkg/pypi-django-storages?utm_source=pypi-django-storages&utm_medium=referral&utm_campaign=enterprise&utm_term=repo
+
+Security
+========
+
+To report a security vulnerability, please use the `Tidelift security contact`_. Tidelift will coordinate the
+fix and disclosure. Please **do not** post a public issue on the tracker.
+
+.. _Tidelift security contact: https://tidelift.com/security
+
+
+Found a Bug?
+============
+
+Issues are tracked via GitHub issues at the `project issue page
+<https://github.com/jschneier/django-storages/issues>`_.
+
+Documentation
+=============
+Documentation for django-storages is located at https://django-storages.readthedocs.io/.
+
+Contributing
+============
+
+#. `Check for open issues
+   <https://github.com/jschneier/django-storages/issues>`_ at the project
+   issue page or open a new issue to start a discussion about a feature or bug.
+#. Fork the `django-storages repository on GitHub
+   <https://github.com/jschneier/django-storages>`_ to start making changes.
+#. Add a test case to show that the bug is fixed or the feature is implemented
+   correctly.
+#. Bug me until I can merge your pull request.
+
+Please don't update the library version in CHANGELOG.rst or ``storages/__init__.py``, the maintainer will do that on release.
+If you're the first to update the CHANGELOG in this release cycle, just put the version as ``XXXX-XX-XX``.
+
+History
+=======
+This repo began as a fork of the original library under the package name of django-storages-redux and
+became the official successor (releasing under django-storages on PyPI) in February of 2016.
+
+django-storages CHANGELOG
+=========================
+
+1.13.2 (2022-12-23)
+*******************
+
+General
+-------
+
+- Add support for Python 3.11 (`#1196`_)
+- Add support for saving ``pathlib.Path`` names (`#1200`_)
+
+S3
+--
+
+- Catch 404 errors when calling ``delete()`` (`#1201`_)
+
+Azure
+-----
+
+- Use ``AZURE_CUSTOM_DOMAIN`` for retrieving blob URLs and storage URL for other operations (`#1176`_)
+
+Google Cloud
+------------
+
+- Use ``DEFAULT_RETRY`` for all upload & delete operations (`#1156`_)
+- Fix gzipping of content (`#1203`_)
+- Pass through kwargs to signed URL generator (`#1193`_)
+
+SFTP
+----
+
+- Improve write & memory performance when saving files (`#1194`_)
+
+.. _#1196: https://github.com/jschneier/django-storages/pull/1196
+.. _#1200: https://github.com/jschneier/django-storages/pull/1200
+.. _#1201: https://github.com/jschneier/django-storages/pull/1201
+.. _#1176: https://github.com/jschneier/django-storages/pull/1176
+.. _#1156: https://github.com/jschneier/django-storages/pull/1156
+.. _#1203: https://github.com/jschneier/django-storages/pull/1203
+.. _#1193: https://github.com/jschneier/django-storages/pull/1193
+.. _#1194: https://github.com/jschneier/django-storages/pull/1194
+
+1.13.1 (2022-08-06)
+*******************
+
+Dropbox
+-------
+
+- Strip off the root path when saving files to fix saving with upgraded versions of Django (`#1168`_)
+- Update ``DropBoxStorage`` constructor parameter order to be backwards compatible (`#1167`_)
+
+.. _#1167: https://github.com/jschneier/django-storages/pull/1167
+.. _#1168: https://github.com/jschneier/django-storages/pull/1168
+
+1.13 (2022-08-05)
+*****************
+
+General
+-------
+
+- Add support for Django 4.0 and 4.1 (`#1093`_)
+- Drop support for Django 2.2, 3.0 and 3.1 (`#1093`_)
+- Drop support for Python 3.5 and 3.6 (`#1093`_)
+
+S3
+--
+
+- **Breaking**: Update and document the undocumented ``AWS_S3_URL_PROTOCOL`` from ``http:`` to ``https:`` and remove the
+  undocumented ``AWS_S3_SECURE_URLS`` setting. You should only need to update your settings if you had updated either of
+  these previously undocumented settings.  The default behavior of constructing an ``https:`` URL with a custom domain
+  is unchanged (`#1164`_)
+- Add ``AWS_S3_USE_THREADS`` to disable ``threading`` for compatibility with ``gevent`` (`#1112`_)
+
+Dropbox
+-------
+
+- Add support for refresh tokens (`#1159`_)
+- Ignore ``ApiError`` exception in ``url()`` (`#1158`_)
+
+Azure
+-----
+
+- Restore support for ``AZURE_ENDPOINT_SUFFIX`` (`#1118`_)
+- Replace deprecated ``download_to_stream`` with ``readinto`` (`#1113`_)
+- Add ``AZURE_API_VERSION`` setting (`#1132`_)
+- Fix ``get_modified_time()`` (`#1134`_)
+
+Google Cloud
+------------
+
+- Add support for gzipping files via ``GS_IS_GZIPPED`` and ``GZIP_CONTENT_TYPES`` (`#980`_)
+- Use ``GS_BLOB_CHUNK_SIZE`` with files that already exist (`#1154`_)
+
+.. _#980: https://github.com/jschneier/django-storages/pull/980
+.. _#1118: https://github.com/jschneier/django-storages/pull/1118
+.. _#1113: https://github.com/jschneier/django-storages/pull/1113
+.. _#1112: https://github.com/jschneier/django-storages/pull/1112
+.. _#1132: https://github.com/jschneier/django-storages/pull/1132
+.. _#1134: https://github.com/jschneier/django-storages/pull/1134
+.. _#1159: https://github.com/jschneier/django-storages/pull/1159
+.. _#1158: https://github.com/jschneier/django-storages/pull/1158
+.. _#1164: https://github.com/jschneier/django-storages/pull/1164
+.. _#1093: https://github.com/jschneier/django-storages/pull/1093
+.. _#1154: https://github.com/jschneier/django-storages/pull/1154
+
+
+1.12.3 (2021-10-29)
+*******************
+
+General
+-------
+
+- Add support for Python 3.10 (`#1078`_)
+
+S3
+--
+
+- Re-raise non-404 errors in ``.exists()`` (`#1084`_, `#1085`_)
+
+Azure
+-----
+
+- Fix using ``AZURE_CUSTOM_DOMAIN`` with an account key credential (`#1082`_, `#1083`_)
+
+SFTP
+----
+
+- Catch ``FileNotFoundError`` instead of ``OSerror`` in ``.exists()`` to prevent swallowing ``socket.timeout`` exceptions (`#1064`_, `#1087`_)
+
+
+.. _#1078: https://github.com/jschneier/django-storages/pull/1078
+.. _#1084: https://github.com/jschneier/django-storages/issues/1084
+.. _#1085: https://github.com/jschneier/django-storages/pull/1085
+.. _#1082: https://github.com/jschneier/django-storages/issues/1082
+.. _#1083: https://github.com/jschneier/django-storages/pull/1083
+.. _#1064: https://github.com/jschneier/django-storages/issues/1064
+.. _#1087: https://github.com/jschneier/django-storages/pull/1087
+
+1.12.2 (2021-10-16)
+*******************
+
+Azure
+-----
+
+- Add ``parameters`` kwarg to ``AzureStorage.url`` to configure blob properties in the SAS token (`#1071`_)
+- Fix regression where ``AZURE_CUSTOM_DOMAIN`` was interpreted as a replacement of ``blob.core.windows.net`` rather than as a full domain
+  (`#1073`_, `#1076`_)
+
+.. _#1071: https://github.com/jschneier/django-storages/pull/1071
+.. _#1073: https://github.com/jschneier/django-storages/issues/1073
+.. _#1076: https://github.com/jschneier/django-storages/pull/1076
+
+1.12.1 (2021-10-11)
+*******************
+
+S3
+--
+
+- Change gzip compression to use a streaming implementation (`#1061`_)
+- Fix saving files with ``S3ManifestStaticStorage`` (`#1068`_, `#1069`_)
+
+.. _#1061: https://github.com/jschneier/django-storages/pull/1061
+.. _#1068: https://github.com/jschneier/django-storages/issues/1068
+.. _#1069: https://github.com/jschneier/django-storages/pull/1069
+
+1.12 (2021-10-06)
+*****************
+
+General
+-------
+- Add support for Django 3.2 (`#1046`_, `#1042`_, `#1005`_)
+- Replace Travis CI with GitHub actions (`#1051`_)
+
+S3
+--
+
+- Convert signing keys to bytes if necessary (`#1003`_)
+- Avoid a ListParts API call during multipart upload (`#1041`_)
+- Custom domains now use passed URL params (`#1054`_)
+- Allow the use of AWS profiles and clarify the options for passing credentials (`fbe9538`_)
+- Re-allow override of various access key names (`#1026`_)
+- Properly exclude empty folders during ``listdir`` (`66f4f8e`_)
+- Support saving file objects that are not ``seekable`` (`#860`_, `#1057`_)
+- Return ``True`` for ``.exists()`` if a non-404 error is encountered (`#938`_)
+
+Azure
+-----
+
+- **Breaking**: This backend has been rewritten to use the newer versions of ``azure-storage-blob``, which now has a minimum required version of 12.0. The settings ``AZURE_EMULATED_MODE``, ``AZURE_ENDPOINT_SUFFIX``, and ``AZURE_CUSTOM_CONNECTION_STRING`` are now ignored. (`#784`_, `#805`_)
+- Add support for user delegation keys (`#1063`_)
+
+Google Cloud
+------------
+
+- **Breaking**: The minimum required version of ``google-cloud-storage`` is now 1.27.0 (`#994`_)
+- **Breaking**: Switch URL signing version from v2 to v4 (`#994`_)
+- **Deprecated**: Support for ``GS_CACHE_CONTROL`` will be removed in 1.13. Please set the ``cache_control`` parameter of ``GS_OBJECT_PARAMETERS`` instead. (`#970`_)
+- Add ``GS_OBJECT_PARAMETERS`` and overridable ``GoogleCloudStorage.get_object_parameters`` to customize blob parameters for all blobs and per-blob respectively. (`#970`_)
+- Catch the ``NotFound`` exception raised when deleting a non-existent blob, this matches Django and other backends (`#998`_, `#999`_)
+- Fix signing URLs with custom endpoints (`#994`_)
+
+Dropbox
+-------
+
+- Validate ``write_mode`` param (`#1020`_)
+
+.. _fbe9538: https://github.com/jschneier/django-storages/commit/fbe9538b8574cfb0d95b04c9c477650dbfe8547b
+.. _66f4f8e: https://github.com/jschneier/django-storages/commit/66f4f8ec68daaac767c013d6b1a30cf26a7ac1ca
+.. _#1003: https://github.com/jschneier/django-storages/pull/1003
+.. _#1054: https://github.com/jschneier/django-storages/pull/1054
+.. _#1026: https://github.com/jschneier/django-storages/pull/1026
+.. _#1041: https://github.com/jschneier/django-storages/pull/1041
+.. _#970: https://github.com/jschneier/django-storages/pull/970
+.. _#998: https://github.com/jschneier/django-storages/issues/998
+.. _#784: https://github.com/jschneier/django-storages/issues/784
+.. _#805: https://github.com/jschneier/django-storages/pull/805
+.. _#999: https://github.com/jschneier/django-storages/pull/999
+.. _#1051: https://github.com/jschneier/django-storages/pull/1051
+.. _#1042: https://github.com/jschneier/django-storages/pull/1042
+.. _#1046: https://github.com/jschneier/django-storages/issues/1046
+.. _#1005: https://github.com/jschneier/django-storages/pull/1005
+.. _#1020: https://github.com/jschneier/django-storages/pull/1020
+.. _#860: https://github.com/jschneier/django-storages/issues/860
+.. _#1057: https://github.com/jschneier/django-storages/pull/1057
+.. _#938: https://github.com/jschneier/django-storages/pull/938
+.. _#994: https://github.com/jschneier/django-storages/pull/994
+.. _#1063: https://github.com/jschneier/django-storages/pull/1063
+
+1.11.1 (2020-12-23)
+*******************
+
+S3
+--
+
+- Revert fix for ``ValueError: I/O operation on closed file`` when calling ``collectstatic`` and
+  introduce ``S3StaticStorage`` and ``S3ManifestStaticStorage`` for use as ``STATICFILES_STORAGE`` targets (`#968`_)
+
+.. _#968: https://github.com/jschneier/django-storages/pull/968
+
+1.11 (2020-12-16)
+*****************
+
+General
+-------
+
+- Test against Python 3.9 (`#964`_)
+
+S3
+--
+
+- Fix ``ValueError: I/O operation on closed file`` when calling ``collectstatic`` (`#382`_, `#955`_)
+- Calculate ``S3Boto3StorageFile.buffer_size`` (via setting ``AWS_S3_FILE_BUFFER_SIZE``)
+  at run-time rather than import-time. (`#930`_)
+- Fix writing ``bytearray`` content (`#958`_, `#965`_)
+
+Google Cloud
+------------
+
+- Add setting ``GS_QUERYSTRING_AUTH`` to avoid signing URLs. This is useful for buckets with a
+  policy of Uniform public read (`#952`_)
+
+Azure
+-----
+
+- Add ``AZURE_OBJECT_PARAMETERS`` and overridable ``AzureStorage.get_object_parameters`` to customize
+  ``ContentSettings`` parameters for all keys and per-key respectively. (`#898`_)
+
+.. _#382: https://github.com/jschneier/django-storages/issues/382
+.. _#955: https://github.com/jschneier/django-storages/pull/955
+.. _#930: https://github.com/jschneier/django-storages/pull/930
+.. _#952: https://github.com/jschneier/django-storages/pull/952
+.. _#898: https://github.com/jschneier/django-storages/pull/898
+.. _#964: https://github.com/jschneier/django-storages/pull/964
+.. _#958: https://github.com/jschneier/django-storages/issues/958
+.. _#965: https://github.com/jschneier/django-storages/pull/965
+
+1.10.1 (2020-09-13)
+*******************
+
+S3
+--
+
+- Restore ``AWS_DEFAULT_ACL`` handling. This setting is ignored if ``ACL`` is set in
+  ``AWS_S3_OBJECT_PARAMETERS`` (`#934`_)
+
+SFTP
+----
+
+- Fix using ``SFTP_STORAGE_HOST`` (`#926`_)
+
+.. _#926: https://github.com/jschneier/django-storages/pull/926
+.. _#934: https://github.com/jschneier/django-storages/pull/934
+
+1.10 (2020-08-30)
+*****************
+
+General
+-------
+
+- **Breaking**: Removed support for end-of-life Python 2.7 and 3.4 (`#709`_)
+- **Breaking**: Removed support for end-of-life Django 1.11 (`#891`_)
+- Add support for Django 3.1 (`#916`_)
+- Introduce a new ``BaseStorage`` class with a ``get_default_settings`` method and use
+  it in ``S3Boto3Storage``, ``AzureStorage``, ``GoogleCloudStorage``, and ``SFTPStorage``. These backends
+  now calculate their settings when instantiated, not imported. (`#524`_, `#852`_)
+
+S3
+--
+
+- **Breaking**: Automatic bucket creation has been removed. Doing so encourages using overly broad credentials.
+  As a result, support for the corresponding ``AWS_BUCKET_ACL`` and ``AWS_AUTO_CREATE_BUCKET`` settings have been removed. (`#636`_)
+- **Breaking**: Support for the undocumented setting ``AWS_PRELOAD_METADATA`` has been removed (`#636`_)
+- **Breaking**: The constructor kwarg ``acl`` is no longer accepted. Instead, use the ``ACL`` key in setting ``AWS_S3_OBJECT_PARAMETERS``
+  (`#636`_)
+- **Breaking**: The constructor kwarg ``bucket`` is no longer accepted. Instead, use ``bucket_name`` or the ``AWS_STORAGE_BUCKET_NAME``
+  setting (`#636`_)
+- **Breaking**: Support for setting ``AWS_REDUCED_REDUNDANCY`` has been removed. Replace with ``StorageClass=REDUCED_REDUNDANCY``
+  in ``AWS_S3_OBJECT_PARAMETERS`` (`#636`_)
+- **Breaking**: Support for setting ``AWS_S3_ENCRYPTION`` has been removed. Replace with ``ServerSideEncryption=AES256`` in ``AWS_S3_OBJECT_PARAMETERS`` (`#636`_)
+- **Breaking**: Support for setting ``AWS_DEFAULT_ACL`` has been removed. Replace with ``ACL`` in ``AWS_S3_OBJECT_PARAMETERS`` (`#636`_)
+- Add ``http_method`` parameter to ``.url`` method (`#854`_)
+- Add support for signing Cloudfront URLs to the ``.url`` method. You must set ``AWS_CLOUDFRONT_KEY``,
+  ``AWS_CLOUDFRONT_KEY_ID`` and install either `cryptography`_ or `rsa`_ (`#456`_, `#587`_). See the docs for more info.
+  URLs will only be signed if ``AWS_QUERYSTRING_AUTH`` is set to ``True`` (`#885`_)
+
+Google Cloud
+------------
+
+- **Breaking**: Automatic bucket creation has been removed. Doing so encourages using overly broad credentials.
+  As a result, support for the corresponding ``GS_AUTO_CREATE_BUCKET`` and ``GS_AUTO_CREATE_ACL`` settings have been removed. (`#894`_)
+
+Dropbox
+-------
+
+- Add ``DROPBOX_WRITE_MODE`` setting to control e.g. overwriting behavior. Check the docs
+  for more info (`#873`_, `#138`_)
+
+SFTP
+----
+
+- Remove exception swallowing during ssh connection (`#835`_, `#838`_)
+
+FTP
+---
+
+- Add ``FTP_STORAGE_ENCODING`` setting to set the filesystem encoding  (`#803`_)
+- Support multiple nested paths for files (`#886`_)
+
+.. _cryptography: https://cryptography.io
+.. _rsa: https://stuvel.eu/rsa
+.. _#885: https://github.com/jschneier/django-storages/pull/885
+.. _#894: https://github.com/jschneier/django-storages/pull/894
+.. _#636: https://github.com/jschneier/django-storages/pull/636
+.. _#709: https://github.com/jschneier/django-storages/pull/709
+.. _#891: https://github.com/jschneier/django-storages/pull/891
+.. _#916: https://github.com/jschneier/django-storages/pull/916
+.. _#852: https://github.com/jschneier/django-storages/pull/852
+.. _#873: https://github.com/jschneier/django-storages/pull/873
+.. _#854: https://github.com/jschneier/django-storages/pull/854
+.. _#138: https://github.com/jschneier/django-storages/issues/138
+.. _#524: https://github.com/jschneier/django-storages/pull/524
+.. _#835: https://github.com/jschneier/django-storages/issues/835
+.. _#838: https://github.com/jschneier/django-storages/pull/838
+.. _#803: https://github.com/jschneier/django-storages/pull/803
+.. _#456: https://github.com/jschneier/django-storages/issues/456
+.. _#587: https://github.com/jschneier/django-storages/pull/587
+.. _#886: https://github.com/jschneier/django-storages/pull/886
+
+1.9.1 (2020-02-03)
+******************
+
+S3
+--
+
+- Fix reading files with ``S3Boto3StorageFile`` (`#831`_, `#833`_)
+
+.. _#831: https://github.com/jschneier/django-storages/issues/831
+.. _#833: https://github.com/jschneier/django-storages/pull/833
+
+1.9 (2020-02-02)
+****************
+
+General
+-------
+
+- **Breaking**: The long deprecated S3 backend based on ``boto`` has been removed. (`#825`_)
+- Test against and support Python 3.8 (`#810`_)
+
+S3
+--
+
+- **Deprecated**: Automatic bucket creation will be removed in version 1.10 (`#826`_)
+- **Deprecated**: The undocumented ``AWS_PRELOAD_METADATA`` and associated functionality will
+  be removed in version 1.10 (`#829`_)
+- **Deprecated**: Support for ``AWS_REDUCED_REDUNDANCY`` will be removed in version 1.10
+  Replace with ``StorageClass=REDUCED_REDUNDANCY`` in ``AWS_S3_OBJECT_PARAMETERS`` (`#829`_)
+- **Deprecated**: Support for ``AWS_S3_ENCRYPTION`` will be removed in version 1.10 (`#829`_)
+  Replace with ``ServerSideEncryption=AES256`` in ``AWS_S3_OBJECT_PARAMETERS``
+- A custom ``ContentEncoding`` is no longer overwritten automatically (note that specifying
+  one will disable automatic ``gzip``) (`#391`_, `#828`_).
+- Add ``S3Boto3Storage.get_object_parameters``, an overridable method for customizing
+  upload parameters on a per-object basis (`#819`_, `#828`_)
+- Opening and closing a file in `w` mode without writing anything will now create an empty file
+  in S3, this mimics the builtin ``open`` and Django's own ``FileSystemStorage`` (`#435`_, `#816`_)
+- Fix reading a file in text mode (`#404`_, `#827`_)
+
+Google Cloud
+------------
+
+- **Deprecated**: Automatic bucket creation will be removed in version 1.10 (`#826`_)
+
+Dropbox
+-------
+
+- Fix crash on ``DropBoxStorage.listdir`` (`#762`_)
+- Settings can now additionally be specified at the class level to ease subclassing (`#745`_)
+
+Libcloud
+--------
+
+- Add support for Backblaze B2 to ``LibCloudStorage.url`` (`#807`_)
+
+FTP
+---
+
+- Fix creating multiple intermediary directories on Windows (`#823`_, `#824`_)
+
+.. _#825: https://github.com/jschneier/django-storages/pull/825
+.. _#826: https://github.com/jschneier/django-storages/pull/826
+.. _#829: https://github.com/jschneier/django-storages/pull/829
+.. _#391: https://github.com/jschneier/django-storages/issues/391
+.. _#828: https://github.com/jschneier/django-storages/pull/828
+.. _#819: https://github.com/jschneier/django-storages/issues/819
+.. _#810: https://github.com/jschneier/django-storages/pull/810
+.. _#435: https://github.com/jschneier/django-storages/issues/435
+.. _#816: https://github.com/jschneier/django-storages/pull/816
+.. _#404: https://github.com/jschneier/django-storages/issues/404
+.. _#827: https://github.com/jschneier/django-storages/pull/827
+.. _#762: https://github.com/jschneier/django-storages/pull/762
+.. _#745: https://github.com/jschneier/django-storages/pull/745
+.. _#807: https://github.com/jschneier/django-storages/pull/807
+.. _#823: https://github.com/jschneier/django-storages/issues/823
+.. _#824: https://github.com/jschneier/django-storages/pull/824
+
+
+1.8 (2019-11-20)
+****************
+
+General
+-------
+- Add support for Django 3.0 (`#759`_)
+- Update license identifier to unambiguous ``BSD-3-Clause``
+
+S3
+--
+
+- Include error message raised when missing library is imported (`#776`_, `#793`_)
+
+Google
+------
+
+- **Breaking** The minimum supported version of ``google-cloud-storage`` is now ``1.15.0`` which enables...
+- Add setting ``GS_CUSTOM_ENDPOINT`` to allow usage of custom domains (`#775`_, `#648`_)
+
+Azure
+-----
+
+- Fix extra installation by pinning version to < 12 (`#785`_)
+- Add support for setting ``AZURE_CACHE_CONTROL`` header (`#780`_, `#674`_)
+
+.. _#759: https://github.com/jschneier/django-storages/pull/759
+.. _#776: https://github.com/jschneier/django-storages/issues/776
+.. _#793: https://github.com/jschneier/django-storages/pull/793
+.. _#775: https://github.com/jschneier/django-storages/issues/775
+.. _#648: https://github.com/jschneier/django-storages/pull/648
+.. _#785: https://github.com/jschneier/django-storages/pull/785
+.. _#780: https://github.com/jschneier/django-storages/pull/780
+.. _#674: https://github.com/jschneier/django-storages/issues/674
+
+
+1.7.2 (2019-09-10)
+******************
+
+S3
+--
+
+- Avoid misleading ``AWS_DEFAULT_ACL`` warning for insecure ``default_acl`` when
+  overridden as a class variable (`#591`_)
+- Propagate file deletion to cache when ``preload_metadata`` is ``True``,
+  (not the default) (`#743`_, `#749`_)
+- Fix exception raised on closed file (common if using ``ManifestFilesMixin`` or
+  ``collectstatic``. (`#382`_, `#754`_)
+
+Azure
+-----
+
+- Pare down the required packages in ``extra_requires`` when installing the ``azure`` extra to only
+  ``azure-storage-blob`` (`#680`_, `#684`_)
+- Fix compatability with ``generate_blob_shared_access_signature`` updated signature (`#705`_, `#723`_)
+- Fetching a file now uses the configured timeout rather than hardcoding one (`#727`_)
+- Add support for configuring all blobservice options: ``AZURE_ENDPOINT_SUFFIX``,
+  ``AZURE_CUSTOM_DOMAIN``, ``AZURE_CONNECTION_STRING``, ``AZURE_TOKEN_CREDENTIAL``.
+  See the docs for more info. Huge thanks once again to @nitely. (`#750`_)
+- Fix filename handling to not strip special characters (`#609`_, `#752`_)
+
+
+Google Cloud
+------------
+
+- Set the file acl in the same call that uploads it (`#698`_)
+- Reduce the number of queries and required permissions when ``GS_AUTO_CREATE_BUCKET`` is
+  ``False`` (the default) (`#412`_, `#718`_)
+- Set the ``predefined_acl`` when creating a ``GoogleCloudFile`` using ``.write``
+  (`#640`_, `#756`_)
+- Add ``GS_BLOB_CHUNK_SIZE`` setting to enable efficient uploading of large files (`#757`_)
+
+Dropbox
+-------
+
+- Complete migration to v2 api with file fetching and metadata fixes (`#724`_)
+- Add ``DROPBOX_TIMEOUT`` to configure client timeout defaulting to 100 seconds
+  to match the underlying sdk. (`#419`_, `#747`_)
+
+SFTP
+----
+
+- Fix reopening a file (`#746`_)
+
+.. _#591: https://github.com/jschneier/django-storages/pull/591
+.. _#680: https://github.com/jschneier/django-storages/issues/680
+.. _#684: https://github.com/jschneier/django-storages/pull/684
+.. _#698: https://github.com/jschneier/django-storages/pull/698
+.. _#705: https://github.com/jschneier/django-storages/issues/705
+.. _#723: https://github.com/jschneier/django-storages/pull/723
+.. _#727: https://github.com/jschneier/django-storages/pull/727
+.. _#746: https://github.com/jschneier/django-storages/pull/746
+.. _#724: https://github.com/jschneier/django-storages/pull/724
+.. _#412: https://github.com/jschneier/django-storages/pull/412
+.. _#718: https://github.com/jschneier/django-storages/pull/718
+.. _#743: https://github.com/jschneier/django-storages/issues/743
+.. _#749: https://github.com/jschneier/django-storages/pull/749
+.. _#750: https://github.com/jschneier/django-storages/pull/750
+.. _#609: https://github.com/jschneier/django-storages/issues/609
+.. _#752: https://github.com/jschneier/django-storages/pull/752
+.. _#382: https://github.com/jschneier/django-storages/issues/382
+.. _#754: https://github.com/jschneier/django-storages/pull/754
+.. _#419: https://github.com/jschneier/django-storages/issues/419
+.. _#747: https://github.com/jschneier/django-storages/pull/747
+.. _#640: https://github.com/jschneier/django-storages/issues/640
+.. _#756: https://github.com/jschneier/django-storages/pull/756
+.. _#757: https://github.com/jschneier/django-storages/pull/757
+
+1.7.1 (2018-09-06)
+******************
+
+- Fix off-by-1 error in ``get_available_name`` whenever ``file_overwrite`` or ``overwrite_files`` is ``True`` (`#588`_, `#589`_)
+- Change ``S3Boto3Storage.listdir()`` to use ``list_objects`` instead of ``list_objects_v2`` to restore
+  compatability with services implementing the S3 protocol that do not yet support the new method (`#586`_, `#590`_)
+
+.. _#588: https://github.com/jschneier/django-storages/issues/588
+.. _#589: https://github.com/jschneier/django-storages/pull/589
+.. _#586: https://github.com/jschneier/django-storages/issues/586
+.. _#590: https://github.com/jschneier/django-storages/pull/590
+
+1.7 (2018-09-03)
+****************
+
+**Security**
+
+- The ``S3BotoStorage`` and ``S3Boto3Storage`` backends have an insecure
+  default ACL of ``public-read``. It is recommended that all current users audit their bucket
+  permissions.  Support has been added for setting ``AWS_DEFAULT_ACL = None`` and ``AWS_BUCKET_ACL =
+  None`` which causes all created files to inherit the bucket's ACL (and created buckets to inherit the
+  Amazon account's default ACL). This will become the default in version 1.10 (for ``S3Boto3Storage`` only
+  since ``S3BotoStorage`` will be removed in version 1.9, see below). Additionally, a warning is now
+  raised if ``AWS_DEFAULT_ACL`` or ``AWS_BUCKET_ACL`` is not explicitly set. (`#381`_, `#535`_, `#579`_)
+
+**Breaking**
+
+- The ``AzureStorage`` backend and documentation has been completely rewritten. It now
+  depends on ``azure`` and ``azure-storage-blob`` and is *vastly* improved. Big thanks to @nitely and all
+  other contributors along the way (`#565`_)
+- The ``.url()`` method of ``GoogleCloudStorage`` has been completely reworked. Many use
+  cases should require no changes and will experience a massive speedup. The ``.url()`` method no longer hits
+  the network for public urls and generates signed urls (with a default of 1-day expiration, configurable
+  via ``GS_EXPIRATION``) for non-public buckets.  Check out the docs for more information. (`#570`_)
+- Various backends will now raise ``ImproperlyConfigured`` at runtime if their
+  location (``GS_LOCATION``, ``AWS_LOCATION``) begins with a leading ``/`` rather than silently
+  stripping it.  Verify yours does not. (`#520`_)
+- The long deprecated ``GSBotoStorage`` backend is removed. (`#518`_)
+
+**Deprecation**
+
+- The insecure default of ``public-read`` for ``AWS_DEFAULT_ACL`` and
+  ``AWS_BUCKET_ACL`` in ``S3Boto3Storage`` will change to inherit the bucket's setting in version 1.10 (`#579`_)
+- The legacy ``S3BotoBackend`` is deprecated and will be removed in version 1.9.
+  It is strongly recommended to move to the ``S3Boto3Storage`` backend for performance,
+  stability and bugfix reasons. See the `boto migration docs`_ for step-by-step guidelines. (`#578`_, `#584`_)
+- The long aliased arguments to ``S3Boto3Storage`` of ``acl`` and ``bucket`` are
+  deprecated in favor of ``bucket_name`` and ``default_acl`` (`#516`_)
+- The minimum required version of ``boto3`` will be increasing to ``1.4.4`` in
+  the next major version of ``django-storages``. (`#583`_)
+
+**Features**
+
+- Add support for a file to inherit its bucket's ACL by setting ``AWS_DEFAULT_ACL = None`` (`#535`_)
+- Add ``GS_CACHE_CONTROL`` setting for ``GoogleCloudStorage`` backend (`#411`_, `#505`_)
+- Add documentation around using django-storages with Digital Ocean Spaces (`#521`_)
+- Add support for Django 2.1 and Python 3.7 (`#530`_)
+- Make ``S3Boto3Storage`` pickleable (`#551`_)
+- Add automatic reconnection to ``SFTPStorage`` (`#563`_, `#564`_)
+- Unconditionally set the security token in the boto backends (`b13efd`_)
+- Improve efficiency of ``.listdir`` on ``S3Boto3Storage`` (`#352`_)
+- Add ``AWS_S3_VERIFY`` to support custom certificates and disabling certificate verification
+  to ``S3Boto3Storage`` (`#486`_, `#580`_)
+- Add ``AWS_S3_PROXIES`` setting to ``S3Boto3Storage`` (`#583`_)
+- Add a snazzy new logo. Big thanks to @reallinfo
+
+**Bugfixes**
+
+- Reset file read offset before passing to ``GoogleCloudStorage`` and ``AzureStorage`` (`#481`_, `#581`_, `#582`_)
+- Fix various issues with multipart uploads in the S3 backends
+  (`#169`_, `#160`_, `#364`_, `#449`_, `#504`_, `#506`_, `#546`_)
+- Fix ``S3Boto3Storage`` to stream down large files (also disallow `r+w` mode) (`#383`_, `#548`_)
+- Fix ``SFTPStorageFile`` to align with the core ``File`` abstraction (`#487`_, `#568`_)
+- Catch ``IOError`` in ``SFTPStorage.delete`` (`#568`_)
+- ``AzureStorage``, ``GoogleCloudStorage``, ``S3Boto3Storage`` and ``S3BotoStorage`` now
+  respect ``max_length`` when ``file_overwrite = True`` (`#513`_, `#554`_)
+- The S3 backends now consistently use ``compresslevel=9`` (the Python stdlib default)
+  for gzipped content (`#572`_, `#576`_)
+- Improve error message of ``S3Boto3Storage`` during an unexpected exception when automatically
+  creating a bucket (`#574`_, `#577`_)
+
+.. _#381: https://github.com/jschneier/django-storages/issues/381
+.. _#535: https://github.com/jschneier/django-storages/pull/535
+.. _#579: https://github.com/jschneier/django-storages/pull/579
+.. _#565: https://github.com/jschneier/django-storages/pull/565
+.. _#520: https://github.com/jschneier/django-storages/pull/520
+.. _#518: https://github.com/jschneier/django-storages/pull/518
+.. _#516: https://github.com/jschneier/django-storages/pull/516
+.. _#481: https://github.com/jschneier/django-storages/pull/481
+.. _#581: https://github.com/jschneier/django-storages/pull/581
+.. _#582: https://github.com/jschneier/django-storages/pull/582
+.. _#411: https://github.com/jschneier/django-storages/issues/411
+.. _#505: https://github.com/jschneier/django-storages/pull/505
+.. _#521: https://github.com/jschneier/django-storages/pull/521
+.. _#169: https://github.com/jschneier/django-storages/pull/169
+.. _#160: https://github.com/jschneier/django-storages/issues/160
+.. _#364: https://github.com/jschneier/django-storages/pull/364
+.. _#449: https://github.com/jschneier/django-storages/issues/449
+.. _#504: https://github.com/jschneier/django-storages/pull/504
+.. _#530: https://github.com/jschneier/django-storages/pull/530
+.. _#506: https://github.com/jschneier/django-storages/pull/506
+.. _#546: https://github.com/jschneier/django-storages/pull/546
+.. _#383: https://github.com/jschneier/django-storages/issues/383
+.. _#548: https://github.com/jschneier/django-storages/pull/548
+.. _b13efd: https://github.com/jschneier/django-storages/commit/b13efd92b3bf3e9967b8e7819224bfcf9abb977e
+.. _#551: https://github.com/jschneier/django-storages/pull/551
+.. _#563: https://github.com/jschneier/django-storages/issues/563
+.. _#564: https://github.com/jschneier/django-storages/pull/564
+.. _#487: https://github.com/jschneier/django-storages/issues/487
+.. _#568: https://github.com/jschneier/django-storages/pull/568
+.. _#513: https://github.com/jschneier/django-storages/issues/513
+.. _#554: https://github.com/jschneier/django-storages/pull/554
+.. _#570: https://github.com/jschneier/django-storages/pull/570
+.. _#572: https://github.com/jschneier/django-storages/issues/572
+.. _#576: https://github.com/jschneier/django-storages/pull/576
+.. _#352: https://github.com/jschneier/django-storages/pull/352
+.. _#574: https://github.com/jschneier/django-storages/issues/574
+.. _#577: https://github.com/jschneier/django-storages/pull/577
+.. _#486: https://github.com/jschneier/django-storages/pull/486
+.. _#580: https://github.com/jschneier/django-storages/pull/580
+.. _#583: https://github.com/jschneier/django-storages/pull/583
+.. _boto migration docs:  https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#migrating-boto-to-boto3
+.. _#578: https://github.com/jschneier/django-storages/pull/578
+.. _#584: https://github.com/jschneier/django-storages/pull/584
+
+1.6.6 (2018-03-26)
+******************
+
+* You can now specify the backend you are using to install the necessary dependencies using
+  ``extra_requires``. For example ``pip install django-storages[boto3]`` (`#417`_)
+* Add additional content-type detection fallbacks (`#406`_, `#407`_)
+* Add ``GS_LOCATION`` setting to specify subdirectory for ``GoogleCloudStorage`` (`#355`_)
+* Add support for uploading large files to ``DropBoxStorage``, fix saving files (`#379`_, `#378`_, `#301`_)
+* Drop support for Django 1.8 and Django 1.10 (and hence Python 3.3) (`#438`_)
+* Implement ``get_created_time`` for ``GoogleCloudStorage`` (`#464`_)
+
+.. _#417: https://github.com/jschneier/django-storages/pull/417
+.. _#407: https://github.com/jschneier/django-storages/pull/407
+.. _#406: https://github.com/jschneier/django-storages/issues/406
+.. _#355: https://github.com/jschneier/django-storages/pull/355
+.. _#379: https://github.com/jschneier/django-storages/pull/379
+.. _#378: https://github.com/jschneier/django-storages/issues/378
+.. _#301: https://github.com/jschneier/django-storages/issues/301
+.. _#438: https://github.com/jschneier/django-storages/issues/438
+.. _#464: https://github.com/jschneier/django-storages/pull/464
+
+1.6.5 (2017-08-01)
+******************
+
+* Fix Django 1.11 regression with gzipped content being saved twice
+  resulting in empty files (`#367`_, `#371`_, `#373`_)
+* Fix the ``mtime`` when gzipping content on ``S3Boto3Storage`` (`#374`_)
+
+.. _#367: https://github.com/jschneier/django-storages/issues/367
+.. _#371: https://github.com/jschneier/django-storages/pull/371
+.. _#373: https://github.com/jschneier/django-storages/pull/373
+.. _#374: https://github.com/jschneier/django-storages/pull/374
+
+1.6.4 (2017-07-27)
+******************
+
+* Files uploaded with ``GoogleCloudStorage`` will now set their appropriate mimetype (`#320`_)
+* Fix ``DropBoxStorage.url`` to work. (`#357`_)
+* Fix ``S3Boto3Storage`` when ``AWS_PRELOAD_METADATA = True`` (`#366`_)
+* Fix ``S3Boto3Storage`` uploading file-like objects without names (`#195`_, `#368`_)
+* ``S3Boto3Storage`` is now threadsafe - a separate session is created on a
+  per-thread basis (`#268`_, `#358`_)
+
+.. _#320: https://github.com/jschneier/django-storages/pull/320
+.. _#357: https://github.com/jschneier/django-storages/pull/357
+.. _#366: https://github.com/jschneier/django-storages/pull/366
+.. _#195: https://github.com/jschneier/django-storages/pull/195
+.. _#368: https://github.com/jschneier/django-storages/pull/368
+.. _#268: https://github.com/jschneier/django-storages/issues/268
+.. _#358: https://github.com/jschneier/django-storages/pull/358
+
+1.6.3 (2017-06-23)
+******************
+
+* Revert default ``AWS_S3_SIGNATURE_VERSION`` to V2 to restore backwards
+  compatability in ``S3Boto3``. It's recommended that all new projects set
+  this to be ``'s3v4'``. (`#344`_)
+
+.. _#344: https://github.com/jschneier/django-storages/pull/344
+
+1.6.2 (2017-06-22)
+******************
+
+* Fix regression in ``safe_join()`` to handle a trailing slash in an
+  intermediate path. (`#341`_)
+* Fix regression in ``gs.GSBotoStorage`` getting an unexpected kwarg.
+  (`#342`_)
+
+.. _#341: https://github.com/jschneier/django-storages/pull/341
+.. _#342: https://github.com/jschneier/django-storages/pull/342
+
+1.6.1 (2017-06-22)
+******************
+
+* Drop support for Django 1.9 (`e89db45`_)
+* Fix regression in ``safe_join()`` to allow joining a base path with an empty
+  string. (`#336`_)
+
+.. _e89db45: https://github.com/jschneier/django-storages/commit/e89db451d7e617638b5991e31df4c8de196546a6
+.. _#336: https://github.com/jschneier/django-storages/pull/336
+
+1.6 (2017-06-21)
+******************
+
+* **Breaking:** Remove backends deprecated in v1.5.1 (`#280`_)
+* **Breaking:** ``DropBoxStorage`` has been upgrade to support v2 of the API, v1 will be shut off at the
+  end of the month - upgrading is recommended (`#273`_)
+* **Breaking:** The ``SFTPStorage`` backend now checks for the existence of the fallback ``~/.ssh/known_hosts``
+  before attempting to load it.  If you had previously been passing in a path to a non-existent file it will no longer
+  attempt to load the fallback. (`#118`_, `#325`_)
+* **Breaking:** The default version value for ``AWS_S3_SIGNATURE_VERSION`` is now ``'s3v4'``. No changes should
+  be required (`#335`_)
+* **Deprecation:** The undocumented ``gs.GSBotoStorage`` backend. See the new ``gcloud.GoogleCloudStorage``
+  or ``apache_libcloud.LibCloudStorage`` backends instead. (`#236`_)
+* Add a new backend, ``gcloud.GoogleCloudStorage`` based on the ``google-cloud`` bindings. (`#236`_)
+* Pass in the location constraint when auto creating a bucket in ``S3Boto3Storage`` (`#257`_, `#258`_)
+* Add support for reading ``AWS_SESSION_TOKEN`` and ``AWS_SECURITY_TOKEN`` from the environment
+  to ``S3Boto3Storage`` and ``S3BotoStorage``. (`#283`_)
+* Fix Boto3 non-ascii filenames on Python 2.7 (`#216`_, `#217`_)
+* Fix ``collectstatic`` timezone handling in and add ``get_modified_time`` to ``S3BotoStorage`` (`#290`_)
+* Add support for Django 1.11 (`#295`_)
+* Add ``project`` keyword support to GCS in ``LibCloudStorage`` backend (`#269`_)
+* Files that have a guessable encoding (e.g. gzip or compress) will be uploaded with that Content-Encoding in
+  the ``s3boto3`` backend (`#263`_, `#264`_)
+* The Dropbox backend now properly translates backslashes in Windows paths into forward slashes (`e52a127`_)
+* The S3 backends now permit colons in the keys (`#248`_, `#322`_)
+
+.. _#217: https://github.com/jschneier/django-storages/pull/217
+.. _#273: https://github.com/jschneier/django-storages/pull/273
+.. _#216: https://github.com/jschneier/django-storages/issues/216
+.. _#283: https://github.com/jschneier/django-storages/pull/283
+.. _#280: https://github.com/jschneier/django-storages/pull/280
+.. _#257: https://github.com/jschneier/django-storages/issues/257
+.. _#258: https://github.com/jschneier/django-storages/pull/258
+.. _#290: https://github.com/jschneier/django-storages/pull/290
+.. _#295: https://github.com/jschneier/django-storages/pull/295
+.. _#269: https://github.com/jschneier/django-storages/pull/269
+.. _#263: https://github.com/jschneier/django-storages/issues/263
+.. _#264: https://github.com/jschneier/django-storages/pull/264
+.. _e52a127: https://github.com/jschneier/django-storages/commit/e52a127523fdd5be50bb670ccad566c5d527f3d1
+.. _#236: https://github.com/jschneier/django-storages/pull/236
+.. _#118: https://github.com/jschneier/django-storages/issues/118
+.. _#325: https://github.com/jschneier/django-storages/pull/325
+.. _#248: https://github.com/jschneier/django-storages/issues/248
+.. _#322: https://github.com/jschneier/django-storages/pull/322
+.. _#335: https://github.com/jschneier/django-storages/pull/335
+
+1.5.2 (2017-01-13)
+******************
+
+* Actually use ``SFTP_STORAGE_HOST`` in ``SFTPStorage`` backend (`#204`_)
+* Fix ``S3Boto3Storage`` to avoid race conditions in a multi-threaded WSGI environment (`#238`_)
+* Fix trying to localize a naive datetime when ``settings.USE_TZ`` is ``False`` in ``S3Boto3Storage.modified_time``.
+  (`#235`_, `#234`_)
+* Fix automatic bucket creation in ``S3Boto3Storage`` when ``AWS_AUTO_CREATE_BUCKET`` is ``True`` (`#196`_)
+* Improve the documentation for the S3 backends
+
+.. _#204: https://github.com/jschneier/django-storages/pull/204
+.. _#238: https://github.com/jschneier/django-storages/pull/238
+.. _#234: https://github.com/jschneier/django-storages/issues/234
+.. _#235: https://github.com/jschneier/django-storages/pull/235
+.. _#196: https://github.com/jschneier/django-storages/pull/196
+
+1.5.1 (2016-09-13)
+******************
+
+* **Breaking:** Drop support for Django 1.7 (`#185`_)
+* **Deprecation:** hashpath, image, overwrite, mogile, symlinkorcopy, database, mogile, couchdb.
+  See (`#202`_) to discuss maintenance going forward
+* Use a fixed ``mtime`` argument for ``GzipFile`` in ``S3BotoStorage`` and ``S3Boto3Storage`` to ensure
+  a stable output for gzipped files
+* Use ``.putfileobj`` instead of ``.put`` in ``S3Boto3Storage`` to use the transfer manager,
+  allowing files greater than 5GB to be put on S3 (`#194`_ , `#201`_)
+* Update ``S3Boto3Storage`` for Django 1.10 (`#181`_) (``get_modified_time`` and ``get_accessed_time``)
+* Fix bad kwarg name in ``S3Boto3Storage`` when `AWS_PRELOAD_METADATA` is `True` (`#189`_, `#190`_)
+
+.. _#202: https://github.com/jschneier/django-storages/issues/202
+.. _#201: https://github.com/jschneier/django-storages/pull/201
+.. _#194: https://github.com/jschneier/django-storages/issues/194
+.. _#190: https://github.com/jschneier/django-storages/pull/190
+.. _#189: https://github.com/jschneier/django-storages/issues/189
+.. _#185: https://github.com/jschneier/django-storages/pull/185
+.. _#181: https://github.com/jschneier/django-storages/pull/181
+
+1.5.0 (2016-08-02)
+******************
+
+* Add new backend ``S3Boto3Storage`` (`#179`_)
+* Add a `strict` option to `utils.setting` (`#176`_)
+* Tests, documentation, fixing ``.close`` for ``SFTPStorage`` (`#177`_)
+* Tests, documentation, add `.readlines` for ``FTPStorage`` (`#175`_)
+* Tests and documentation for ``DropBoxStorage`` (`#174`_)
+* Fix ``MANIFEST.in`` to not ship ``.pyc`` files. (`#145`_)
+* Enable CI testing of Python 3.5 and fix test failure from api change (`#171`_)
+
+.. _#145: https://github.com/jschneier/django-storages/pull/145
+.. _#171: https://github.com/jschneier/django-storages/pull/171
+.. _#174: https://github.com/jschneier/django-storages/pull/174
+.. _#175: https://github.com/jschneier/django-storages/pull/175
+.. _#177: https://github.com/jschneier/django-storages/pull/177
+.. _#176: https://github.com/jschneier/django-storages/pull/176
+.. _#179: https://github.com/jschneier/django-storages/pull/179
+
+1.4.1 (2016-04-07)
+******************
+
+* Files that have a guessable encoding (e.g. gzip or compress) will be uploaded with that Content-Encoding
+  in the ``s3boto`` backend. Compressable types such as ``application/javascript`` will still be gzipped.
+  PR `#122`_
+* Fix ``DropBoxStorage.exists`` check and add ``DropBoxStorage.url`` (`#127`_)
+* Add ``GS_HOST`` setting (with a default of ``GSConnection.DefaultHost``) to fix ``GSBotoStorage``.
+  (`#124`_, `#125`_)
+
+.. _#122: https://github.com/jschneier/django-storages/pull/122
+.. _#127: https://github.com/jschneier/django-storages/pull/127
+.. _#124: https://github.com/jschneier/django-storages/issues/124
+.. _#125: https://github.com/jschneier/django-storages/pull/125
+
+1.4 (2016-02-07)
+****************
+
+* This package is now released on PyPI as `django-storages`. Please update your requirements files to
+  `django-storages==1.4`.
+
+1.3.2 (2016-01-26)
+******************
+
+* Fix memory leak from not closing underlying temp file in ``s3boto`` backend (`#106`_)
+* Allow easily specifying a custom expiry time when generating a url for ``S3BotoStorage`` (`#96`_)
+* Check for bucket existence when the empty path ('') is passed to ``storage.exists`` in ``S3BotoStorage`` -
+  this prevents a crash when running ``collectstatic -c`` on Django 1.9.1 (`#112`_) fixed in `#116`_
+
+.. _#106: https://github.com/jschneier/django-storages/pull/106
+.. _#96: https://github.com/jschneier/django-storages/pull/96
+.. _#112: https://github.com/jschneier/django-storages/issues/112
+.. _#116: https://github.com/jschneier/django-storages/pull/116
+
+
+1.3.1 (2016-01-12)
+******************
+
+* A few Azure Storage fixes [pass the content-type to Azure, handle chunked content, fix ``url``] (`#45`__)
+* Add support for a Dropbox (``dropbox``) storage backend
+* Various fixes to the ``apache_libcloud`` backend [return the number of bytes asked for by ``.read``, make ``.name`` non-private, don't
+  initialize to an empty ``BytesIO`` object] (`#55`_)
+* Fix multi-part uploads in ``s3boto`` backend not respecting ``AWS_S3_ENCRYPTION`` (`#94`_)
+* Automatically gzip svg files (`#100`_)
+
+.. __: https://github.com/jschneier/django-storages/pull/45
+.. _#76: https://github.com/jschneier/django-storages/pull/76
+.. _#55: https://github.com/jschneier/django-storages/pull/55
+.. _#94: https://github.com/jschneier/django-storages/pull/94
+.. _#100: https://github.com/jschneier/django-storages/pull/100
+
+
+1.3 (2015-08-14)
+****************
+
+* **Breaking:** Drop Support for Django 1.5 and Python 2.6
+* **Breaking:** Remove previously deprecated mongodb backend
+* **Breaking:** Remove previously deprecated ``parse_ts_extended`` from s3boto storage
+* Add support for Django 1.8+ (`#36`__)
+* Add ``AWS_S3_PROXY_HOST`` and ``AWS_S3_PROXY_PORT`` settings for s3boto backend (`#41`_)
+* Fix Python3K compat issue in apache_libcloud (`#52`_)
+* Fix Google Storage backend not respecting ``GS_IS_GZIPPED`` setting (`#51`__, `#60`_)
+* Rename FTP ``_name`` attribute to ``name`` which is what the Django ``File`` api is expecting (`#70`_)
+* Put ``StorageMixin`` first in inheritance to maintain backwards compat with older versions of Django (`#63`_)
+
+.. __: https://github.com/jschneier/django-storages/pull/36
+.. _#41: https://github.com/jschneier/django-storages/pull/41
+.. _#52: https://github.com/jschneier/django-storages/issues/52
+.. __: https://github.com/jschneier/django-storages/pull/51
+.. _#60: https://github.com/jschneier/django-storages/pull/60
+.. _#70: https://github.com/jschneier/django-storages/pull/70
+.. _#63: https://github.com/jschneier/django-storages/pull/63
+
+
+1.2.3 (2015-03-14)
+******************
+
+* Variety of FTP backend fixes (fix ``exists``, add ``modified_time``, remove call to non-existent function) (`#26`_)
+* Apparently the year changed to 2015
+
+.. _#26: https://github.com/jschneier/django-storages/pull/26
+
+
+1.2.2 (2015-01-28)
+******************
+
+* Remove always show all warnings filter (`#21`_)
+* Release package as a wheel
+* Avoid resource warning during install (`#20`__)
+* Made ``S3BotoStorage`` deconstructible (previously only ``S3BotoStorageFile`` was deconstructible) (`#19`_)
+
+.. _#21: https://github.com/jschneier/django-storages/pull/21
+.. __: https://github.com/jschneier/django-storages/issues/20
+.. _#19: https://github.com/jschneier/django-storages/pull/19
+
+
+1.2.1 (2014-12-31)
+******************
+
+* **Deprecation:** Issue warning about ``parse_ts_extended``
+* **Deprecation:** mongodb backend - django-mongodb-engine now ships its own storage backend
+* Fix ``storage.modified_time`` crashing on new files when ``AWS_PRELOAD_METADATA=True`` (`#11`_, `#12`__, `#14`_)
+
+.. _#11: https://github.com/jschneier/django-storages/pull/11
+__ https://github.com/jschneier/django-storages/issues/12
+.. _#14: https://github.com/jschneier/django-storages/pull/14
+
+
+1.2 (2014-12-14)
+****************
+
+* **Breaking:** Remove legacy S3 storage (`#1`_)
+* **Breaking:** Remove mosso files backend (`#2`_)
+* Add text/javascript mimetype to S3BotoStorage gzip allowed defaults
+* Add support for Django 1.7 migrations in S3BotoStorage and ApacheLibCloudStorage (`#5`_, `#8`_)
+* Python3K (3.3+) now available for S3Boto backend (`#4`_)
+
+.. _#8: https://github.com/jschneier/django-storages/pull/8
+.. _#5: https://github.com/jschneier/django-storages/pull/5
+.. _#4: https://github.com/jschneier/django-storages/pull/4
+.. _#1: https://github.com/jschneier/django-storages/issues/1
+.. _#2: https://github.com/jschneier/django-storages/issues/2
+
+
+**NOTE**: Version 1.1.9 is the first release of django-storages after the fork.
+It represents the current (2014-12-08) state of the original django-storages in
+master with no additional changes. This is the first release of the code base
+since March 2013.
+
+1.1.9 (2014-12-08)
+******************
+
+* Fix syntax for Python3 with pull-request `#91`_
+* Support pushing content type from File object to GridFS with pull-request `#90`_
+* Support passing a region to the libcloud driver with pull-request `#86`_
+* Handle trailing slash paths fixes `#188`_ fixed by pull-request `#85`_
+* Use a SpooledTemporaryFile to conserve memory in S3BotoFile pull-request `#69`_
+* Guess content-type for S3BotoStorageFile the same way that _save() in S3BotoStorage does
+* Pass headers and response_headers through from url to generate_url in S3BotoStorage pull-request `#65`_
+* Added AWS_S3_HOST, AWS_S3_PORT and AWS_S3_USE_SSL settings to specify host, port and is_secure in pull-request `#66`_
+
+.. _#91: https://bitbucket.org/david/django-storages/pull-request/91/
+.. _#90: https://bitbucket.org/david/django-storages/pull-request/90/
+.. _#86: https://bitbucket.org/david/django-storages/pull-request/86/
+.. _#188: https://bitbucket.org/david/django-storages/issue/188/s3boto-_clean_name-is-broken-and-leads-to
+.. _#85: https://bitbucket.org/david/django-storages/pull-request/85/
+.. _#69: https://bitbucket.org/david/django-storages/pull-request/69/
+.. _#66: https://bitbucket.org/david/django-storages/pull-request/66/
+.. _#65: https://bitbucket.org/david/django-storages/pull-request/65/
+
+
+**Everything Below Here Was Previously Released on PyPI under django-storages**
+
+
+1.1.8 (2013-03-31)
+******************
+
+* Fixes `#156`_ regarding date parsing, ValueError when running collectstatic
+* Proper handling of boto dev version parsing
+* Made SFTP URLs accessible, now uses settings.MEDIA_URL instead of sftp://
+
+.. _#156: https://bitbucket.org/david/django-storages/issue/156/s3boto-backend-valueerror-time-data-thu-07
+
+1.1.7 (2013-03-20)
+******************
+
+* Listing of huge buckets on S3 is now prevented by using the prefix argument to boto's list() method
+* Initial support for Windows Azure Storage
+* Switched to useing boto's parse_ts date parser getting last modified info when using S3boto backend
+* Fixed key handling in S3boto and Google Storage backends
+* Account for lack of multipart upload in Google Storage backend
+* Fixed seek() issue when using AWS_IS_GZIPPED by darkness51 with pull-request `#50`_
+* Improvements to S3BotoStorage and GSBotoStorage
+
+.. _#50: https://bitbucket.org/david/django-storages/pull-request/50/
+
+1.1.6 (2013-01-06)
+******************
+
+* Merged many changes from Jannis Leidel (mostly regarding gzipping)
+* Fixed tests by Ian Lewis
+* Added support for Google Cloud Storage backend by Jannis Leidel
+* Updated license file by Dan Loewenherz, fixes `#133`_ with pull-request `#44`_
+* Set Content-Type header for use in upload_part_from_file by Gerardo Curiel
+* Pass the rewind parameter to Boto's set_contents_from_file method by Jannis Leidel with pull-request `#45`_
+* Fix for FTPStorageFile close() method by Mathieu Comandon with pull-request `#43`_
+* Minor refactoring by Oktay Sancak with pull-request `#48`_
+* Ungzip on download based on Content-Encoding by Gavin Wahl with pull-request `#46`_
+* Add support for S3 server-side encryption by Tobias McNulty with pull-request `#17`_
+* Add an optional setting to the boto storage to produce protocol-relative URLs, fixes `#105`_
+
+.. _#133: https://bitbucket.org/david/django-storages/issue/133/license-file-refers-to-incorrect-project
+.. _#44: https://bitbucket.org/david/django-storages/pull-request/44/
+.. _#45: https://bitbucket.org/david/django-storages/pull-request/45/
+.. _#43: https://bitbucket.org/david/django-storages/pull-request/43/
+.. _#48: https://bitbucket.org/david/django-storages/pull-request/48/
+.. _#46: https://bitbucket.org/david/django-storages/pull-request/46/
+.. _#17: https://bitbucket.org/david/django-storages/pull-request/17/
+.. _#105: https://bitbucket.org/david/django-storages/issue/105/add-option-to-produce-protocol-relative
+
+
+1.1.5 (2012-07-18)
+******************
+
+* Merged pull request `#36`_ from freakboy3742 Keith-Magee, improvements to Apache Libcloud backend and docs
+* Merged pull request `#35`_ from atodorov, allows more granular S3 access settings
+* Add support for SSL in Rackspace Cloudfiles backend
+* Fixed the listdir() method in s3boto backend, fixes `#57`_
+* Added base url tests for safe_join in s3boto backend
+* Merged pull request `#20`_ from alanjds, fixed SuspiciousOperation warning if AWS_LOCATION ends with '/'
+* Added FILE_BUFFER_SIZE setting to s3boto backend
+* Merged pull request `#30`_ from pendletongp, resolves `#108`_, `#109`_ and `#110`_
+* Updated the modified_time() method so that it doesn't require dateutil. fixes `#111`_
+* Merged pull request `#16`_ from chamal, adds Apache Libcloud backend
+* When preloading the S3 metadata make sure we reset the files key during saving to prevent stale metadata
+* Merged pull request `#24`_ from tobias.mcnulty, fixes bug where s3boto backend returns modified_time in wrong time zone
+* Fixed HashPathStorage.location to no longer use settings.MEDIA_ROOT
+* Remove download_url from setup file so PyPI dist is used
+
+.. _#36: https://bitbucket.org/david/django-storages/pull-request/36/
+.. _#35: https://bitbucket.org/david/django-storages/pull-request/35/
+.. _#57: https://bitbucket.org/david/django-storages/issue/57
+.. _#20: https://bitbucket.org/david/django-storages/pull-request/20/
+.. _#30: https://bitbucket.org/david/django-storages/pull-request/30/
+.. _#108: https://bitbucket.org/david/django-storages/issue/108
+.. _#109: https://bitbucket.org/david/django-storages/issue/109
+.. _#110: https://bitbucket.org/david/django-storages/issue/110
+.. _#111: https://bitbucket.org/david/django-storages/issue/111
+.. _#16: https://bitbucket.org/david/django-storages/pull-request/16/
+.. _#24: https://bitbucket.org/david/django-storages/pull-request/24/
+
+1.1.4 (2012-01-06)
+******************
+
+* Added PendingDeprecationWarning for mosso backend
+* Merged pull request `#13`_ from marcoala, adds ``SFTP_KNOWN_HOST_FILE`` setting to SFTP storage backend
+* Merged pull request `#12`_ from ryankask, fixes HashPathStorage tests that delete remote media
+* Merged pull request `#10`_ from key, adds support for django-mongodb-engine 0.4.0 or later, fixes GridFS file deletion bug
+* Fixed S3BotoStorage performance problem calling modified_time()
+* Added deprecation warning for s3 backend, refs `#40`_
+* Fixed CLOUDFILES_CONNECTION_KWARGS import error, fixes `#78`_
+* Switched to sphinx documentation, set official docs up on https://django-storages.readthedocs.io/
+* HashPathStorage uses self.exists now, fixes `#83`_
+
+.. _#13: https://bitbucket.org/david/django-storages/pull-request/13/a-version-of-sftp-storage-that-allows-you
+.. _#12: https://bitbucket.org/david/django-storages/pull-request/12/hashpathstorage-tests-deleted-my-projects
+.. _#10: https://bitbucket.org/david/django-storages/pull-request/10/support-django-mongodb-engine-040
+.. _#40: https://bitbucket.org/david/django-storages/issue/40/deprecate-s3py-backend
+.. _#78: https://bitbucket.org/david/django-storages/issue/78/import-error
+.. _#83: https://bitbucket.org/david/django-storages/issue/6/symlinkorcopystorage-new-custom-storage
+
+1.1.3 (2011-08-15)
+******************
+
+* Created this lovely change log
+* Fixed `#89`_: broken StringIO import in CloudFiles backend
+* Merged `pull request #5`_: HashPathStorage path bug
+
+.. _#89: https://bitbucket.org/david/django-storages/issue/89/112-broke-the-mosso-backend
+.. _pull request #5: https://bitbucket.org/david/django-storages/pull-request/5/fixed-path-bug-and-added-testcase-for
diff --git a/debian/changelog b/debian/changelog
index 697f91a..4d795f5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+python-django-storages (1.13.2+git20230101.1.94c3092-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Wed, 25 Jan 2023 01:34:23 -0000
+
 python-django-storages (1.13.2-1) unstable; urgency=low
 
   * New upstream release.
diff --git a/debian/patches/0001-Skip-tests-if-required-modules-are-not-installed.patch b/debian/patches/0001-Skip-tests-if-required-modules-are-not-installed.patch
index f13c13a..57f4678 100644
--- a/debian/patches/0001-Skip-tests-if-required-modules-are-not-installed.patch
+++ b/debian/patches/0001-Skip-tests-if-required-modules-are-not-installed.patch
@@ -10,10 +10,10 @@ Subject: Skip tests if required modules are not installed.
  tests/test_sftp.py    | 7 ++++++-
  5 files changed, 30 insertions(+), 1 deletion(-)
 
-diff --git a/tests/test_azure.py b/tests/test_azure.py
-index 941635f..2100ef8 100644
---- a/tests/test_azure.py
-+++ b/tests/test_azure.py
+Index: python-django-storages.git/tests/test_azure.py
+===================================================================
+--- python-django-storages.git.orig/tests/test_azure.py
++++ python-django-storages.git/tests/test_azure.py
 @@ -1,3 +1,9 @@
 +import unittest
 +try:
@@ -24,10 +24,10 @@ index 941635f..2100ef8 100644
  import datetime
  from datetime import timedelta
  from unittest import mock
-diff --git a/tests/test_dropbox.py b/tests/test_dropbox.py
-index e0de9c0..b23b7b8 100644
---- a/tests/test_dropbox.py
-+++ b/tests/test_dropbox.py
+Index: python-django-storages.git/tests/test_dropbox.py
+===================================================================
+--- python-django-storages.git.orig/tests/test_dropbox.py
++++ python-django-storages.git/tests/test_dropbox.py
 @@ -1,3 +1,9 @@
 +import unittest
 +try:
@@ -38,10 +38,10 @@ index e0de9c0..b23b7b8 100644
  import io
  from datetime import datetime
  from unittest import mock
-diff --git a/tests/test_gcloud.py b/tests/test_gcloud.py
-index 5896340..9871aeb 100644
---- a/tests/test_gcloud.py
-+++ b/tests/test_gcloud.py
+Index: python-django-storages.git/tests/test_gcloud.py
+===================================================================
+--- python-django-storages.git.orig/tests/test_gcloud.py
++++ python-django-storages.git/tests/test_gcloud.py
 @@ -1,3 +1,9 @@
 +import unittest
 +try:
@@ -52,10 +52,10 @@ index 5896340..9871aeb 100644
  import gzip
  import mimetypes
  from datetime import datetime
-diff --git a/tests/test_s3boto3.py b/tests/test_s3boto3.py
-index df236af..083769d 100644
---- a/tests/test_s3boto3.py
-+++ b/tests/test_s3boto3.py
+Index: python-django-storages.git/tests/test_s3boto3.py
+===================================================================
+--- python-django-storages.git.orig/tests/test_s3boto3.py
++++ python-django-storages.git/tests/test_s3boto3.py
 @@ -1,3 +1,9 @@
 +import unittest
 +try:
@@ -66,10 +66,10 @@ index df236af..083769d 100644
  import gzip
  import pickle
  import threading
-diff --git a/tests/test_sftp.py b/tests/test_sftp.py
-index 703a6b2..415732a 100644
---- a/tests/test_sftp.py
-+++ b/tests/test_sftp.py
+Index: python-django-storages.git/tests/test_sftp.py
+===================================================================
+--- python-django-storages.git.orig/tests/test_sftp.py
++++ python-django-storages.git/tests/test_sftp.py
 @@ -1,3 +1,9 @@
 +import unittest
 +try:
diff --git a/debian/patches/0002-Allow-one-to-disable-network-tests.patch b/debian/patches/0002-Allow-one-to-disable-network-tests.patch
index 9971600..731afc9 100644
--- a/debian/patches/0002-Allow-one-to-disable-network-tests.patch
+++ b/debian/patches/0002-Allow-one-to-disable-network-tests.patch
@@ -6,10 +6,10 @@ Subject: Allow one to disable network tests.
  tests/test_s3boto3.py | 2 ++
  1 file changed, 2 insertions(+)
 
-diff --git a/tests/test_s3boto3.py b/tests/test_s3boto3.py
-index 083769d..5fc40c1 100644
---- a/tests/test_s3boto3.py
-+++ b/tests/test_s3boto3.py
+Index: python-django-storages.git/tests/test_s3boto3.py
+===================================================================
+--- python-django-storages.git.orig/tests/test_s3boto3.py
++++ python-django-storages.git/tests/test_s3boto3.py
 @@ -5,6 +5,7 @@ except ImportError:
      raise unittest.SkipTest("boto3 package not installed, skipping tests")
  
diff --git a/django_storages.egg-info/PKG-INFO b/django_storages.egg-info/PKG-INFO
new file mode 100644
index 0000000..d29401b
--- /dev/null
+++ b/django_storages.egg-info/PKG-INFO
@@ -0,0 +1,1264 @@
+Metadata-Version: 2.1
+Name: django-storages
+Version: 1.13.2
+Summary: Support for many storage backends in Django
+Home-page: https://github.com/jschneier/django-storages
+Author: Josh Schneier
+Author-email: josh.schneier@gmail.com
+License: BSD-3-Clause
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: Environment :: Web Environment
+Classifier: Framework :: Django
+Classifier: Framework :: Django :: 3.2
+Classifier: Framework :: Django :: 4.0
+Classifier: Framework :: Django :: 4.1
+Classifier: Intended Audience :: Developers
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python
+Classifier: Programming Language :: Python :: 3
+Classifier: Programming Language :: Python :: 3 :: Only
+Classifier: Programming Language :: Python :: 3.7
+Classifier: Programming Language :: Python :: 3.8
+Classifier: Programming Language :: Python :: 3.9
+Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
+Requires-Python: >=3.7
+Provides-Extra: azure
+Provides-Extra: boto3
+Provides-Extra: dropbox
+Provides-Extra: google
+Provides-Extra: libcloud
+Provides-Extra: sftp
+License-File: LICENSE
+License-File: AUTHORS
+
+.. image:: https://raw.githubusercontent.com/jschneier/django-storages/master/docs/logos/horizontal.png
+    :alt: Django-Storages
+    :width: 100%
+
+.. image:: https://img.shields.io/pypi/v/django-storages.svg
+    :target: https://pypi.org/project/django-storages/
+    :alt: PyPI Version
+
+.. image:: https://github.com/jschneier/django-storages/actions/workflows/ci.yml/badge.svg
+    :target: https://github.com/jschneier/django-storages/actions/workflows/ci.yml
+    :alt: Build Status
+
+Installation
+============
+Installing from PyPI is as easy as doing:
+
+.. code-block:: bash
+
+  pip install django-storages
+
+If you'd prefer to install from source (maybe there is a bugfix in master that
+hasn't been released yet) then the magic incantation you are looking for is:
+
+.. code-block:: bash
+
+  pip install -e 'git+https://github.com/jschneier/django-storages.git#egg=django-storages'
+
+Once that is done set ``DEFAULT_FILE_STORAGE`` to the backend of your choice.
+If, for example, you want to use the boto3 backend you would set:
+
+.. code-block:: python
+
+  DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
+
+
+If you are using the ``FileSystemStorage`` as your storage management class in your models ``FileField`` fields, remove them
+and don't specify any storage parameter. That way, the ``DEFAULT_FILE_STORAGE`` class will be used by default in your field.
+For example, if you have a `photo` field defined as:
+
+.. code-block:: python
+
+    photo = models.FileField(
+        storage=FileSystemStorage(location=settings.MEDIA_ROOT),
+        upload_to='photos',
+    )
+
+Set it to just:
+
+.. code-block:: python
+
+    photo = models.FileField(
+        upload_to='photos',
+    )
+
+There are also a number of settings available to control how each storage backend functions,
+please consult the documentation for a comprehensive list.
+
+About
+=====
+django-storages is a project to provide a variety of storage backends in a single library.
+
+This library is usually compatible with the currently supported versions of
+Django. Check the Trove classifiers in setup.py to be sure.
+
+django-storages is backed in part by `Tidelift`_. Check them out for all of your enterprise open source
+software commercial support needs.
+
+.. _Tidelift: https://tidelift.com/subscription/pkg/pypi-django-storages?utm_source=pypi-django-storages&utm_medium=referral&utm_campaign=enterprise&utm_term=repo
+
+Security
+========
+
+To report a security vulnerability, please use the `Tidelift security contact`_. Tidelift will coordinate the
+fix and disclosure. Please **do not** post a public issue on the tracker.
+
+.. _Tidelift security contact: https://tidelift.com/security
+
+
+Found a Bug?
+============
+
+Issues are tracked via GitHub issues at the `project issue page
+<https://github.com/jschneier/django-storages/issues>`_.
+
+Documentation
+=============
+Documentation for django-storages is located at https://django-storages.readthedocs.io/.
+
+Contributing
+============
+
+#. `Check for open issues
+   <https://github.com/jschneier/django-storages/issues>`_ at the project
+   issue page or open a new issue to start a discussion about a feature or bug.
+#. Fork the `django-storages repository on GitHub
+   <https://github.com/jschneier/django-storages>`_ to start making changes.
+#. Add a test case to show that the bug is fixed or the feature is implemented
+   correctly.
+#. Bug me until I can merge your pull request.
+
+Please don't update the library version in CHANGELOG.rst or ``storages/__init__.py``, the maintainer will do that on release.
+If you're the first to update the CHANGELOG in this release cycle, just put the version as ``XXXX-XX-XX``.
+
+History
+=======
+This repo began as a fork of the original library under the package name of django-storages-redux and
+became the official successor (releasing under django-storages on PyPI) in February of 2016.
+
+django-storages CHANGELOG
+=========================
+
+1.13.2 (2022-12-23)
+*******************
+
+General
+-------
+
+- Add support for Python 3.11 (`#1196`_)
+- Add support for saving ``pathlib.Path`` names (`#1200`_)
+
+S3
+--
+
+- Catch 404 errors when calling ``delete()`` (`#1201`_)
+
+Azure
+-----
+
+- Use ``AZURE_CUSTOM_DOMAIN`` for retrieving blob URLs and storage URL for other operations (`#1176`_)
+
+Google Cloud
+------------
+
+- Use ``DEFAULT_RETRY`` for all upload & delete operations (`#1156`_)
+- Fix gzipping of content (`#1203`_)
+- Pass through kwargs to signed URL generator (`#1193`_)
+
+SFTP
+----
+
+- Improve write & memory performance when saving files (`#1194`_)
+
+.. _#1196: https://github.com/jschneier/django-storages/pull/1196
+.. _#1200: https://github.com/jschneier/django-storages/pull/1200
+.. _#1201: https://github.com/jschneier/django-storages/pull/1201
+.. _#1176: https://github.com/jschneier/django-storages/pull/1176
+.. _#1156: https://github.com/jschneier/django-storages/pull/1156
+.. _#1203: https://github.com/jschneier/django-storages/pull/1203
+.. _#1193: https://github.com/jschneier/django-storages/pull/1193
+.. _#1194: https://github.com/jschneier/django-storages/pull/1194
+
+1.13.1 (2022-08-06)
+*******************
+
+Dropbox
+-------
+
+- Strip off the root path when saving files to fix saving with upgraded versions of Django (`#1168`_)
+- Update ``DropBoxStorage`` constructor parameter order to be backwards compatible (`#1167`_)
+
+.. _#1167: https://github.com/jschneier/django-storages/pull/1167
+.. _#1168: https://github.com/jschneier/django-storages/pull/1168
+
+1.13 (2022-08-05)
+*****************
+
+General
+-------
+
+- Add support for Django 4.0 and 4.1 (`#1093`_)
+- Drop support for Django 2.2, 3.0 and 3.1 (`#1093`_)
+- Drop support for Python 3.5 and 3.6 (`#1093`_)
+
+S3
+--
+
+- **Breaking**: Update and document the undocumented ``AWS_S3_URL_PROTOCOL`` from ``http:`` to ``https:`` and remove the
+  undocumented ``AWS_S3_SECURE_URLS`` setting. You should only need to update your settings if you had updated either of
+  these previously undocumented settings.  The default behavior of constructing an ``https:`` URL with a custom domain
+  is unchanged (`#1164`_)
+- Add ``AWS_S3_USE_THREADS`` to disable ``threading`` for compatibility with ``gevent`` (`#1112`_)
+
+Dropbox
+-------
+
+- Add support for refresh tokens (`#1159`_)
+- Ignore ``ApiError`` exception in ``url()`` (`#1158`_)
+
+Azure
+-----
+
+- Restore support for ``AZURE_ENDPOINT_SUFFIX`` (`#1118`_)
+- Replace deprecated ``download_to_stream`` with ``readinto`` (`#1113`_)
+- Add ``AZURE_API_VERSION`` setting (`#1132`_)
+- Fix ``get_modified_time()`` (`#1134`_)
+
+Google Cloud
+------------
+
+- Add support for gzipping files via ``GS_IS_GZIPPED`` and ``GZIP_CONTENT_TYPES`` (`#980`_)
+- Use ``GS_BLOB_CHUNK_SIZE`` with files that already exist (`#1154`_)
+
+.. _#980: https://github.com/jschneier/django-storages/pull/980
+.. _#1118: https://github.com/jschneier/django-storages/pull/1118
+.. _#1113: https://github.com/jschneier/django-storages/pull/1113
+.. _#1112: https://github.com/jschneier/django-storages/pull/1112
+.. _#1132: https://github.com/jschneier/django-storages/pull/1132
+.. _#1134: https://github.com/jschneier/django-storages/pull/1134
+.. _#1159: https://github.com/jschneier/django-storages/pull/1159
+.. _#1158: https://github.com/jschneier/django-storages/pull/1158
+.. _#1164: https://github.com/jschneier/django-storages/pull/1164
+.. _#1093: https://github.com/jschneier/django-storages/pull/1093
+.. _#1154: https://github.com/jschneier/django-storages/pull/1154
+
+
+1.12.3 (2021-10-29)
+*******************
+
+General
+-------
+
+- Add support for Python 3.10 (`#1078`_)
+
+S3
+--
+
+- Re-raise non-404 errors in ``.exists()`` (`#1084`_, `#1085`_)
+
+Azure
+-----
+
+- Fix using ``AZURE_CUSTOM_DOMAIN`` with an account key credential (`#1082`_, `#1083`_)
+
+SFTP
+----
+
+- Catch ``FileNotFoundError`` instead of ``OSerror`` in ``.exists()`` to prevent swallowing ``socket.timeout`` exceptions (`#1064`_, `#1087`_)
+
+
+.. _#1078: https://github.com/jschneier/django-storages/pull/1078
+.. _#1084: https://github.com/jschneier/django-storages/issues/1084
+.. _#1085: https://github.com/jschneier/django-storages/pull/1085
+.. _#1082: https://github.com/jschneier/django-storages/issues/1082
+.. _#1083: https://github.com/jschneier/django-storages/pull/1083
+.. _#1064: https://github.com/jschneier/django-storages/issues/1064
+.. _#1087: https://github.com/jschneier/django-storages/pull/1087
+
+1.12.2 (2021-10-16)
+*******************
+
+Azure
+-----
+
+- Add ``parameters`` kwarg to ``AzureStorage.url`` to configure blob properties in the SAS token (`#1071`_)
+- Fix regression where ``AZURE_CUSTOM_DOMAIN`` was interpreted as a replacement of ``blob.core.windows.net`` rather than as a full domain
+  (`#1073`_, `#1076`_)
+
+.. _#1071: https://github.com/jschneier/django-storages/pull/1071
+.. _#1073: https://github.com/jschneier/django-storages/issues/1073
+.. _#1076: https://github.com/jschneier/django-storages/pull/1076
+
+1.12.1 (2021-10-11)
+*******************
+
+S3
+--
+
+- Change gzip compression to use a streaming implementation (`#1061`_)
+- Fix saving files with ``S3ManifestStaticStorage`` (`#1068`_, `#1069`_)
+
+.. _#1061: https://github.com/jschneier/django-storages/pull/1061
+.. _#1068: https://github.com/jschneier/django-storages/issues/1068
+.. _#1069: https://github.com/jschneier/django-storages/pull/1069
+
+1.12 (2021-10-06)
+*****************
+
+General
+-------
+- Add support for Django 3.2 (`#1046`_, `#1042`_, `#1005`_)
+- Replace Travis CI with GitHub actions (`#1051`_)
+
+S3
+--
+
+- Convert signing keys to bytes if necessary (`#1003`_)
+- Avoid a ListParts API call during multipart upload (`#1041`_)
+- Custom domains now use passed URL params (`#1054`_)
+- Allow the use of AWS profiles and clarify the options for passing credentials (`fbe9538`_)
+- Re-allow override of various access key names (`#1026`_)
+- Properly exclude empty folders during ``listdir`` (`66f4f8e`_)
+- Support saving file objects that are not ``seekable`` (`#860`_, `#1057`_)
+- Return ``True`` for ``.exists()`` if a non-404 error is encountered (`#938`_)
+
+Azure
+-----
+
+- **Breaking**: This backend has been rewritten to use the newer versions of ``azure-storage-blob``, which now has a minimum required version of 12.0. The settings ``AZURE_EMULATED_MODE``, ``AZURE_ENDPOINT_SUFFIX``, and ``AZURE_CUSTOM_CONNECTION_STRING`` are now ignored. (`#784`_, `#805`_)
+- Add support for user delegation keys (`#1063`_)
+
+Google Cloud
+------------
+
+- **Breaking**: The minimum required version of ``google-cloud-storage`` is now 1.27.0 (`#994`_)
+- **Breaking**: Switch URL signing version from v2 to v4 (`#994`_)
+- **Deprecated**: Support for ``GS_CACHE_CONTROL`` will be removed in 1.13. Please set the ``cache_control`` parameter of ``GS_OBJECT_PARAMETERS`` instead. (`#970`_)
+- Add ``GS_OBJECT_PARAMETERS`` and overridable ``GoogleCloudStorage.get_object_parameters`` to customize blob parameters for all blobs and per-blob respectively. (`#970`_)
+- Catch the ``NotFound`` exception raised when deleting a non-existent blob, this matches Django and other backends (`#998`_, `#999`_)
+- Fix signing URLs with custom endpoints (`#994`_)
+
+Dropbox
+-------
+
+- Validate ``write_mode`` param (`#1020`_)
+
+.. _fbe9538: https://github.com/jschneier/django-storages/commit/fbe9538b8574cfb0d95b04c9c477650dbfe8547b
+.. _66f4f8e: https://github.com/jschneier/django-storages/commit/66f4f8ec68daaac767c013d6b1a30cf26a7ac1ca
+.. _#1003: https://github.com/jschneier/django-storages/pull/1003
+.. _#1054: https://github.com/jschneier/django-storages/pull/1054
+.. _#1026: https://github.com/jschneier/django-storages/pull/1026
+.. _#1041: https://github.com/jschneier/django-storages/pull/1041
+.. _#970: https://github.com/jschneier/django-storages/pull/970
+.. _#998: https://github.com/jschneier/django-storages/issues/998
+.. _#784: https://github.com/jschneier/django-storages/issues/784
+.. _#805: https://github.com/jschneier/django-storages/pull/805
+.. _#999: https://github.com/jschneier/django-storages/pull/999
+.. _#1051: https://github.com/jschneier/django-storages/pull/1051
+.. _#1042: https://github.com/jschneier/django-storages/pull/1042
+.. _#1046: https://github.com/jschneier/django-storages/issues/1046
+.. _#1005: https://github.com/jschneier/django-storages/pull/1005
+.. _#1020: https://github.com/jschneier/django-storages/pull/1020
+.. _#860: https://github.com/jschneier/django-storages/issues/860
+.. _#1057: https://github.com/jschneier/django-storages/pull/1057
+.. _#938: https://github.com/jschneier/django-storages/pull/938
+.. _#994: https://github.com/jschneier/django-storages/pull/994
+.. _#1063: https://github.com/jschneier/django-storages/pull/1063
+
+1.11.1 (2020-12-23)
+*******************
+
+S3
+--
+
+- Revert fix for ``ValueError: I/O operation on closed file`` when calling ``collectstatic`` and
+  introduce ``S3StaticStorage`` and ``S3ManifestStaticStorage`` for use as ``STATICFILES_STORAGE`` targets (`#968`_)
+
+.. _#968: https://github.com/jschneier/django-storages/pull/968
+
+1.11 (2020-12-16)
+*****************
+
+General
+-------
+
+- Test against Python 3.9 (`#964`_)
+
+S3
+--
+
+- Fix ``ValueError: I/O operation on closed file`` when calling ``collectstatic`` (`#382`_, `#955`_)
+- Calculate ``S3Boto3StorageFile.buffer_size`` (via setting ``AWS_S3_FILE_BUFFER_SIZE``)
+  at run-time rather than import-time. (`#930`_)
+- Fix writing ``bytearray`` content (`#958`_, `#965`_)
+
+Google Cloud
+------------
+
+- Add setting ``GS_QUERYSTRING_AUTH`` to avoid signing URLs. This is useful for buckets with a
+  policy of Uniform public read (`#952`_)
+
+Azure
+-----
+
+- Add ``AZURE_OBJECT_PARAMETERS`` and overridable ``AzureStorage.get_object_parameters`` to customize
+  ``ContentSettings`` parameters for all keys and per-key respectively. (`#898`_)
+
+.. _#382: https://github.com/jschneier/django-storages/issues/382
+.. _#955: https://github.com/jschneier/django-storages/pull/955
+.. _#930: https://github.com/jschneier/django-storages/pull/930
+.. _#952: https://github.com/jschneier/django-storages/pull/952
+.. _#898: https://github.com/jschneier/django-storages/pull/898
+.. _#964: https://github.com/jschneier/django-storages/pull/964
+.. _#958: https://github.com/jschneier/django-storages/issues/958
+.. _#965: https://github.com/jschneier/django-storages/pull/965
+
+1.10.1 (2020-09-13)
+*******************
+
+S3
+--
+
+- Restore ``AWS_DEFAULT_ACL`` handling. This setting is ignored if ``ACL`` is set in
+  ``AWS_S3_OBJECT_PARAMETERS`` (`#934`_)
+
+SFTP
+----
+
+- Fix using ``SFTP_STORAGE_HOST`` (`#926`_)
+
+.. _#926: https://github.com/jschneier/django-storages/pull/926
+.. _#934: https://github.com/jschneier/django-storages/pull/934
+
+1.10 (2020-08-30)
+*****************
+
+General
+-------
+
+- **Breaking**: Removed support for end-of-life Python 2.7 and 3.4 (`#709`_)
+- **Breaking**: Removed support for end-of-life Django 1.11 (`#891`_)
+- Add support for Django 3.1 (`#916`_)
+- Introduce a new ``BaseStorage`` class with a ``get_default_settings`` method and use
+  it in ``S3Boto3Storage``, ``AzureStorage``, ``GoogleCloudStorage``, and ``SFTPStorage``. These backends
+  now calculate their settings when instantiated, not imported. (`#524`_, `#852`_)
+
+S3
+--
+
+- **Breaking**: Automatic bucket creation has been removed. Doing so encourages using overly broad credentials.
+  As a result, support for the corresponding ``AWS_BUCKET_ACL`` and ``AWS_AUTO_CREATE_BUCKET`` settings have been removed. (`#636`_)
+- **Breaking**: Support for the undocumented setting ``AWS_PRELOAD_METADATA`` has been removed (`#636`_)
+- **Breaking**: The constructor kwarg ``acl`` is no longer accepted. Instead, use the ``ACL`` key in setting ``AWS_S3_OBJECT_PARAMETERS``
+  (`#636`_)
+- **Breaking**: The constructor kwarg ``bucket`` is no longer accepted. Instead, use ``bucket_name`` or the ``AWS_STORAGE_BUCKET_NAME``
+  setting (`#636`_)
+- **Breaking**: Support for setting ``AWS_REDUCED_REDUNDANCY`` has been removed. Replace with ``StorageClass=REDUCED_REDUNDANCY``
+  in ``AWS_S3_OBJECT_PARAMETERS`` (`#636`_)
+- **Breaking**: Support for setting ``AWS_S3_ENCRYPTION`` has been removed. Replace with ``ServerSideEncryption=AES256`` in ``AWS_S3_OBJECT_PARAMETERS`` (`#636`_)
+- **Breaking**: Support for setting ``AWS_DEFAULT_ACL`` has been removed. Replace with ``ACL`` in ``AWS_S3_OBJECT_PARAMETERS`` (`#636`_)
+- Add ``http_method`` parameter to ``.url`` method (`#854`_)
+- Add support for signing Cloudfront URLs to the ``.url`` method. You must set ``AWS_CLOUDFRONT_KEY``,
+  ``AWS_CLOUDFRONT_KEY_ID`` and install either `cryptography`_ or `rsa`_ (`#456`_, `#587`_). See the docs for more info.
+  URLs will only be signed if ``AWS_QUERYSTRING_AUTH`` is set to ``True`` (`#885`_)
+
+Google Cloud
+------------
+
+- **Breaking**: Automatic bucket creation has been removed. Doing so encourages using overly broad credentials.
+  As a result, support for the corresponding ``GS_AUTO_CREATE_BUCKET`` and ``GS_AUTO_CREATE_ACL`` settings have been removed. (`#894`_)
+
+Dropbox
+-------
+
+- Add ``DROPBOX_WRITE_MODE`` setting to control e.g. overwriting behavior. Check the docs
+  for more info (`#873`_, `#138`_)
+
+SFTP
+----
+
+- Remove exception swallowing during ssh connection (`#835`_, `#838`_)
+
+FTP
+---
+
+- Add ``FTP_STORAGE_ENCODING`` setting to set the filesystem encoding  (`#803`_)
+- Support multiple nested paths for files (`#886`_)
+
+.. _cryptography: https://cryptography.io
+.. _rsa: https://stuvel.eu/rsa
+.. _#885: https://github.com/jschneier/django-storages/pull/885
+.. _#894: https://github.com/jschneier/django-storages/pull/894
+.. _#636: https://github.com/jschneier/django-storages/pull/636
+.. _#709: https://github.com/jschneier/django-storages/pull/709
+.. _#891: https://github.com/jschneier/django-storages/pull/891
+.. _#916: https://github.com/jschneier/django-storages/pull/916
+.. _#852: https://github.com/jschneier/django-storages/pull/852
+.. _#873: https://github.com/jschneier/django-storages/pull/873
+.. _#854: https://github.com/jschneier/django-storages/pull/854
+.. _#138: https://github.com/jschneier/django-storages/issues/138
+.. _#524: https://github.com/jschneier/django-storages/pull/524
+.. _#835: https://github.com/jschneier/django-storages/issues/835
+.. _#838: https://github.com/jschneier/django-storages/pull/838
+.. _#803: https://github.com/jschneier/django-storages/pull/803
+.. _#456: https://github.com/jschneier/django-storages/issues/456
+.. _#587: https://github.com/jschneier/django-storages/pull/587
+.. _#886: https://github.com/jschneier/django-storages/pull/886
+
+1.9.1 (2020-02-03)
+******************
+
+S3
+--
+
+- Fix reading files with ``S3Boto3StorageFile`` (`#831`_, `#833`_)
+
+.. _#831: https://github.com/jschneier/django-storages/issues/831
+.. _#833: https://github.com/jschneier/django-storages/pull/833
+
+1.9 (2020-02-02)
+****************
+
+General
+-------
+
+- **Breaking**: The long deprecated S3 backend based on ``boto`` has been removed. (`#825`_)
+- Test against and support Python 3.8 (`#810`_)
+
+S3
+--
+
+- **Deprecated**: Automatic bucket creation will be removed in version 1.10 (`#826`_)
+- **Deprecated**: The undocumented ``AWS_PRELOAD_METADATA`` and associated functionality will
+  be removed in version 1.10 (`#829`_)
+- **Deprecated**: Support for ``AWS_REDUCED_REDUNDANCY`` will be removed in version 1.10
+  Replace with ``StorageClass=REDUCED_REDUNDANCY`` in ``AWS_S3_OBJECT_PARAMETERS`` (`#829`_)
+- **Deprecated**: Support for ``AWS_S3_ENCRYPTION`` will be removed in version 1.10 (`#829`_)
+  Replace with ``ServerSideEncryption=AES256`` in ``AWS_S3_OBJECT_PARAMETERS``
+- A custom ``ContentEncoding`` is no longer overwritten automatically (note that specifying
+  one will disable automatic ``gzip``) (`#391`_, `#828`_).
+- Add ``S3Boto3Storage.get_object_parameters``, an overridable method for customizing
+  upload parameters on a per-object basis (`#819`_, `#828`_)
+- Opening and closing a file in `w` mode without writing anything will now create an empty file
+  in S3, this mimics the builtin ``open`` and Django's own ``FileSystemStorage`` (`#435`_, `#816`_)
+- Fix reading a file in text mode (`#404`_, `#827`_)
+
+Google Cloud
+------------
+
+- **Deprecated**: Automatic bucket creation will be removed in version 1.10 (`#826`_)
+
+Dropbox
+-------
+
+- Fix crash on ``DropBoxStorage.listdir`` (`#762`_)
+- Settings can now additionally be specified at the class level to ease subclassing (`#745`_)
+
+Libcloud
+--------
+
+- Add support for Backblaze B2 to ``LibCloudStorage.url`` (`#807`_)
+
+FTP
+---
+
+- Fix creating multiple intermediary directories on Windows (`#823`_, `#824`_)
+
+.. _#825: https://github.com/jschneier/django-storages/pull/825
+.. _#826: https://github.com/jschneier/django-storages/pull/826
+.. _#829: https://github.com/jschneier/django-storages/pull/829
+.. _#391: https://github.com/jschneier/django-storages/issues/391
+.. _#828: https://github.com/jschneier/django-storages/pull/828
+.. _#819: https://github.com/jschneier/django-storages/issues/819
+.. _#810: https://github.com/jschneier/django-storages/pull/810
+.. _#435: https://github.com/jschneier/django-storages/issues/435
+.. _#816: https://github.com/jschneier/django-storages/pull/816
+.. _#404: https://github.com/jschneier/django-storages/issues/404
+.. _#827: https://github.com/jschneier/django-storages/pull/827
+.. _#762: https://github.com/jschneier/django-storages/pull/762
+.. _#745: https://github.com/jschneier/django-storages/pull/745
+.. _#807: https://github.com/jschneier/django-storages/pull/807
+.. _#823: https://github.com/jschneier/django-storages/issues/823
+.. _#824: https://github.com/jschneier/django-storages/pull/824
+
+
+1.8 (2019-11-20)
+****************
+
+General
+-------
+- Add support for Django 3.0 (`#759`_)
+- Update license identifier to unambiguous ``BSD-3-Clause``
+
+S3
+--
+
+- Include error message raised when missing library is imported (`#776`_, `#793`_)
+
+Google
+------
+
+- **Breaking** The minimum supported version of ``google-cloud-storage`` is now ``1.15.0`` which enables...
+- Add setting ``GS_CUSTOM_ENDPOINT`` to allow usage of custom domains (`#775`_, `#648`_)
+
+Azure
+-----
+
+- Fix extra installation by pinning version to < 12 (`#785`_)
+- Add support for setting ``AZURE_CACHE_CONTROL`` header (`#780`_, `#674`_)
+
+.. _#759: https://github.com/jschneier/django-storages/pull/759
+.. _#776: https://github.com/jschneier/django-storages/issues/776
+.. _#793: https://github.com/jschneier/django-storages/pull/793
+.. _#775: https://github.com/jschneier/django-storages/issues/775
+.. _#648: https://github.com/jschneier/django-storages/pull/648
+.. _#785: https://github.com/jschneier/django-storages/pull/785
+.. _#780: https://github.com/jschneier/django-storages/pull/780
+.. _#674: https://github.com/jschneier/django-storages/issues/674
+
+
+1.7.2 (2019-09-10)
+******************
+
+S3
+--
+
+- Avoid misleading ``AWS_DEFAULT_ACL`` warning for insecure ``default_acl`` when
+  overridden as a class variable (`#591`_)
+- Propagate file deletion to cache when ``preload_metadata`` is ``True``,
+  (not the default) (`#743`_, `#749`_)
+- Fix exception raised on closed file (common if using ``ManifestFilesMixin`` or
+  ``collectstatic``. (`#382`_, `#754`_)
+
+Azure
+-----
+
+- Pare down the required packages in ``extra_requires`` when installing the ``azure`` extra to only
+  ``azure-storage-blob`` (`#680`_, `#684`_)
+- Fix compatability with ``generate_blob_shared_access_signature`` updated signature (`#705`_, `#723`_)
+- Fetching a file now uses the configured timeout rather than hardcoding one (`#727`_)
+- Add support for configuring all blobservice options: ``AZURE_ENDPOINT_SUFFIX``,
+  ``AZURE_CUSTOM_DOMAIN``, ``AZURE_CONNECTION_STRING``, ``AZURE_TOKEN_CREDENTIAL``.
+  See the docs for more info. Huge thanks once again to @nitely. (`#750`_)
+- Fix filename handling to not strip special characters (`#609`_, `#752`_)
+
+
+Google Cloud
+------------
+
+- Set the file acl in the same call that uploads it (`#698`_)
+- Reduce the number of queries and required permissions when ``GS_AUTO_CREATE_BUCKET`` is
+  ``False`` (the default) (`#412`_, `#718`_)
+- Set the ``predefined_acl`` when creating a ``GoogleCloudFile`` using ``.write``
+  (`#640`_, `#756`_)
+- Add ``GS_BLOB_CHUNK_SIZE`` setting to enable efficient uploading of large files (`#757`_)
+
+Dropbox
+-------
+
+- Complete migration to v2 api with file fetching and metadata fixes (`#724`_)
+- Add ``DROPBOX_TIMEOUT`` to configure client timeout defaulting to 100 seconds
+  to match the underlying sdk. (`#419`_, `#747`_)
+
+SFTP
+----
+
+- Fix reopening a file (`#746`_)
+
+.. _#591: https://github.com/jschneier/django-storages/pull/591
+.. _#680: https://github.com/jschneier/django-storages/issues/680
+.. _#684: https://github.com/jschneier/django-storages/pull/684
+.. _#698: https://github.com/jschneier/django-storages/pull/698
+.. _#705: https://github.com/jschneier/django-storages/issues/705
+.. _#723: https://github.com/jschneier/django-storages/pull/723
+.. _#727: https://github.com/jschneier/django-storages/pull/727
+.. _#746: https://github.com/jschneier/django-storages/pull/746
+.. _#724: https://github.com/jschneier/django-storages/pull/724
+.. _#412: https://github.com/jschneier/django-storages/pull/412
+.. _#718: https://github.com/jschneier/django-storages/pull/718
+.. _#743: https://github.com/jschneier/django-storages/issues/743
+.. _#749: https://github.com/jschneier/django-storages/pull/749
+.. _#750: https://github.com/jschneier/django-storages/pull/750
+.. _#609: https://github.com/jschneier/django-storages/issues/609
+.. _#752: https://github.com/jschneier/django-storages/pull/752
+.. _#382: https://github.com/jschneier/django-storages/issues/382
+.. _#754: https://github.com/jschneier/django-storages/pull/754
+.. _#419: https://github.com/jschneier/django-storages/issues/419
+.. _#747: https://github.com/jschneier/django-storages/pull/747
+.. _#640: https://github.com/jschneier/django-storages/issues/640
+.. _#756: https://github.com/jschneier/django-storages/pull/756
+.. _#757: https://github.com/jschneier/django-storages/pull/757
+
+1.7.1 (2018-09-06)
+******************
+
+- Fix off-by-1 error in ``get_available_name`` whenever ``file_overwrite`` or ``overwrite_files`` is ``True`` (`#588`_, `#589`_)
+- Change ``S3Boto3Storage.listdir()`` to use ``list_objects`` instead of ``list_objects_v2`` to restore
+  compatability with services implementing the S3 protocol that do not yet support the new method (`#586`_, `#590`_)
+
+.. _#588: https://github.com/jschneier/django-storages/issues/588
+.. _#589: https://github.com/jschneier/django-storages/pull/589
+.. _#586: https://github.com/jschneier/django-storages/issues/586
+.. _#590: https://github.com/jschneier/django-storages/pull/590
+
+1.7 (2018-09-03)
+****************
+
+**Security**
+
+- The ``S3BotoStorage`` and ``S3Boto3Storage`` backends have an insecure
+  default ACL of ``public-read``. It is recommended that all current users audit their bucket
+  permissions.  Support has been added for setting ``AWS_DEFAULT_ACL = None`` and ``AWS_BUCKET_ACL =
+  None`` which causes all created files to inherit the bucket's ACL (and created buckets to inherit the
+  Amazon account's default ACL). This will become the default in version 1.10 (for ``S3Boto3Storage`` only
+  since ``S3BotoStorage`` will be removed in version 1.9, see below). Additionally, a warning is now
+  raised if ``AWS_DEFAULT_ACL`` or ``AWS_BUCKET_ACL`` is not explicitly set. (`#381`_, `#535`_, `#579`_)
+
+**Breaking**
+
+- The ``AzureStorage`` backend and documentation has been completely rewritten. It now
+  depends on ``azure`` and ``azure-storage-blob`` and is *vastly* improved. Big thanks to @nitely and all
+  other contributors along the way (`#565`_)
+- The ``.url()`` method of ``GoogleCloudStorage`` has been completely reworked. Many use
+  cases should require no changes and will experience a massive speedup. The ``.url()`` method no longer hits
+  the network for public urls and generates signed urls (with a default of 1-day expiration, configurable
+  via ``GS_EXPIRATION``) for non-public buckets.  Check out the docs for more information. (`#570`_)
+- Various backends will now raise ``ImproperlyConfigured`` at runtime if their
+  location (``GS_LOCATION``, ``AWS_LOCATION``) begins with a leading ``/`` rather than silently
+  stripping it.  Verify yours does not. (`#520`_)
+- The long deprecated ``GSBotoStorage`` backend is removed. (`#518`_)
+
+**Deprecation**
+
+- The insecure default of ``public-read`` for ``AWS_DEFAULT_ACL`` and
+  ``AWS_BUCKET_ACL`` in ``S3Boto3Storage`` will change to inherit the bucket's setting in version 1.10 (`#579`_)
+- The legacy ``S3BotoBackend`` is deprecated and will be removed in version 1.9.
+  It is strongly recommended to move to the ``S3Boto3Storage`` backend for performance,
+  stability and bugfix reasons. See the `boto migration docs`_ for step-by-step guidelines. (`#578`_, `#584`_)
+- The long aliased arguments to ``S3Boto3Storage`` of ``acl`` and ``bucket`` are
+  deprecated in favor of ``bucket_name`` and ``default_acl`` (`#516`_)
+- The minimum required version of ``boto3`` will be increasing to ``1.4.4`` in
+  the next major version of ``django-storages``. (`#583`_)
+
+**Features**
+
+- Add support for a file to inherit its bucket's ACL by setting ``AWS_DEFAULT_ACL = None`` (`#535`_)
+- Add ``GS_CACHE_CONTROL`` setting for ``GoogleCloudStorage`` backend (`#411`_, `#505`_)
+- Add documentation around using django-storages with Digital Ocean Spaces (`#521`_)
+- Add support for Django 2.1 and Python 3.7 (`#530`_)
+- Make ``S3Boto3Storage`` pickleable (`#551`_)
+- Add automatic reconnection to ``SFTPStorage`` (`#563`_, `#564`_)
+- Unconditionally set the security token in the boto backends (`b13efd`_)
+- Improve efficiency of ``.listdir`` on ``S3Boto3Storage`` (`#352`_)
+- Add ``AWS_S3_VERIFY`` to support custom certificates and disabling certificate verification
+  to ``S3Boto3Storage`` (`#486`_, `#580`_)
+- Add ``AWS_S3_PROXIES`` setting to ``S3Boto3Storage`` (`#583`_)
+- Add a snazzy new logo. Big thanks to @reallinfo
+
+**Bugfixes**
+
+- Reset file read offset before passing to ``GoogleCloudStorage`` and ``AzureStorage`` (`#481`_, `#581`_, `#582`_)
+- Fix various issues with multipart uploads in the S3 backends
+  (`#169`_, `#160`_, `#364`_, `#449`_, `#504`_, `#506`_, `#546`_)
+- Fix ``S3Boto3Storage`` to stream down large files (also disallow `r+w` mode) (`#383`_, `#548`_)
+- Fix ``SFTPStorageFile`` to align with the core ``File`` abstraction (`#487`_, `#568`_)
+- Catch ``IOError`` in ``SFTPStorage.delete`` (`#568`_)
+- ``AzureStorage``, ``GoogleCloudStorage``, ``S3Boto3Storage`` and ``S3BotoStorage`` now
+  respect ``max_length`` when ``file_overwrite = True`` (`#513`_, `#554`_)
+- The S3 backends now consistently use ``compresslevel=9`` (the Python stdlib default)
+  for gzipped content (`#572`_, `#576`_)
+- Improve error message of ``S3Boto3Storage`` during an unexpected exception when automatically
+  creating a bucket (`#574`_, `#577`_)
+
+.. _#381: https://github.com/jschneier/django-storages/issues/381
+.. _#535: https://github.com/jschneier/django-storages/pull/535
+.. _#579: https://github.com/jschneier/django-storages/pull/579
+.. _#565: https://github.com/jschneier/django-storages/pull/565
+.. _#520: https://github.com/jschneier/django-storages/pull/520
+.. _#518: https://github.com/jschneier/django-storages/pull/518
+.. _#516: https://github.com/jschneier/django-storages/pull/516
+.. _#481: https://github.com/jschneier/django-storages/pull/481
+.. _#581: https://github.com/jschneier/django-storages/pull/581
+.. _#582: https://github.com/jschneier/django-storages/pull/582
+.. _#411: https://github.com/jschneier/django-storages/issues/411
+.. _#505: https://github.com/jschneier/django-storages/pull/505
+.. _#521: https://github.com/jschneier/django-storages/pull/521
+.. _#169: https://github.com/jschneier/django-storages/pull/169
+.. _#160: https://github.com/jschneier/django-storages/issues/160
+.. _#364: https://github.com/jschneier/django-storages/pull/364
+.. _#449: https://github.com/jschneier/django-storages/issues/449
+.. _#504: https://github.com/jschneier/django-storages/pull/504
+.. _#530: https://github.com/jschneier/django-storages/pull/530
+.. _#506: https://github.com/jschneier/django-storages/pull/506
+.. _#546: https://github.com/jschneier/django-storages/pull/546
+.. _#383: https://github.com/jschneier/django-storages/issues/383
+.. _#548: https://github.com/jschneier/django-storages/pull/548
+.. _b13efd: https://github.com/jschneier/django-storages/commit/b13efd92b3bf3e9967b8e7819224bfcf9abb977e
+.. _#551: https://github.com/jschneier/django-storages/pull/551
+.. _#563: https://github.com/jschneier/django-storages/issues/563
+.. _#564: https://github.com/jschneier/django-storages/pull/564
+.. _#487: https://github.com/jschneier/django-storages/issues/487
+.. _#568: https://github.com/jschneier/django-storages/pull/568
+.. _#513: https://github.com/jschneier/django-storages/issues/513
+.. _#554: https://github.com/jschneier/django-storages/pull/554
+.. _#570: https://github.com/jschneier/django-storages/pull/570
+.. _#572: https://github.com/jschneier/django-storages/issues/572
+.. _#576: https://github.com/jschneier/django-storages/pull/576
+.. _#352: https://github.com/jschneier/django-storages/pull/352
+.. _#574: https://github.com/jschneier/django-storages/issues/574
+.. _#577: https://github.com/jschneier/django-storages/pull/577
+.. _#486: https://github.com/jschneier/django-storages/pull/486
+.. _#580: https://github.com/jschneier/django-storages/pull/580
+.. _#583: https://github.com/jschneier/django-storages/pull/583
+.. _boto migration docs:  https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#migrating-boto-to-boto3
+.. _#578: https://github.com/jschneier/django-storages/pull/578
+.. _#584: https://github.com/jschneier/django-storages/pull/584
+
+1.6.6 (2018-03-26)
+******************
+
+* You can now specify the backend you are using to install the necessary dependencies using
+  ``extra_requires``. For example ``pip install django-storages[boto3]`` (`#417`_)
+* Add additional content-type detection fallbacks (`#406`_, `#407`_)
+* Add ``GS_LOCATION`` setting to specify subdirectory for ``GoogleCloudStorage`` (`#355`_)
+* Add support for uploading large files to ``DropBoxStorage``, fix saving files (`#379`_, `#378`_, `#301`_)
+* Drop support for Django 1.8 and Django 1.10 (and hence Python 3.3) (`#438`_)
+* Implement ``get_created_time`` for ``GoogleCloudStorage`` (`#464`_)
+
+.. _#417: https://github.com/jschneier/django-storages/pull/417
+.. _#407: https://github.com/jschneier/django-storages/pull/407
+.. _#406: https://github.com/jschneier/django-storages/issues/406
+.. _#355: https://github.com/jschneier/django-storages/pull/355
+.. _#379: https://github.com/jschneier/django-storages/pull/379
+.. _#378: https://github.com/jschneier/django-storages/issues/378
+.. _#301: https://github.com/jschneier/django-storages/issues/301
+.. _#438: https://github.com/jschneier/django-storages/issues/438
+.. _#464: https://github.com/jschneier/django-storages/pull/464
+
+1.6.5 (2017-08-01)
+******************
+
+* Fix Django 1.11 regression with gzipped content being saved twice
+  resulting in empty files (`#367`_, `#371`_, `#373`_)
+* Fix the ``mtime`` when gzipping content on ``S3Boto3Storage`` (`#374`_)
+
+.. _#367: https://github.com/jschneier/django-storages/issues/367
+.. _#371: https://github.com/jschneier/django-storages/pull/371
+.. _#373: https://github.com/jschneier/django-storages/pull/373
+.. _#374: https://github.com/jschneier/django-storages/pull/374
+
+1.6.4 (2017-07-27)
+******************
+
+* Files uploaded with ``GoogleCloudStorage`` will now set their appropriate mimetype (`#320`_)
+* Fix ``DropBoxStorage.url`` to work. (`#357`_)
+* Fix ``S3Boto3Storage`` when ``AWS_PRELOAD_METADATA = True`` (`#366`_)
+* Fix ``S3Boto3Storage`` uploading file-like objects without names (`#195`_, `#368`_)
+* ``S3Boto3Storage`` is now threadsafe - a separate session is created on a
+  per-thread basis (`#268`_, `#358`_)
+
+.. _#320: https://github.com/jschneier/django-storages/pull/320
+.. _#357: https://github.com/jschneier/django-storages/pull/357
+.. _#366: https://github.com/jschneier/django-storages/pull/366
+.. _#195: https://github.com/jschneier/django-storages/pull/195
+.. _#368: https://github.com/jschneier/django-storages/pull/368
+.. _#268: https://github.com/jschneier/django-storages/issues/268
+.. _#358: https://github.com/jschneier/django-storages/pull/358
+
+1.6.3 (2017-06-23)
+******************
+
+* Revert default ``AWS_S3_SIGNATURE_VERSION`` to V2 to restore backwards
+  compatability in ``S3Boto3``. It's recommended that all new projects set
+  this to be ``'s3v4'``. (`#344`_)
+
+.. _#344: https://github.com/jschneier/django-storages/pull/344
+
+1.6.2 (2017-06-22)
+******************
+
+* Fix regression in ``safe_join()`` to handle a trailing slash in an
+  intermediate path. (`#341`_)
+* Fix regression in ``gs.GSBotoStorage`` getting an unexpected kwarg.
+  (`#342`_)
+
+.. _#341: https://github.com/jschneier/django-storages/pull/341
+.. _#342: https://github.com/jschneier/django-storages/pull/342
+
+1.6.1 (2017-06-22)
+******************
+
+* Drop support for Django 1.9 (`e89db45`_)
+* Fix regression in ``safe_join()`` to allow joining a base path with an empty
+  string. (`#336`_)
+
+.. _e89db45: https://github.com/jschneier/django-storages/commit/e89db451d7e617638b5991e31df4c8de196546a6
+.. _#336: https://github.com/jschneier/django-storages/pull/336
+
+1.6 (2017-06-21)
+******************
+
+* **Breaking:** Remove backends deprecated in v1.5.1 (`#280`_)
+* **Breaking:** ``DropBoxStorage`` has been upgrade to support v2 of the API, v1 will be shut off at the
+  end of the month - upgrading is recommended (`#273`_)
+* **Breaking:** The ``SFTPStorage`` backend now checks for the existence of the fallback ``~/.ssh/known_hosts``
+  before attempting to load it.  If you had previously been passing in a path to a non-existent file it will no longer
+  attempt to load the fallback. (`#118`_, `#325`_)
+* **Breaking:** The default version value for ``AWS_S3_SIGNATURE_VERSION`` is now ``'s3v4'``. No changes should
+  be required (`#335`_)
+* **Deprecation:** The undocumented ``gs.GSBotoStorage`` backend. See the new ``gcloud.GoogleCloudStorage``
+  or ``apache_libcloud.LibCloudStorage`` backends instead. (`#236`_)
+* Add a new backend, ``gcloud.GoogleCloudStorage`` based on the ``google-cloud`` bindings. (`#236`_)
+* Pass in the location constraint when auto creating a bucket in ``S3Boto3Storage`` (`#257`_, `#258`_)
+* Add support for reading ``AWS_SESSION_TOKEN`` and ``AWS_SECURITY_TOKEN`` from the environment
+  to ``S3Boto3Storage`` and ``S3BotoStorage``. (`#283`_)
+* Fix Boto3 non-ascii filenames on Python 2.7 (`#216`_, `#217`_)
+* Fix ``collectstatic`` timezone handling in and add ``get_modified_time`` to ``S3BotoStorage`` (`#290`_)
+* Add support for Django 1.11 (`#295`_)
+* Add ``project`` keyword support to GCS in ``LibCloudStorage`` backend (`#269`_)
+* Files that have a guessable encoding (e.g. gzip or compress) will be uploaded with that Content-Encoding in
+  the ``s3boto3`` backend (`#263`_, `#264`_)
+* The Dropbox backend now properly translates backslashes in Windows paths into forward slashes (`e52a127`_)
+* The S3 backends now permit colons in the keys (`#248`_, `#322`_)
+
+.. _#217: https://github.com/jschneier/django-storages/pull/217
+.. _#273: https://github.com/jschneier/django-storages/pull/273
+.. _#216: https://github.com/jschneier/django-storages/issues/216
+.. _#283: https://github.com/jschneier/django-storages/pull/283
+.. _#280: https://github.com/jschneier/django-storages/pull/280
+.. _#257: https://github.com/jschneier/django-storages/issues/257
+.. _#258: https://github.com/jschneier/django-storages/pull/258
+.. _#290: https://github.com/jschneier/django-storages/pull/290
+.. _#295: https://github.com/jschneier/django-storages/pull/295
+.. _#269: https://github.com/jschneier/django-storages/pull/269
+.. _#263: https://github.com/jschneier/django-storages/issues/263
+.. _#264: https://github.com/jschneier/django-storages/pull/264
+.. _e52a127: https://github.com/jschneier/django-storages/commit/e52a127523fdd5be50bb670ccad566c5d527f3d1
+.. _#236: https://github.com/jschneier/django-storages/pull/236
+.. _#118: https://github.com/jschneier/django-storages/issues/118
+.. _#325: https://github.com/jschneier/django-storages/pull/325
+.. _#248: https://github.com/jschneier/django-storages/issues/248
+.. _#322: https://github.com/jschneier/django-storages/pull/322
+.. _#335: https://github.com/jschneier/django-storages/pull/335
+
+1.5.2 (2017-01-13)
+******************
+
+* Actually use ``SFTP_STORAGE_HOST`` in ``SFTPStorage`` backend (`#204`_)
+* Fix ``S3Boto3Storage`` to avoid race conditions in a multi-threaded WSGI environment (`#238`_)
+* Fix trying to localize a naive datetime when ``settings.USE_TZ`` is ``False`` in ``S3Boto3Storage.modified_time``.
+  (`#235`_, `#234`_)
+* Fix automatic bucket creation in ``S3Boto3Storage`` when ``AWS_AUTO_CREATE_BUCKET`` is ``True`` (`#196`_)
+* Improve the documentation for the S3 backends
+
+.. _#204: https://github.com/jschneier/django-storages/pull/204
+.. _#238: https://github.com/jschneier/django-storages/pull/238
+.. _#234: https://github.com/jschneier/django-storages/issues/234
+.. _#235: https://github.com/jschneier/django-storages/pull/235
+.. _#196: https://github.com/jschneier/django-storages/pull/196
+
+1.5.1 (2016-09-13)
+******************
+
+* **Breaking:** Drop support for Django 1.7 (`#185`_)
+* **Deprecation:** hashpath, image, overwrite, mogile, symlinkorcopy, database, mogile, couchdb.
+  See (`#202`_) to discuss maintenance going forward
+* Use a fixed ``mtime`` argument for ``GzipFile`` in ``S3BotoStorage`` and ``S3Boto3Storage`` to ensure
+  a stable output for gzipped files
+* Use ``.putfileobj`` instead of ``.put`` in ``S3Boto3Storage`` to use the transfer manager,
+  allowing files greater than 5GB to be put on S3 (`#194`_ , `#201`_)
+* Update ``S3Boto3Storage`` for Django 1.10 (`#181`_) (``get_modified_time`` and ``get_accessed_time``)
+* Fix bad kwarg name in ``S3Boto3Storage`` when `AWS_PRELOAD_METADATA` is `True` (`#189`_, `#190`_)
+
+.. _#202: https://github.com/jschneier/django-storages/issues/202
+.. _#201: https://github.com/jschneier/django-storages/pull/201
+.. _#194: https://github.com/jschneier/django-storages/issues/194
+.. _#190: https://github.com/jschneier/django-storages/pull/190
+.. _#189: https://github.com/jschneier/django-storages/issues/189
+.. _#185: https://github.com/jschneier/django-storages/pull/185
+.. _#181: https://github.com/jschneier/django-storages/pull/181
+
+1.5.0 (2016-08-02)
+******************
+
+* Add new backend ``S3Boto3Storage`` (`#179`_)
+* Add a `strict` option to `utils.setting` (`#176`_)
+* Tests, documentation, fixing ``.close`` for ``SFTPStorage`` (`#177`_)
+* Tests, documentation, add `.readlines` for ``FTPStorage`` (`#175`_)
+* Tests and documentation for ``DropBoxStorage`` (`#174`_)
+* Fix ``MANIFEST.in`` to not ship ``.pyc`` files. (`#145`_)
+* Enable CI testing of Python 3.5 and fix test failure from api change (`#171`_)
+
+.. _#145: https://github.com/jschneier/django-storages/pull/145
+.. _#171: https://github.com/jschneier/django-storages/pull/171
+.. _#174: https://github.com/jschneier/django-storages/pull/174
+.. _#175: https://github.com/jschneier/django-storages/pull/175
+.. _#177: https://github.com/jschneier/django-storages/pull/177
+.. _#176: https://github.com/jschneier/django-storages/pull/176
+.. _#179: https://github.com/jschneier/django-storages/pull/179
+
+1.4.1 (2016-04-07)
+******************
+
+* Files that have a guessable encoding (e.g. gzip or compress) will be uploaded with that Content-Encoding
+  in the ``s3boto`` backend. Compressable types such as ``application/javascript`` will still be gzipped.
+  PR `#122`_
+* Fix ``DropBoxStorage.exists`` check and add ``DropBoxStorage.url`` (`#127`_)
+* Add ``GS_HOST`` setting (with a default of ``GSConnection.DefaultHost``) to fix ``GSBotoStorage``.
+  (`#124`_, `#125`_)
+
+.. _#122: https://github.com/jschneier/django-storages/pull/122
+.. _#127: https://github.com/jschneier/django-storages/pull/127
+.. _#124: https://github.com/jschneier/django-storages/issues/124
+.. _#125: https://github.com/jschneier/django-storages/pull/125
+
+1.4 (2016-02-07)
+****************
+
+* This package is now released on PyPI as `django-storages`. Please update your requirements files to
+  `django-storages==1.4`.
+
+1.3.2 (2016-01-26)
+******************
+
+* Fix memory leak from not closing underlying temp file in ``s3boto`` backend (`#106`_)
+* Allow easily specifying a custom expiry time when generating a url for ``S3BotoStorage`` (`#96`_)
+* Check for bucket existence when the empty path ('') is passed to ``storage.exists`` in ``S3BotoStorage`` -
+  this prevents a crash when running ``collectstatic -c`` on Django 1.9.1 (`#112`_) fixed in `#116`_
+
+.. _#106: https://github.com/jschneier/django-storages/pull/106
+.. _#96: https://github.com/jschneier/django-storages/pull/96
+.. _#112: https://github.com/jschneier/django-storages/issues/112
+.. _#116: https://github.com/jschneier/django-storages/pull/116
+
+
+1.3.1 (2016-01-12)
+******************
+
+* A few Azure Storage fixes [pass the content-type to Azure, handle chunked content, fix ``url``] (`#45`__)
+* Add support for a Dropbox (``dropbox``) storage backend
+* Various fixes to the ``apache_libcloud`` backend [return the number of bytes asked for by ``.read``, make ``.name`` non-private, don't
+  initialize to an empty ``BytesIO`` object] (`#55`_)
+* Fix multi-part uploads in ``s3boto`` backend not respecting ``AWS_S3_ENCRYPTION`` (`#94`_)
+* Automatically gzip svg files (`#100`_)
+
+.. __: https://github.com/jschneier/django-storages/pull/45
+.. _#76: https://github.com/jschneier/django-storages/pull/76
+.. _#55: https://github.com/jschneier/django-storages/pull/55
+.. _#94: https://github.com/jschneier/django-storages/pull/94
+.. _#100: https://github.com/jschneier/django-storages/pull/100
+
+
+1.3 (2015-08-14)
+****************
+
+* **Breaking:** Drop Support for Django 1.5 and Python 2.6
+* **Breaking:** Remove previously deprecated mongodb backend
+* **Breaking:** Remove previously deprecated ``parse_ts_extended`` from s3boto storage
+* Add support for Django 1.8+ (`#36`__)
+* Add ``AWS_S3_PROXY_HOST`` and ``AWS_S3_PROXY_PORT`` settings for s3boto backend (`#41`_)
+* Fix Python3K compat issue in apache_libcloud (`#52`_)
+* Fix Google Storage backend not respecting ``GS_IS_GZIPPED`` setting (`#51`__, `#60`_)
+* Rename FTP ``_name`` attribute to ``name`` which is what the Django ``File`` api is expecting (`#70`_)
+* Put ``StorageMixin`` first in inheritance to maintain backwards compat with older versions of Django (`#63`_)
+
+.. __: https://github.com/jschneier/django-storages/pull/36
+.. _#41: https://github.com/jschneier/django-storages/pull/41
+.. _#52: https://github.com/jschneier/django-storages/issues/52
+.. __: https://github.com/jschneier/django-storages/pull/51
+.. _#60: https://github.com/jschneier/django-storages/pull/60
+.. _#70: https://github.com/jschneier/django-storages/pull/70
+.. _#63: https://github.com/jschneier/django-storages/pull/63
+
+
+1.2.3 (2015-03-14)
+******************
+
+* Variety of FTP backend fixes (fix ``exists``, add ``modified_time``, remove call to non-existent function) (`#26`_)
+* Apparently the year changed to 2015
+
+.. _#26: https://github.com/jschneier/django-storages/pull/26
+
+
+1.2.2 (2015-01-28)
+******************
+
+* Remove always show all warnings filter (`#21`_)
+* Release package as a wheel
+* Avoid resource warning during install (`#20`__)
+* Made ``S3BotoStorage`` deconstructible (previously only ``S3BotoStorageFile`` was deconstructible) (`#19`_)
+
+.. _#21: https://github.com/jschneier/django-storages/pull/21
+.. __: https://github.com/jschneier/django-storages/issues/20
+.. _#19: https://github.com/jschneier/django-storages/pull/19
+
+
+1.2.1 (2014-12-31)
+******************
+
+* **Deprecation:** Issue warning about ``parse_ts_extended``
+* **Deprecation:** mongodb backend - django-mongodb-engine now ships its own storage backend
+* Fix ``storage.modified_time`` crashing on new files when ``AWS_PRELOAD_METADATA=True`` (`#11`_, `#12`__, `#14`_)
+
+.. _#11: https://github.com/jschneier/django-storages/pull/11
+__ https://github.com/jschneier/django-storages/issues/12
+.. _#14: https://github.com/jschneier/django-storages/pull/14
+
+
+1.2 (2014-12-14)
+****************
+
+* **Breaking:** Remove legacy S3 storage (`#1`_)
+* **Breaking:** Remove mosso files backend (`#2`_)
+* Add text/javascript mimetype to S3BotoStorage gzip allowed defaults
+* Add support for Django 1.7 migrations in S3BotoStorage and ApacheLibCloudStorage (`#5`_, `#8`_)
+* Python3K (3.3+) now available for S3Boto backend (`#4`_)
+
+.. _#8: https://github.com/jschneier/django-storages/pull/8
+.. _#5: https://github.com/jschneier/django-storages/pull/5
+.. _#4: https://github.com/jschneier/django-storages/pull/4
+.. _#1: https://github.com/jschneier/django-storages/issues/1
+.. _#2: https://github.com/jschneier/django-storages/issues/2
+
+
+**NOTE**: Version 1.1.9 is the first release of django-storages after the fork.
+It represents the current (2014-12-08) state of the original django-storages in
+master with no additional changes. This is the first release of the code base
+since March 2013.
+
+1.1.9 (2014-12-08)
+******************
+
+* Fix syntax for Python3 with pull-request `#91`_
+* Support pushing content type from File object to GridFS with pull-request `#90`_
+* Support passing a region to the libcloud driver with pull-request `#86`_
+* Handle trailing slash paths fixes `#188`_ fixed by pull-request `#85`_
+* Use a SpooledTemporaryFile to conserve memory in S3BotoFile pull-request `#69`_
+* Guess content-type for S3BotoStorageFile the same way that _save() in S3BotoStorage does
+* Pass headers and response_headers through from url to generate_url in S3BotoStorage pull-request `#65`_
+* Added AWS_S3_HOST, AWS_S3_PORT and AWS_S3_USE_SSL settings to specify host, port and is_secure in pull-request `#66`_
+
+.. _#91: https://bitbucket.org/david/django-storages/pull-request/91/
+.. _#90: https://bitbucket.org/david/django-storages/pull-request/90/
+.. _#86: https://bitbucket.org/david/django-storages/pull-request/86/
+.. _#188: https://bitbucket.org/david/django-storages/issue/188/s3boto-_clean_name-is-broken-and-leads-to
+.. _#85: https://bitbucket.org/david/django-storages/pull-request/85/
+.. _#69: https://bitbucket.org/david/django-storages/pull-request/69/
+.. _#66: https://bitbucket.org/david/django-storages/pull-request/66/
+.. _#65: https://bitbucket.org/david/django-storages/pull-request/65/
+
+
+**Everything Below Here Was Previously Released on PyPI under django-storages**
+
+
+1.1.8 (2013-03-31)
+******************
+
+* Fixes `#156`_ regarding date parsing, ValueError when running collectstatic
+* Proper handling of boto dev version parsing
+* Made SFTP URLs accessible, now uses settings.MEDIA_URL instead of sftp://
+
+.. _#156: https://bitbucket.org/david/django-storages/issue/156/s3boto-backend-valueerror-time-data-thu-07
+
+1.1.7 (2013-03-20)
+******************
+
+* Listing of huge buckets on S3 is now prevented by using the prefix argument to boto's list() method
+* Initial support for Windows Azure Storage
+* Switched to useing boto's parse_ts date parser getting last modified info when using S3boto backend
+* Fixed key handling in S3boto and Google Storage backends
+* Account for lack of multipart upload in Google Storage backend
+* Fixed seek() issue when using AWS_IS_GZIPPED by darkness51 with pull-request `#50`_
+* Improvements to S3BotoStorage and GSBotoStorage
+
+.. _#50: https://bitbucket.org/david/django-storages/pull-request/50/
+
+1.1.6 (2013-01-06)
+******************
+
+* Merged many changes from Jannis Leidel (mostly regarding gzipping)
+* Fixed tests by Ian Lewis
+* Added support for Google Cloud Storage backend by Jannis Leidel
+* Updated license file by Dan Loewenherz, fixes `#133`_ with pull-request `#44`_
+* Set Content-Type header for use in upload_part_from_file by Gerardo Curiel
+* Pass the rewind parameter to Boto's set_contents_from_file method by Jannis Leidel with pull-request `#45`_
+* Fix for FTPStorageFile close() method by Mathieu Comandon with pull-request `#43`_
+* Minor refactoring by Oktay Sancak with pull-request `#48`_
+* Ungzip on download based on Content-Encoding by Gavin Wahl with pull-request `#46`_
+* Add support for S3 server-side encryption by Tobias McNulty with pull-request `#17`_
+* Add an optional setting to the boto storage to produce protocol-relative URLs, fixes `#105`_
+
+.. _#133: https://bitbucket.org/david/django-storages/issue/133/license-file-refers-to-incorrect-project
+.. _#44: https://bitbucket.org/david/django-storages/pull-request/44/
+.. _#45: https://bitbucket.org/david/django-storages/pull-request/45/
+.. _#43: https://bitbucket.org/david/django-storages/pull-request/43/
+.. _#48: https://bitbucket.org/david/django-storages/pull-request/48/
+.. _#46: https://bitbucket.org/david/django-storages/pull-request/46/
+.. _#17: https://bitbucket.org/david/django-storages/pull-request/17/
+.. _#105: https://bitbucket.org/david/django-storages/issue/105/add-option-to-produce-protocol-relative
+
+
+1.1.5 (2012-07-18)
+******************
+
+* Merged pull request `#36`_ from freakboy3742 Keith-Magee, improvements to Apache Libcloud backend and docs
+* Merged pull request `#35`_ from atodorov, allows more granular S3 access settings
+* Add support for SSL in Rackspace Cloudfiles backend
+* Fixed the listdir() method in s3boto backend, fixes `#57`_
+* Added base url tests for safe_join in s3boto backend
+* Merged pull request `#20`_ from alanjds, fixed SuspiciousOperation warning if AWS_LOCATION ends with '/'
+* Added FILE_BUFFER_SIZE setting to s3boto backend
+* Merged pull request `#30`_ from pendletongp, resolves `#108`_, `#109`_ and `#110`_
+* Updated the modified_time() method so that it doesn't require dateutil. fixes `#111`_
+* Merged pull request `#16`_ from chamal, adds Apache Libcloud backend
+* When preloading the S3 metadata make sure we reset the files key during saving to prevent stale metadata
+* Merged pull request `#24`_ from tobias.mcnulty, fixes bug where s3boto backend returns modified_time in wrong time zone
+* Fixed HashPathStorage.location to no longer use settings.MEDIA_ROOT
+* Remove download_url from setup file so PyPI dist is used
+
+.. _#36: https://bitbucket.org/david/django-storages/pull-request/36/
+.. _#35: https://bitbucket.org/david/django-storages/pull-request/35/
+.. _#57: https://bitbucket.org/david/django-storages/issue/57
+.. _#20: https://bitbucket.org/david/django-storages/pull-request/20/
+.. _#30: https://bitbucket.org/david/django-storages/pull-request/30/
+.. _#108: https://bitbucket.org/david/django-storages/issue/108
+.. _#109: https://bitbucket.org/david/django-storages/issue/109
+.. _#110: https://bitbucket.org/david/django-storages/issue/110
+.. _#111: https://bitbucket.org/david/django-storages/issue/111
+.. _#16: https://bitbucket.org/david/django-storages/pull-request/16/
+.. _#24: https://bitbucket.org/david/django-storages/pull-request/24/
+
+1.1.4 (2012-01-06)
+******************
+
+* Added PendingDeprecationWarning for mosso backend
+* Merged pull request `#13`_ from marcoala, adds ``SFTP_KNOWN_HOST_FILE`` setting to SFTP storage backend
+* Merged pull request `#12`_ from ryankask, fixes HashPathStorage tests that delete remote media
+* Merged pull request `#10`_ from key, adds support for django-mongodb-engine 0.4.0 or later, fixes GridFS file deletion bug
+* Fixed S3BotoStorage performance problem calling modified_time()
+* Added deprecation warning for s3 backend, refs `#40`_
+* Fixed CLOUDFILES_CONNECTION_KWARGS import error, fixes `#78`_
+* Switched to sphinx documentation, set official docs up on https://django-storages.readthedocs.io/
+* HashPathStorage uses self.exists now, fixes `#83`_
+
+.. _#13: https://bitbucket.org/david/django-storages/pull-request/13/a-version-of-sftp-storage-that-allows-you
+.. _#12: https://bitbucket.org/david/django-storages/pull-request/12/hashpathstorage-tests-deleted-my-projects
+.. _#10: https://bitbucket.org/david/django-storages/pull-request/10/support-django-mongodb-engine-040
+.. _#40: https://bitbucket.org/david/django-storages/issue/40/deprecate-s3py-backend
+.. _#78: https://bitbucket.org/david/django-storages/issue/78/import-error
+.. _#83: https://bitbucket.org/david/django-storages/issue/6/symlinkorcopystorage-new-custom-storage
+
+1.1.3 (2011-08-15)
+******************
+
+* Created this lovely change log
+* Fixed `#89`_: broken StringIO import in CloudFiles backend
+* Merged `pull request #5`_: HashPathStorage path bug
+
+.. _#89: https://bitbucket.org/david/django-storages/issue/89/112-broke-the-mosso-backend
+.. _pull request #5: https://bitbucket.org/david/django-storages/pull-request/5/fixed-path-bug-and-added-testcase-for
diff --git a/django_storages.egg-info/SOURCES.txt b/django_storages.egg-info/SOURCES.txt
new file mode 100644
index 0000000..d0a66e4
--- /dev/null
+++ b/django_storages.egg-info/SOURCES.txt
@@ -0,0 +1,48 @@
+AUTHORS
+CHANGELOG.rst
+LICENSE
+MANIFEST.in
+README.rst
+setup.cfg
+setup.py
+django_storages.egg-info/PKG-INFO
+django_storages.egg-info/SOURCES.txt
+django_storages.egg-info/dependency_links.txt
+django_storages.egg-info/not-zip-safe
+django_storages.egg-info/requires.txt
+django_storages.egg-info/top_level.txt
+docs/Makefile
+docs/conf.py
+docs/index.rst
+docs/make.bat
+docs/backends/amazon-S3.rst
+docs/backends/apache_libcloud.rst
+docs/backends/azure.rst
+docs/backends/backblaze-B2.rst
+docs/backends/digital-ocean-spaces.rst
+docs/backends/dropbox.rst
+docs/backends/ftp.rst
+docs/backends/gcloud.rst
+docs/backends/sftp.rst
+storages/__init__.py
+storages/base.py
+storages/compress.py
+storages/utils.py
+storages/backends/__init__.py
+storages/backends/apache_libcloud.py
+storages/backends/azure_storage.py
+storages/backends/dropbox.py
+storages/backends/ftp.py
+storages/backends/gcloud.py
+storages/backends/s3boto3.py
+storages/backends/sftpstorage.py
+tests/__init__.py
+tests/settings.py
+tests/test_azure.py
+tests/test_dropbox.py
+tests/test_ftp.py
+tests/test_gcloud.py
+tests/test_s3boto3.py
+tests/test_sftp.py
+tests/test_utils.py
+tests/utils.py
\ No newline at end of file
diff --git a/django_storages.egg-info/dependency_links.txt b/django_storages.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/django_storages.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/django_storages.egg-info/not-zip-safe b/django_storages.egg-info/not-zip-safe
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/django_storages.egg-info/not-zip-safe
@@ -0,0 +1 @@
+
diff --git a/django_storages.egg-info/requires.txt b/django_storages.egg-info/requires.txt
new file mode 100644
index 0000000..1b6c983
--- /dev/null
+++ b/django_storages.egg-info/requires.txt
@@ -0,0 +1,19 @@
+Django>=3.2
+
+[azure]
+azure-storage-blob>=12.0.0
+
+[boto3]
+boto3>=1.4.4
+
+[dropbox]
+dropbox>=7.2.1
+
+[google]
+google-cloud-storage>=1.27.0
+
+[libcloud]
+apache-libcloud
+
+[sftp]
+paramiko>=1.10.0
diff --git a/django_storages.egg-info/top_level.txt b/django_storages.egg-info/top_level.txt
new file mode 100644
index 0000000..202a0c4
--- /dev/null
+++ b/django_storages.egg-info/top_level.txt
@@ -0,0 +1 @@
+storages
diff --git a/docs/backends/azure.rst b/docs/backends/azure.rst
index 2a2089b..42196e2 100644
--- a/docs/backends/azure.rst
+++ b/docs/backends/azure.rst
@@ -1,7 +1,7 @@
 Azure Storage
 =============
 
-A custom storage system for Django using Windows Azure Storage backend.
+A custom storage system for Django using Microsoft Azure Storage backend.
 
 
 Notes
@@ -72,6 +72,7 @@ cache-control, content-type, content-encoding, content-language, and content-dis
 See https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-properties#remarks
 
 You can specify these parameters by::
+
     az_storage = AzureStorage()
     az_url = az_storage.url(blob_name, parameters={'content_type': 'text/html;'})
 
@@ -79,7 +80,7 @@ You can specify these parameters by::
 Settings
 ********
 
-The following settings should be set within the standard django
+The following settings should be set within the standard Django
 configuration file, usually `settings.py`.
 
 Set the default storage (i.e: for media files) and the static storage
diff --git a/docs/logos/horizontal.png b/docs/logos/horizontal.png
deleted file mode 100644
index 06d0354..0000000
Binary files a/docs/logos/horizontal.png and /dev/null differ
diff --git a/docs/logos/horizontal2.png b/docs/logos/horizontal2.png
deleted file mode 100644
index 80d7d73..0000000
Binary files a/docs/logos/horizontal2.png and /dev/null differ
diff --git a/docs/logos/logo.png b/docs/logos/logo.png
deleted file mode 100644
index df97733..0000000
Binary files a/docs/logos/logo.png and /dev/null differ
diff --git a/docs/logos/logo.svg b/docs/logos/logo.svg
deleted file mode 100644
index 7c41deb..0000000
--- a/docs/logos/logo.svg
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
-	 width="120px" height="100.341px" viewBox="0 0 120 100.341" enable-background="new 0 0 120 100.341" xml:space="preserve">
-<g>
-	<path fill="#103E2E" d="M105.525,36.891c-0.634-0.411-1.296-0.78-1.971-1.128v3.013v33.795c0,1.433-0.131,2.797-0.38,4.096
-		c7.588-3.729,12.811-11.532,12.811-20.557C115.985,48.053,111.817,40.971,105.525,36.891z"/>
-	<path fill="#103E2E" d="M98.264,27.388c1.627,0,3.019-0.574,4.18-1.722c1.16-1.147,1.739-2.523,1.739-4.125
-		c0-1.626-0.579-3.007-1.739-4.143c-1.161-1.136-2.553-1.704-4.18-1.704c-1.649,0-3.054,0.568-4.213,1.704
-		c-1.161,1.136-1.739,2.517-1.739,4.143c0,1.602,0.578,2.978,1.739,4.125C95.21,26.813,96.614,27.388,98.264,27.388z"/>
-	<path fill="#103E2E" d="M103.555,35.763v-5.535H92.938v2.991c0.051,0,0.099-0.004,0.148-0.004
-		C96.862,33.214,100.416,34.143,103.555,35.763z"/>
-	<path fill="#103E2E" d="M94.099,79.011h-3.291c-1.618,2.112-3.752,3.172-6.406,3.172h-0.717l0.179,9.074
-		c4.903,0,9.003-1.172,12.303-3.515c3.819-2.893,6.152-6.587,7.009-11.076c-2.14,1.052-4.467,1.782-6.918,2.121
-		C95.56,78.93,94.839,79.011,94.099,79.011z"/>
-	<circle fill="none" cx="26.915" cy="56.113" r="13.66"/>
-	<path fill="#103E2E" d="M82.895,35.605c-0.038-8.632-3.601-16.292-9.098-21.133c-3.837-3.38-8.615-5.389-13.8-5.389
-		c-4.884,0-9.408,1.784-13.124,4.818v26.023h-1.489h-0.619v-3.242V15.846v-1.638c0-2.831-2.715-5.125-6.063-5.125
-		c-3.349,0-6.064,2.294-6.064,5.125v19.738c-1.83-0.473-3.745-0.732-5.723-0.732c-12.649,0-22.9,10.251-22.9,22.896
-		c0,12.059,9.319,21.933,21.149,22.827c0.18,0.02,0.362,0.032,0.544,0.041c0.02,0.001,0.04,0.003,0.061,0.003
-		c0.198,0.012,0.394,0.03,0.595,0.03h28.948V62.926H44.765L60,41.636l15.235,21.29H64.688v16.085h26.12
-		c0.525-0.686,0.998-1.479,1.413-2.387c0.478-1.506,0.717-2.917,0.717-4.232V36.231v-3.013
-		C89.33,33.241,85.924,34.098,82.895,35.605z M26.959,69.773c-7.545,0.024-13.681-6.072-13.706-13.617
-		c-0.024-7.544,6.07-13.679,13.617-13.704c7.543-0.025,13.681,6.071,13.705,13.614C40.6,63.611,34.504,69.75,26.959,69.773z"/>
-</g>
-</svg>
diff --git a/docs/logos/vertical.png b/docs/logos/vertical.png
deleted file mode 100644
index c995ddb..0000000
Binary files a/docs/logos/vertical.png and /dev/null differ
diff --git a/manage.py b/manage.py
deleted file mode 100755
index ea3f17b..0000000
--- a/manage.py
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/usr/bin/env python
-
-# XXX we need manage.py until pytest-django is fixed
-# https://github.com/pytest-dev/pytest-django/issues/639
-
-import sys
-
-if __name__ == "__main__":
-    from django.core.management import execute_from_command_line
-
-    execute_from_command_line(sys.argv)
diff --git a/setup.cfg b/setup.cfg
index b94845e..5f21a01 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -7,53 +7,53 @@ license = BSD-3-Clause
 author = Josh Schneier
 author_email = josh.schneier@gmail.com
 url = https://github.com/jschneier/django-storages
-classifiers =
-    Development Status :: 5 - Production/Stable
-    Environment :: Web Environment
-    Framework :: Django
-    Framework :: Django :: 3.2
-    Framework :: Django :: 4.0
-    Framework :: Django :: 4.1
-    Intended Audience :: Developers
-    License :: OSI Approved :: BSD License
-    Operating System :: OS Independent
-    Programming Language :: Python
-    Programming Language :: Python :: 3
-    Programming Language :: Python :: 3 :: Only
-    Programming Language :: Python :: 3.7
-    Programming Language :: Python :: 3.8
-    Programming Language :: Python :: 3.9
-    Programming Language :: Python :: 3.10
-    Programming Language :: Python :: 3.11
+classifiers = 
+	Development Status :: 5 - Production/Stable
+	Environment :: Web Environment
+	Framework :: Django
+	Framework :: Django :: 3.2
+	Framework :: Django :: 4.0
+	Framework :: Django :: 4.1
+	Intended Audience :: Developers
+	License :: OSI Approved :: BSD License
+	Operating System :: OS Independent
+	Programming Language :: Python
+	Programming Language :: Python :: 3
+	Programming Language :: Python :: 3 :: Only
+	Programming Language :: Python :: 3.7
+	Programming Language :: Python :: 3.8
+	Programming Language :: Python :: 3.9
+	Programming Language :: Python :: 3.10
+	Programming Language :: Python :: 3.11
 
 [options]
-zip_safe=False
+zip_safe = False
 python_requires = >=3.7
-install_requires =
-    Django>=3.2
-packages =
-    storages
-    storages.backends
+install_requires = 
+	Django>=3.2
+packages = 
+	storages
+	storages.backends
 
 [options.extras_require]
-azure =
-    azure-storage-blob >= 12.0.0
-boto3 =
-    boto3 >= 1.4.4
-dropbox =
-    dropbox >= 7.2.1
-google =
-    google-cloud-storage >= 1.27.0
-libcloud =
-    apache-libcloud
-sftp =
-    paramiko >= 1.10.0
+azure = 
+	azure-storage-blob >= 12.0.0
+boto3 = 
+	boto3 >= 1.4.4
+dropbox = 
+	dropbox >= 7.2.1
+google = 
+	google-cloud-storage >= 1.27.0
+libcloud = 
+	apache-libcloud
+sftp = 
+	paramiko >= 1.10.0
 
 [flake8]
-exclude =
-    .tox,
-    docs,
-    venv
+exclude = 
+	.tox,
+	docs,
+	venv
 max-line-length = 119
 
 [isort]
@@ -62,3 +62,8 @@ default_section = THIRDPARTY
 include_trailing_comma = true
 known_first_party = storages
 line_length = 119
+
+[egg_info]
+tag_build = 
+tag_date = 0
+
diff --git a/tox.ini b/tox.ini
deleted file mode 100644
index 0e71c75..0000000
--- a/tox.ini
+++ /dev/null
@@ -1,40 +0,0 @@
-[tox]
-minversion = 1.9
-envlist =
-	py{3.7,3.8,3.9,3.10}-django3.2
-	py{3.8,3.9,3.10}-django4.0
-	py{3.8,3.9,3.10,3.11}-django4.1
-	py{3.8,3.9,3.10,3.11}-djangomain
-	flake8
-
-[testenv]
-setenv =
-	DJANGO_SETTINGS_MODULE = tests.settings
-	PYTHONWARNINGS = always
-	PYTHONDONTWRITEBYTECODE = 1
-commands = pytest --cov=storages tests/ {posargs}
-deps =
-	django3.2: django~=3.2.9
-	django4.0: django~=4.0.0
-	django4.1: django~=4.1.0
-	djangomain: https://github.com/django/django/archive/main.tar.gz
-	cryptography
-	pytest
-	pytest-cov
-	rsa
-extras =
-    azure
-    boto3
-    dropbox
-    google
-    libcloud
-    sftp
-
-[testenv:flake8]
-deps =
-	flake8
-	isort>=5.0.0
-commands =
-	flake8
-	isort --check-only --diff .
-skip_install = true

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in first set of .debs but not in second

lrwxrwxrwx  root/root   /usr/share/doc/python-django-storages-doc/html/_static/sphinx_highlight.js -> ../../../../javascript/sphinxdoc/1.0/sphinx_highlight.js

Control files of package python-django-storages-doc: lines which differ (wdiff format)

  • Depends: libjs-sphinxdoc (>= 5.2) 5.0)

No differences were encountered between the control files of package python3-django-storages

No differences were encountered between the control files of package python3-django-storages-boto3

No differences were encountered between the control files of package python3-django-storages-dropbox

No differences were encountered between the control files of package python3-django-storages-ftp

No differences were encountered between the control files of package python3-django-storages-libcloud

No differences were encountered between the control files of package python3-django-storages-sftp

More details

Full run details