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, timeout=60) 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, timeout=60) 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')