import requests from django.core.management.base import BaseCommand from apps.parks.models import Park, ParkPhoto from apps.rides.models import Ride, RidePhoto import json from django.core.files.base import ContentFile class Command(BaseCommand): help = "Download photos from seed data URLs for domain-specific photo models" 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) # 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 ParkPhoto.objects.filter(park=park).delete() # Create new photo record photo = ParkPhoto( park=park, 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 RidePhoto.objects.filter(ride=ride).delete() # Create new photo record photo = RidePhoto( ride=ride, 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")