From b3cd4aab0b5d732e6b13f933a75c24e73c82e1f3 Mon Sep 17 00:00:00 2001 From: Oliver Marks Date: Wed, 19 Sep 2018 20:17:52 +0100 Subject: [PATCH] Update images downloader to use requests --- config/settings/common.py | 1 + mhackspace/feeds/helper.py | 29 +++++++++++++++++++++-------- 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/config/settings/common.py b/config/settings/common.py index a8248ee..e5d6630 100644 --- a/config/settings/common.py +++ b/config/settings/common.py @@ -294,6 +294,7 @@ STATICFILES_FINDERS = ( "sass_processor.finders.CssFinder", ) +AWS_AUTO_CREATE_BUCKET = True AWS_DEFAULT_ACL = "public-read" AWS_S3_SECURE_URLS = False AWS_ACCESS_KEY_ID = env('BUCKET_ACCESS_KEY') diff --git a/mhackspace/feeds/helper.py b/mhackspace/feeds/helper.py index 42ad2d7..84f9f4d 100644 --- a/mhackspace/feeds/helper.py +++ b/mhackspace/feeds/helper.py @@ -1,10 +1,11 @@ # -*- coding: utf-8 -*- import os +import tempfile import requests import logging -from io import BytesIO from time import mktime from datetime import datetime +from django.conf import settings from django.core.files import File from stdimage.utils import render_variations from mhackspace.feeds.reader import fetch_feeds @@ -42,23 +43,35 @@ def remove_old_articles(): def download_remote_images(): for article in Article.objects.all(): + print(article.original_image) if not article.original_image: continue try: result = requests.get(article.original_image) - article.image.save( - os.path.basename(article.original_image.__str__()), - File(open(BytesIO(result.content), "rb")), - ) - render_variations(result[0], image_variations, replace=True) - article.save() except Exception as e: - logger.exception(result) logger.exception(result.status_code) logger.exception( "Unable to download remote image for %s" % article.original_image ) + return + + try: + tmpfile = tempfile.TemporaryFile(mode='w+b') + tmpfile.write(result.content) + + article.image.save( + os.path.basename(article.original_image), + File(tmpfile), + ) + + file_path = f'{settings.MEDIA_ROOT}/{article.image.file}' + render_variations(file_path, image_variations, replace=True) + article.save() + except Exception as e: + logger.exception(result) + finally: + tmpfile.close() def get_active_feeds(feed=False):