mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 10:51:09 -05:00
127 lines
5.4 KiB
Python
127 lines
5.4 KiB
Python
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")
|