NewsBlur-viq/utils/s3_utils.py

82 lines
2.8 KiB
Python
Raw Normal View History

2012-12-10 11:40:35 -08:00
import os
import sys
2013-01-08 14:11:59 -08:00
import time
import mimetypes
from utils.image_functions import ImageOps
2012-12-10 11:40:35 -08:00
2013-02-25 19:01:04 -08:00
if '/srv/newsblur' not in ' '.join(sys.path):
sys.path.append("/srv/newsblur")
2012-12-10 11:40:35 -08:00
os.environ['DJANGO_SETTINGS_MODULE'] = 'newsblur_web.settings'
2012-12-10 11:40:35 -08:00
from django.conf import settings
ACCESS_KEY = settings.S3_ACCESS_KEY
SECRET = settings.S3_SECRET
BUCKET_NAME = settings.S3_BACKUP_BUCKET # Note that you need to create this bucket first
2013-01-08 14:11:59 -08:00
class S3Store:
def __init__(self, bucket_name=settings.S3_AVATARS_BUCKET_NAME):
# if settings.DEBUG:
# import ssl
# try:
# _create_unverified_https_context = ssl._create_unverified_context
# except AttributeError:
# # Legacy Python that doesn't verify HTTPS certificates by default
# pass
# else:
# # Handle target environment that doesn't support HTTPS verification
# ssl._create_default_https_context = _create_unverified_https_context
self.bucket_name = bucket_name
self.s3 = settings.S3_CONN
2013-01-08 14:11:59 -08:00
def create_bucket(self, bucket_name):
return self.s3.create_bucket(Bucket=bucket_name)
2013-01-08 14:11:59 -08:00
def save_profile_picture(self, user_id, filename, image_body):
content_type, extension = self._extract_content_type(filename)
if not content_type or not extension:
2013-01-08 14:11:59 -08:00
return
image_name = 'profile_%s.%s' % (int(time.time()), extension)
image = ImageOps.resize_image(image_body, 'fullsize', fit_to_size=False)
if image:
key = 'avatars/%s/large_%s' % (user_id, image_name)
self._save_object(key, image, content_type=content_type)
2013-01-08 14:11:59 -08:00
image = ImageOps.resize_image(image_body, 'thumbnail', fit_to_size=True)
if image:
key = 'avatars/%s/thumbnail_%s' % (user_id, image_name)
self._save_object(key, image, content_type=content_type)
2013-01-08 14:11:59 -08:00
return image and image_name
def _extract_content_type(self, filename):
content_type = mimetypes.guess_type(filename)[0]
2013-01-08 14:11:59 -08:00
extension = None
if content_type == 'image/jpeg':
2013-01-08 14:11:59 -08:00
extension = 'jpg'
elif content_type == 'image/png':
2013-01-08 14:11:59 -08:00
extension = 'png'
elif content_type == 'image/gif':
2013-01-08 14:11:59 -08:00
extension = 'gif'
return content_type, extension
2013-01-08 14:11:59 -08:00
def _save_object(self, key, file_object, content_type=None):
2013-01-08 14:11:59 -08:00
file_object.seek(0)
s3_object = self.s3.Object(bucket_name=self.bucket_name, key=key)
if content_type:
s3_object.put(Body=file_object, ExtraArgs={
2021-08-26 15:50:11 -04:00
'ContentType': content_type,
'ACL': 'public-read',
2013-01-08 14:11:59 -08:00
})
else:
s3_object.put(Body=file_object)
2013-01-08 14:11:59 -08:00