from django.core.exceptions import ImproperlyConfigured, SuspiciousOperation from django.utils.encoding import force_text, smart_str, filepath_to_uri, force_bytes try: from boto import __version__ as boto_version from boto.s3.connection import S3Connection, SubdomainCallingFormat from boto.exception import S3ResponseError from boto.s3.key import Key as S3Key from boto.utils import parse_ts, ISO8601 except ImportError: raise ImproperlyConfigured("Could not load Boto's S3 bindings.\n" "See https://github.com/boto/boto") from storages.utils import setting from storages.compat import urlparse, BytesIO, deconstructible, Storage boto_version_info = tuple([int(i) for i in boto_version.split("-")[0].split(".")]) if boto_version_info[:2] < (2, 32): raise ImproperlyConfigured( "The installed Boto library must be 2.32 or " "higher.\nSee https://github.com/boto/boto" ) def safe_join(base, *paths): """ A version of django.utils._os.safe_join for S3 paths. Joins one or more path components to the base path component intelligently. Returns a normalized version of the final path. The final path must be located inside of the base path component
from django.utils import timezone as tz try: from boto import __version__ as boto_version from boto.s3.connection import S3Connection, SubdomainCallingFormat, Location from boto.exception import S3ResponseError from boto.s3.key import Key as S3Key from boto.utils import parse_ts, ISO8601 except ImportError: raise ImproperlyConfigured("Could not load Boto's S3 bindings.\n" "See https://github.com/boto/boto") from storages.utils import clean_name, safe_join, setting boto_version_info = tuple( [int(i) for i in boto_version.split('-')[0].split('.')]) if boto_version_info[:2] < (2, 32): raise ImproperlyConfigured("The installed Boto library must be 2.32 or " "higher.\nSee https://github.com/boto/boto") @deconstructible class S3BotoStorageFile(File): """ The default file object used by the S3BotoStorage backend. This file implements file streaming using boto's multipart uploading functionality. The file can be opened in read or write mode.
check_location, clean_name, get_available_overwrite_name, lookup_env, safe_join, setting, ) try: from boto import __version__ as boto_version from boto.s3.connection import S3Connection, SubdomainCallingFormat, Location from boto.exception import S3ResponseError from boto.s3.key import Key as S3Key from boto.utils import parse_ts, ISO8601 except ImportError: raise ImproperlyConfigured("Could not load Boto's S3 bindings.\n" "See https://github.com/boto/boto") boto_version_info = tuple([int(i) for i in boto_version.split('-')[0].split('.')]) if boto_version_info[:2] < (2, 32): raise ImproperlyConfigured("The installed Boto library must be 2.32 or " "higher.\nSee https://github.com/boto/boto") warnings.warn( "The S3BotoStorage backend is deprecated in favor of the S3Boto3Storage backend " "and will be removed in django-storages 1.8. This backend is mostly in bugfix only " "mode and has been for quite a while (in much the same way as its underlying " "library 'boto'). For performance, security and new feature reasons it is _strongly_ " "recommended that you update to the S3Boto3Storage backend. Please see the migration docs " "https://django-storages.readthedocs.io/en/latest/backends/amazon-S3.html#migrating-boto-to-boto3.", DeprecationWarning )
from django.utils.six import BytesIO from storages.utils import clean_name, safe_join, setting try: from boto import __version__ as boto_version from boto.s3.connection import S3Connection, SubdomainCallingFormat, Location from boto.exception import S3ResponseError from boto.s3.key import Key as S3Key from boto.utils import parse_ts, ISO8601 except ImportError: raise ImproperlyConfigured("Could not load Boto's S3 bindings.\n" "See https://github.com/boto/boto") boto_version_info = tuple([int(i) for i in boto_version.split('-')[0].split('.')]) if boto_version_info[:2] < (2, 32): raise ImproperlyConfigured("The installed Boto library must be 2.32 or " "higher.\nSee https://github.com/boto/boto") @deconstructible class S3BotoStorageFile(File): """ The default file object used by the S3BotoStorage backend. This file implements file streaming using boto's multipart uploading functionality. The file can be opened in read or write mode.