39 lines
1.3 KiB
Python
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() |