Files
thrillwiki_django_no_react/media/management/commands/download_photos.py
pacnpal 66ed4347a9 Refactor test utilities and enhance ASGI settings
- Cleaned up and standardized assertions in ApiTestMixin for API response validation.
- Updated ASGI settings to use os.environ for setting the DJANGO_SETTINGS_MODULE.
- Removed unused imports and improved formatting in settings.py.
- Refactored URL patterns in urls.py for better readability and organization.
- Enhanced view functions in views.py for consistency and clarity.
- Added .flake8 configuration for linting and style enforcement.
- Introduced type stubs for django-environ to improve type checking with Pylance.
2025-08-20 19:51:59 -04:00

140 lines
6.0 KiB
Python

import requests
from django.core.management.base import BaseCommand
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")