mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 14:11:09 -05:00
115 lines
5.5 KiB
Python
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, 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')
|