gault-millau/apps/news/management/commands/news_optimize_images.py
2020-01-14 17:17:55 +03:00

39 lines
1.3 KiB
Python

# coding=utf-8
from django.core.management.base import BaseCommand
from django.conf import settings
from utils.methods import get_url_images_in_text
from news.models import News
from sorl.thumbnail import get_thumbnail
class Command(BaseCommand):
SORL_THUMBNAIL_ALIASES = 'news_image'
def add_arguments(self, parser):
parser.add_argument(
'-a',
'--alias',
default=self.SORL_THUMBNAIL_ALIASES,
help='Ключ для параметров оптимизации',
)
def optimize(self, text, alias):
for image in get_url_images_in_text(text):
optimized_image = get_thumbnail(
file_=image,
**settings.SORL_THUMBNAIL_ALIASES[alias]
).url
text = text.replace(image, optimized_image)
self.stdout.write(self.style.SUCCESS(f'Optimized {image} -> {optimized_image}...\n'))
return text
def handle(self, *args, **options):
for news in News.objects.all():
if not isinstance(news.description, dict):
continue
news.description = {
locale: self.optimize(text, options['alias'])
for locale, text in news.description.items()
}
news.save()