- Fix re-opening of
S3File
(#1321) - Revert raising
ImproperlyConfigured
when nobucket_name
is set (#1322)
- Do not require both
AccountName
andAccountKey
inconnection_string
(#1312)
- Work around boto3 closing the uploaded file (#1303)
- Fix crash when cleaning up during aborted connection of
S3File.write
(#1304) - Raise
FileNotFoundError
when attempting to read thesize
of a non-existent file (#1309) - Move auth & CloudFront signer validation to init (#1302)
- Raise
ImproperlyConfigured
if nobucket_name
is set (#1313) - Fix tracking of
S3File.closed
(#1311)
- Breaking: Drop support for Django 4.0 (#1235)
- Breaking: The long deprecated & removed (from Django)
(modified|created|accessed)_time
methods have been removed from the various storages, please replace with theget_(modified|created|accessed)_time
methods - Add support for saving
pathlib.PurePath
names (#1278) - Add support for Django 4.2 (#1236)
- Set
account_(name|key)
fromconnection_string
if not provided (#1225)
- Deprecated: The name
DropboxStorage.location
has been deprecated, please rename toDropboxStorage.root_path
, a future version will remove support for the old name. (#1251) - Storage and related names with a captialized B have been changed to no longer have one e.g
DropboxStorage
has now replacedDropBoxStorage
. Aliases have been added so no change is necessary at this time. A future version might deprecate the old names. (#1250) DropboxStorage
now conforms to theBaseStorage
interface (#1251)- Fix name mangling when saving with certain complex root paths (#1279)
- Use setting
BASE_URL
if it is defined (#1238)
- Breaking: Support for the deprecated
GS_CACHE_CONTROL
has been removed. Please set thecache_control
parameter ofGS_OBJECT_PARAMETERS
instead. (#1220)
- Reading a file that does not exist will now raise
FileNotFoundError
(#1191)
- Add closing context manager for standalone usage to ensure connections are cleaned up (#1253)
- Deprecated:
AWS_S3_USE_THREADS
has been deprecated in favor ofAWS_S3_TRANSFER_CONFIG
(#1280) - Important: The namespace of this backend has changed from
S3Boto3
toS3
. There are no current plans to deprecate and remove the old namespace but please update if you can. All paths, imports, and classes that previously referred tos3boto
are nows3
. E.gS3Boto3Storage
has been changed toS3Storage
andS3Boto3StorageFile
has been changed toS3File
. (#1289). Additionally the install extra is nows3
(#1284) - Add setting
transfer_config/AWS_S3_TRANSFER_CONFIG
to customize any of theTransferConfig
properties (#1280) - Enable passing
security_token
to constructor (#1246) - Do not overwrite a returned
ContentType
fromget_object_parameters
(#1281) - Add support for setting
cloudfront_key_id
andcloudfront_key
via Django 4.2'sOPTIONS
(#1274) - Fix
S3File.closed
(#1249) - Fix opening new files in write mode with
S3File
(#1282) - Fix
S3File
not respecting mode onreadlines
(#1000) - Fix saving files with string content (#911)
- Fix retrieving files with SSE-C enabled (#1286)
- Catch 404 errors when calling
delete()
(#1201)
- Use
AZURE_CUSTOM_DOMAIN
for retrieving blob URLs and storage URL for other operations (#1176)
- Use
DEFAULT_RETRY
for all upload & delete operations (#1156) - Fix gzipping of content (#1203)
- Pass through kwargs to signed URL generator (#1193)
- Improve write & memory performance when saving files (#1194)
- 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)
- 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)
- Breaking: Update and document the undocumented
AWS_S3_URL_PROTOCOL
fromhttp:
tohttps:
and remove the undocumentedAWS_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 anhttps:
URL with a custom domain is unchanged (#1164) - Add
AWS_S3_USE_THREADS
to disablethreading
for compatibility withgevent
(#1112)
- Restore support for
AZURE_ENDPOINT_SUFFIX
(#1118) - Replace deprecated
download_to_stream
withreadinto
(#1113) - Add
AZURE_API_VERSION
setting (#1132) - Fix
get_modified_time()
(#1134)
- Add support for gzipping files via
GS_IS_GZIPPED
andGZIP_CONTENT_TYPES
(#980) - Use
GS_BLOB_CHUNK_SIZE
with files that already exist (#1154)
- Add support for Python 3.10 (#1078)
- Catch
FileNotFoundError
instead ofOSerror
in.exists()
to prevent swallowingsocket.timeout
exceptions (#1064, #1087)
- Add
parameters
kwarg toAzureStorage.url
to configure blob properties in the SAS token (#1071) - Fix regression where
AZURE_CUSTOM_DOMAIN
was interpreted as a replacement ofblob.core.windows.net
rather than as a full domain (#1073, #1076)
- Change gzip compression to use a streaming implementation (#1061)
- Fix saving files with
S3ManifestStaticStorage
(#1068, #1069)
- 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)
- 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 settingsAZURE_EMULATED_MODE
,AZURE_ENDPOINT_SUFFIX
, andAZURE_CUSTOM_CONNECTION_STRING
are now ignored. (#784, #805) - Add support for user delegation keys (#1063)
- 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 thecache_control
parameter ofGS_OBJECT_PARAMETERS
instead. (#970) - Add
GS_OBJECT_PARAMETERS
and overridableGoogleCloudStorage.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)
- Validate
write_mode
param (#1020)
- Revert fix for
ValueError: I/O operation on closed file
when callingcollectstatic
and introduceS3StaticStorage
andS3ManifestStaticStorage
for use asSTATICFILES_STORAGE
targets (#968)
- Test against Python 3.9 (#964)
- Fix
ValueError: I/O operation on closed file
when callingcollectstatic
(#382, #955) - Calculate
S3Boto3StorageFile.buffer_size
(via settingAWS_S3_FILE_BUFFER_SIZE
) at run-time rather than import-time. (#930) - Fix writing
bytearray
content (#958, #965)
- Add setting
GS_QUERYSTRING_AUTH
to avoid signing URLs. This is useful for buckets with a policy of Uniform public read (#952)
- Add
AZURE_OBJECT_PARAMETERS
and overridableAzureStorage.get_object_parameters
to customizeContentSettings
parameters for all keys and per-key respectively. (#898)
- Restore
AWS_DEFAULT_ACL
handling. This setting is ignored ifACL
is set inAWS_S3_OBJECT_PARAMETERS
(#934)
- Fix using
SFTP_STORAGE_HOST
(#926)
- 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 aget_default_settings
method and use it inS3Boto3Storage
,AzureStorage
,GoogleCloudStorage
, andSFTPStorage
. These backends now calculate their settings when instantiated, not imported. (#524, #852)
- Breaking: Automatic bucket creation has been removed. Doing so encourages using overly broad credentials.
As a result, support for the corresponding
AWS_BUCKET_ACL
andAWS_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 theACL
key in settingAWS_S3_OBJECT_PARAMETERS
(#636) - Breaking: The constructor kwarg
bucket
is no longer accepted. Instead, usebucket_name
or theAWS_STORAGE_BUCKET_NAME
setting (#636) - Breaking: Support for setting
AWS_REDUCED_REDUNDANCY
has been removed. Replace withStorageClass=REDUCED_REDUNDANCY
inAWS_S3_OBJECT_PARAMETERS
(#636) - Breaking: Support for setting
AWS_S3_ENCRYPTION
has been removed. Replace withServerSideEncryption=AES256
inAWS_S3_OBJECT_PARAMETERS
(#636) - Breaking: Support for setting
AWS_DEFAULT_ACL
has been removed. Replace withACL
inAWS_S3_OBJECT_PARAMETERS
(#636) - Add
http_method
parameter to.url
method (#854) - Add support for signing Cloudfront URLs to the
.url
method. You must setAWS_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 ifAWS_QUERYSTRING_AUTH
is set toTrue
(#885)
- 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
andGS_AUTO_CREATE_ACL
settings have been removed. (#894)
- Add
DROPBOX_WRITE_MODE
setting to control e.g. overwriting behavior. Check the docs for more info (#873, #138)
- Add
FTP_STORAGE_ENCODING
setting to set the filesystem encoding (#803) - Support multiple nested paths for files (#886)
- Breaking: The long deprecated S3 backend based on
boto
has been removed. (#825) - Test against and support Python 3.8 (#810)
- 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 withStorageClass=REDUCED_REDUNDANCY
inAWS_S3_OBJECT_PARAMETERS
(#829) - Deprecated: Support for
AWS_S3_ENCRYPTION
will be removed in version 1.10 (#829) Replace withServerSideEncryption=AES256
inAWS_S3_OBJECT_PARAMETERS
- A custom
ContentEncoding
is no longer overwritten automatically (note that specifying one will disable automaticgzip
) (#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 ownFileSystemStorage
(#435, #816) - Fix reading a file in text mode (#404, #827)
- Deprecated: Automatic bucket creation will be removed in version 1.10 (#826)
- Fix crash on
DropBoxStorage.listdir
(#762) - Settings can now additionally be specified at the class level to ease subclassing (#745)
- Add support for Backblaze B2 to
LibCloudStorage.url
(#807)
- Add support for Django 3.0 (#759)
- Update license identifier to unambiguous
BSD-3-Clause
- Breaking The minimum supported version of
google-cloud-storage
is now1.15.0
which enables... - Add setting
GS_CUSTOM_ENDPOINT
to allow usage of custom domains (#775, #648)
- Fix extra installation by pinning version to < 12 (#785)
- Add support for setting
AZURE_CACHE_CONTROL
header (#780, #674)
- Avoid misleading
AWS_DEFAULT_ACL
warning for insecuredefault_acl
when overridden as a class variable (#591) - Propagate file deletion to cache when
preload_metadata
isTrue
, (not the default) (#743, #749) - Fix exception raised on closed file (common if using
ManifestFilesMixin
orcollectstatic
. (#382, #754)
- Pare down the required packages in
extra_requires
when installing theazure
extra to onlyazure-storage-blob
(#680, #684) - Fix compatibility 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)
- 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
isFalse
(the default) (#412, #718) - Set the
predefined_acl
when creating aGoogleCloudFile
using.write
(#640, #756) - Add
GS_BLOB_CHUNK_SIZE
setting to enable efficient uploading of large files (#757)
- 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)
- Fix reopening a file (#746)
- Fix off-by-1 error in
get_available_name
wheneverfile_overwrite
oroverwrite_files
isTrue
(#588, #589) - Change
S3Boto3Storage.listdir()
to uselist_objects
instead oflist_objects_v2
to restore compatibility with services implementing the S3 protocol that do not yet support the new method (#586, #590)
Security
- The
S3BotoStorage
andS3Boto3Storage
backends have an insecure default ACL ofpublic-read
. It is recommended that all current users audit their bucket permissions. Support has been added for settingAWS_DEFAULT_ACL = None
andAWS_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 (forS3Boto3Storage
only sinceS3BotoStorage
will be removed in version 1.9, see below). Additionally, a warning is now raised ifAWS_DEFAULT_ACL
orAWS_BUCKET_ACL
is not explicitly set. (#381, #535, #579)
Breaking
- The
AzureStorage
backend and documentation has been completely rewritten. It now depends onazure
andazure-storage-blob
and is vastly improved. Big thanks to @nitely and all other contributors along the way (#565) - The
.url()
method ofGoogleCloudStorage
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 viaGS_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
forAWS_DEFAULT_ACL
andAWS_BUCKET_ACL
inS3Boto3Storage
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 theS3Boto3Storage
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
ofacl
andbucket
are deprecated in favor ofbucket_name
anddefault_acl
(#516) - The minimum required version of
boto3
will be increasing to1.4.4
in the next major version ofdjango-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 forGoogleCloudStorage
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
onS3Boto3Storage
(#352) - Add
AWS_S3_VERIFY
to support custom certificates and disabling certificate verification toS3Boto3Storage
(#486, #580) - Add
AWS_S3_PROXIES
setting toS3Boto3Storage
(#583) - Add a snazzy new logo. Big thanks to @reallinfo
Bugfixes
- Reset file read offset before passing to
GoogleCloudStorage
andAzureStorage
(#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 coreFile
abstraction (#487, #568) - Catch
IOError
inSFTPStorage.delete
(#568) AzureStorage
,GoogleCloudStorage
,S3Boto3Storage
andS3BotoStorage
now respectmax_length
whenfile_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)
- You can now specify the backend you are using to install the necessary dependencies using
extra_requires
. For examplepip install django-storages[boto3]
(#417) - Add additional content-type detection fallbacks (#406, #407)
- Add
GS_LOCATION
setting to specify subdirectory forGoogleCloudStorage
(#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
forGoogleCloudStorage
(#464)
- Fix Django 1.11 regression with gzipped content being saved twice resulting in empty files (#367, #371, #373)
- Fix the
mtime
when gzipping content onS3Boto3Storage
(#374)
- Files uploaded with
GoogleCloudStorage
will now set their appropriate mimetype (#320) - Fix
DropBoxStorage.url
to work. (#357) - Fix
S3Boto3Storage
whenAWS_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)
- Revert default
AWS_S3_SIGNATURE_VERSION
to V2 to restore backwards compatibility inS3Boto3
. It's recommended that all new projects set this to be's3v4'
. (#344)
- 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)
- Drop support for Django 1.9 (e89db45)
- Fix regression in
safe_join()
to allow joining a base path with an empty string. (#336)
- 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 newgcloud.GoogleCloudStorage
orapache_libcloud.LibCloudStorage
backends instead. (#236) - Add a new backend,
gcloud.GoogleCloudStorage
based on thegoogle-cloud
bindings. (#236) - Pass in the location constraint when auto creating a bucket in
S3Boto3Storage
(#257, #258) - Add support for reading
AWS_SESSION_TOKEN
andAWS_SECURITY_TOKEN
from the environment toS3Boto3Storage
andS3BotoStorage
. (#283) - Fix Boto3 non-ascii filenames on Python 2.7 (#216, #217)
- Fix
collectstatic
timezone handling in and addget_modified_time
toS3BotoStorage
(#290) - Add support for Django 1.11 (#295)
- Add
project
keyword support to GCS inLibCloudStorage
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)
- Actually use
SFTP_STORAGE_HOST
inSFTPStorage
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
isFalse
inS3Boto3Storage.modified_time
. (#235, #234) - Fix automatic bucket creation in
S3Boto3Storage
whenAWS_AUTO_CREATE_BUCKET
isTrue
(#196) - Improve the documentation for the S3 backends
- 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 forGzipFile
inS3BotoStorage
andS3Boto3Storage
to ensure a stable output for gzipped files - Use
.putfileobj
instead of.put
inS3Boto3Storage
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
andget_accessed_time
) - Fix bad kwarg name in
S3Boto3Storage
when AWS_PRELOAD_METADATA is True (#189, #190)
- Add new backend
S3Boto3Storage
(#179) - Add a strict option to utils.setting (#176)
- Tests, documentation, fixing
.close
forSFTPStorage
(#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)
- 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 asapplication/javascript
will still be gzipped. PR #122 - Fix
DropBoxStorage.exists
check and addDropBoxStorage.url
(#127) - Add
GS_HOST
setting (with a default ofGSConnection.DefaultHost
) to fixGSBotoStorage
. (#124, #125)
- This package is now released on PyPI as django-storages. Please update your requirements files to django-storages==1.4.
- 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
inS3BotoStorage
- this prevents a crash when runningcollectstatic -c
on Django 1.9.1 (#112) fixed in #116
- 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 emptyBytesIO
object] (#55) - Fix multi-part uploads in
s3boto
backend not respectingAWS_S3_ENCRYPTION
(#94) - Automatically gzip svg files (#100)
- 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
andAWS_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 toname
which is what the DjangoFile
api is expecting (#70) - Put
StorageMixin
first in inheritance to maintain backwards compat with older versions of Django (#63)
- Variety of FTP backend fixes (fix
exists
, addmodified_time
, remove call to non-existent function) (#26) - Apparently the year changed to 2015
- Remove always show all warnings filter (#21)
- Release package as a wheel
- Avoid resource warning during install (#20)
- Made
S3BotoStorage
deconstructible (previously onlyS3BotoStorageFile
was deconstructible) (#19)
- 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 whenAWS_PRELOAD_METADATA=True
(#11, #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)
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.
- 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
Everything Below Here Was Previously Released on PyPI under django-storages
- 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://
- 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
- 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
- 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
- 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
- Created this lovely change log
- Fixed #89: broken StringIO import in CloudFiles backend
- Merged pull request #5: HashPathStorage path bug