From 721917bb0272c399ebc6b1e6287119c2f467e484 Mon Sep 17 00:00:00 2001 From: Roman Timashev Date: Wed, 24 Feb 2016 17:30:24 +0300 Subject: [PATCH] Sync util restructuring --- utils/Sync/image/image.py | 8 ++++++ utils/Sync/image/image_processor.py | 35 ++++++++++++++++++++++++++ utils/Sync/{img.py => image/resize.py} | 8 ------ utils/Sync/read_gallery_1.py | 11 ++++---- utils/Sync/sync.py | 15 ++++++----- utils/Sync/sync_awards.py | 6 ++--- utils/Sync/sync_gallery.py | 9 ++++--- 7 files changed, 64 insertions(+), 28 deletions(-) create mode 100644 utils/Sync/image/image.py create mode 100644 utils/Sync/image/image_processor.py rename utils/Sync/{img.py => image/resize.py} (85%) diff --git a/utils/Sync/image/image.py b/utils/Sync/image/image.py new file mode 100644 index 00000000..37752dce --- /dev/null +++ b/utils/Sync/image/image.py @@ -0,0 +1,8 @@ +from PIL import Image + + +def read_image(src): + try: + return Image.open(src) + except FileNotFoundError: + return None \ No newline at end of file diff --git a/utils/Sync/image/image_processor.py b/utils/Sync/image/image_processor.py new file mode 100644 index 00000000..2af1724d --- /dev/null +++ b/utils/Sync/image/image_processor.py @@ -0,0 +1,35 @@ +import os + +from image.image import read_image +from image.resize import optimize, thumbnail + + +def image_processor(images_dir, public_base_url, sizes, name_generator): + def process(file): + image = read_image(file) + if not image: + return None + + basename = os.path.basename(file) + uri, ext = os.path.splitext(basename) + + image_dict = {} + for size in sizes: + size_name, width, height = size + + image_filename = name_generator(uri, size_name, ext) + d = os.path.join(images_dir, image_filename) + image_url = os.path.join(public_base_url, image_filename) + + do_optimize = size_name == 'original' + thumb = optimize(image, d, quality=90) if do_optimize else thumbnail(image, d, (width, height)) + width, height = thumb.size + image_dict[size_name] = { + 'url': image_url, + 'size': size_name, + 'width': width, + 'height': height + } + + return image_dict + return process \ No newline at end of file diff --git a/utils/Sync/img.py b/utils/Sync/image/resize.py similarity index 85% rename from utils/Sync/img.py rename to utils/Sync/image/resize.py index 471d2b67..084a32c2 100644 --- a/utils/Sync/img.py +++ b/utils/Sync/image/resize.py @@ -2,14 +2,6 @@ import os from subprocess import call -__author__ = 'Roman Timashev' - -from PIL import Image - - -def read_image(src): - return Image.open(src) - def thumbnail(image, dest, size, ext=None): image.thumbnail(size) diff --git a/utils/Sync/read_gallery_1.py b/utils/Sync/read_gallery_1.py index 327769d3..c0cc23ba 100644 --- a/utils/Sync/read_gallery_1.py +++ b/utils/Sync/read_gallery_1.py @@ -1,15 +1,16 @@ import os -from datetime import datetime import re +import time +from datetime import datetime + import lxml.html from markdown import markdown -import time -import img -from Album import Album import lxml_utils import settings +from Album import Album from Product import Product +from image import resize __author__ = 'Roman Timashev' @@ -129,7 +130,7 @@ class GalleryReader: def create_image(self, name, filename, sizes, ext, base_url): thumbs = {} for size, width, height in sizes: - source_image = img.read_image(filename) + source_image = resize.read_image(filename) sw, sh = source_image.size if sw < sh: width, height = height, width diff --git a/utils/Sync/sync.py b/utils/Sync/sync.py index 7cecd4cf..b131282e 100644 --- a/utils/Sync/sync.py +++ b/utils/Sync/sync.py @@ -1,13 +1,12 @@ -from glob import glob import os -import markdown as md +from glob import glob + import lxml.html as html +import markdown as md from lxml.etree import tostring -import re -import pymongo -import requests -import img + import lxml_utils +from image import resize __author__ = 'tmshv' @@ -210,9 +209,9 @@ for cf in catalog_files: d = os.path.join(images_dir, image_filename) pi[size_name] = 'http://static.touchtwin.ru/images/{img}'.format(img=image_filename) if size_name == 'original': - img.optimize(image, d, quality=90) + resize.optimize(image, d, quality=90) else: - img.minify(image, d, size[:2]) + resize.minify(image, d, size[:2]) images.append(pi) i += 1 diff --git a/utils/Sync/sync_awards.py b/utils/Sync/sync_awards.py index e930cc03..281f7c9d 100644 --- a/utils/Sync/sync_awards.py +++ b/utils/Sync/sync_awards.py @@ -3,8 +3,8 @@ from glob import glob from pymongo import MongoClient -import img import settings +from image import resize def generate_image_filename(image, size_name, ext): @@ -24,7 +24,7 @@ def generate_image_filename(image, size_name, ext): def process_file(file): sizes = settings.image_sizes - image = img.read_image(file) + image = resize.read_image(file) images_dir = '/Users/tmshv/Desktop/Hudozka Awards' public_base_url = 'https://static.shlisselburg.org/art/awards/' @@ -43,7 +43,7 @@ def process_file(file): d = os.path.join(images_dir, image_filename) image_url = os.path.join(public_base_url, image_filename) - thumb = img.optimize(image, d, quality=90) if size_name == 'original' else img.thumbnail(image, d, (width, height)) + thumb = resize.optimize(image, d, quality=90) if size_name == 'original' else resize.thumbnail(image, d, (width, height)) width, height = thumb.size award['thumbs'][size_name] = { diff --git a/utils/Sync/sync_gallery.py b/utils/Sync/sync_gallery.py index 7512f88a..fdb449ab 100644 --- a/utils/Sync/sync_gallery.py +++ b/utils/Sync/sync_gallery.py @@ -1,12 +1,13 @@ -from functools import reduce -from glob import glob import os import re +from functools import reduce +from glob import glob + from pymongo import MongoClient -import img as img_util -from read_gallery_1 import GalleryReader import settings +from image import resize as img_util +from read_gallery_1 import GalleryReader __author__ = 'Roman Timashev'