*****************
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