Files
thrillwiki_django_no_react/media/management/commands/download_photos.py
2024-11-01 01:27:11 +00:00

115 lines
5.5 KiB
Python

import os
import requests
from django.core.management.base import BaseCommand
from django.core.files import File
from django.core.files.temp import NamedTemporaryFile
from media.models import Photo
from parks.models import Park
from rides.models import Ride
from django.contrib.contenttypes.models import ContentType
import json
from django.core.files.base import ContentFile
class Command(BaseCommand):
help = 'Download photos from seed data URLs'
def handle(self, *args, **kwargs):
self.stdout.write('Downloading photos from seed data...')
# Read seed data
with open('parks/management/commands/seed_data.json', 'r') as f:
seed_data = json.load(f)
park_content_type = ContentType.objects.get_for_model(Park)
ride_content_type = ContentType.objects.get_for_model(Ride)
# Process parks and their photos
for park_data in seed_data['parks']:
try:
park = Park.objects.get(name=park_data['name'])
# Download park photos
for idx, photo_url in enumerate(park_data['photos'], 1):
try:
# Download image
self.stdout.write(f'Downloading from URL: {photo_url}')
response = requests.get(photo_url)
if response.status_code == 200:
# Delete any existing photos for this park
Photo.objects.filter(
content_type=park_content_type,
object_id=park.id
).delete()
# Create new photo record
photo = Photo(
content_type=park_content_type,
object_id=park.id,
is_primary=idx == 1
)
# Save image content
photo.image.save(
f"{park.slug}_{idx}.jpg",
ContentFile(response.content),
save=False
)
photo.save()
self.stdout.write(f'Downloaded photo for {park.name}: {photo.image.name}')
self.stdout.write(f'Database record created with ID: {photo.id}')
else:
self.stdout.write(f'Error downloading image. Status code: {response.status_code}')
except Exception as e:
self.stdout.write(f'Error downloading park photo: {str(e)}')
# Process rides and their photos
for ride_data in park_data['rides']:
try:
ride = Ride.objects.get(name=ride_data['name'], park=park)
# Download ride photos
for idx, photo_url in enumerate(ride_data['photos'], 1):
try:
# Download image
self.stdout.write(f'Downloading from URL: {photo_url}')
response = requests.get(photo_url)
if response.status_code == 200:
# Delete any existing photos for this ride
Photo.objects.filter(
content_type=ride_content_type,
object_id=ride.id
).delete()
# Create new photo record
photo = Photo(
content_type=ride_content_type,
object_id=ride.id,
is_primary=idx == 1
)
# Save image content
photo.image.save(
f"{ride.slug}_{idx}.jpg",
ContentFile(response.content),
save=False
)
photo.save()
self.stdout.write(f'Downloaded photo for {ride.name}: {photo.image.name}')
self.stdout.write(f'Database record created with ID: {photo.id}')
else:
self.stdout.write(f'Error downloading image. Status code: {response.status_code}')
except Exception as e:
self.stdout.write(f'Error downloading ride photo: {str(e)}')
except Ride.DoesNotExist:
self.stdout.write(f'Ride not found: {ride_data["name"]}')
except Park.DoesNotExist:
self.stdout.write(f'Park not found: {park_data["name"]}')
self.stdout.write('Finished downloading photos')