gault-millau/apps/establishment/management/commands/fill_establishment_gallery.py

42 lines
1.8 KiB
Python

from django.core.management.base import BaseCommand
from establishment.models import Establishment, EstablishmentGallery
from gallery.models import Image
import requests
from rest_framework import status
class Command(BaseCommand):
help = 'Fill establishment gallery from existing images'
def handle(self, *args, **kwargs):
count = 0
not_valid_link_counter = 0
not_valid_urls = []
cdn_prefix = 'https://1dc3f33f6d-3.optimicdn.com/gaultmillau.com/'
establishments = Establishment.objects.exclude(image_url__isnull=True) \
.exclude(preview_image_url__isnull=True)
for establishment in establishments:
image_url = establishment.image_url.rstrip()
relative_image_path = image_url[len(cdn_prefix):]
response = requests.head(image_url, allow_redirects=True)
if response.status_code != status.HTTP_200_OK:
not_valid_link_counter += 1
not_valid_urls.append(image_url)
image, image_created = Image.objects.get_or_create(
orientation=Image.HORIZONTAL,
title=f'{establishment.name} - {relative_image_path}',
image=relative_image_path)
gallery, _ = EstablishmentGallery.objects.get_or_create(establishment=establishment,
image=image,
is_main=True)
if image_created:
count += 1
self.stdout.write(self.style.WARNING(f'Created/updated {count} objects.\n'
f'Not valid link counter: {not_valid_link_counter}\n'
f'List of non valid image url: {not_valid_urls}'))