diff --git a/apps/feed_import/models.py b/apps/feed_import/models.py index a1d4c86f2..25b8410bb 100644 --- a/apps/feed_import/models.py +++ b/apps/feed_import/models.py @@ -2,7 +2,6 @@ import datetime import mongoengine as mongo import pickle import base64 -from io import StringIO from oauth2client.client import Error as OAuthError from xml.etree.ElementTree import Element, SubElement, Comment, tostring from lxml import etree diff --git a/apps/rss_feeds/icon_importer.py b/apps/rss_feeds/icon_importer.py index 0716046bd..053356645 100644 --- a/apps/rss_feeds/icon_importer.py +++ b/apps/rss_feeds/icon_importer.py @@ -4,17 +4,17 @@ import numpy import scipy import scipy.misc import scipy.cluster -import urllib.parse import struct import operator import gzip import datetime import requests +import codecs import http.client from PIL import BmpImagePlugin, PngImagePlugin, Image from socket import error as SocketError from boto.s3.key import Key -from io import StringIO +from io import BytesIO from django.conf import settings from apps.rss_feeds.models import MFeedPage, MFeedIcon from utils.facebook_fetcher import FacebookFetcher @@ -203,7 +203,7 @@ class IconImporter(object): elif settings.BACKED_BY_AWS.get('pages_on_s3') and self.feed.s3_page: key = settings.S3_CONN.get_bucket(settings.S3_PAGES_BUCKET_NAME).get_key(self.feed.s3_pages_key) compressed_content = key.get_contents_as_string() - stream = StringIO(compressed_content) + stream = BytesIO(compressed_content) gz = gzip.GzipFile(fileobj=stream) try: content = gz.read() @@ -299,7 +299,7 @@ class IconImporter(object): return None, None try: - icon_file = StringIO(icon) + icon_file = BytesIO(icon) image = Image.open(icon_file) except (IOError, ValueError): return None, None @@ -381,12 +381,14 @@ class IconImporter(object): # Find the most frequent color, based on the counts. index_max = scipy.argmax(counts) peak = codes.astype(int)[index_max] - color = ''.join(chr(c) for c in peak).encode('hex') + print(f" ---> Color: {peak}") + color = codecs.decode(''.join(chr(c) for c in peak), 'hex') + print(f" ---> Color: {color} {peak}") return color[:6] def string_from_image(self, image): - output = StringIO() + output = BytesIO() image.save(output, 'png', quality=95) contents = output.getvalue() output.close() diff --git a/apps/social/models.py b/apps/social/models.py index 097422ab6..8ea887be5 100644 --- a/apps/social/models.py +++ b/apps/social/models.py @@ -37,7 +37,7 @@ from utils.story_functions import truncate_chars, strip_tags, linkify, image_siz from utils.image_functions import ImageOps from utils.scrubber import SelectiveScriptScrubber from utils import s3_utils -from io import StringIO +from io import BytesIO try: from apps.social.spam import detect_spammers @@ -2328,11 +2328,11 @@ class MSharedStory(mongo.DynamicDocument): continue req = requests.get(image_source, headers=headers, stream=True) try: - datastream = StringIO(req.content) + datastream = BytesIO(req.content) width, height = ImageOps.image_size(datastream) except IOError as e: logging.debug(" ***> Couldn't read image: %s / %s" % (e, image_source)) - datastream = StringIO(req.content[:100]) + datastream = BytesIO(req.content[:100]) _, width, height = image_size(datastream) # if width <= 16 or height <= 16: # continue diff --git a/utils/feed_fetcher.py b/utils/feed_fetcher.py index 63f4cf56c..ed8e81a81 100644 --- a/utils/feed_fetcher.py +++ b/utils/feed_fetcher.py @@ -919,7 +919,7 @@ class Dispatcher: @timelimit(10) def calculate_feed_scores_with_stories(self, user_subs, stories): for sub in user_subs: - silent = False if self.options['verbose'] >= 2 else True + silent = False if getattr(self.options, 'verbose', 0) >= 2 else True sub.calculate_feed_scores(silent=silent, stories=stories) def add_jobs(self, feeds_queue, feeds_count=1): diff --git a/utils/image_functions.py b/utils/image_functions.py index c89701dc5..fbc380717 100644 --- a/utils/image_functions.py +++ b/utils/image_functions.py @@ -3,7 +3,7 @@ from PIL import Image from PIL import ImageOps as PILOps from PIL.ExifTags import TAGS -from io import StringIO +from io import BytesIO from vendor import reseekfile PROFILE_PICTURE_SIZES = { @@ -22,7 +22,7 @@ class ImageOps: This must happen in this function because PIL is transforming the original as it works.""" - image_file = StringIO(image_body) + image_file = BytesIO(image_body) try: image = Image.open(image_file) except IOError: @@ -42,7 +42,7 @@ class ImageOps: method=Image.ANTIALIAS, centering=(0.5, 0.5)) - output = StringIO() + output = BytesIO() if format.lower() == 'jpg': format = 'jpeg' image.save(output, format=format, quality=95)