You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

51 lines
2.1 KiB

import json
from django.core.management.base import BaseCommand
from lyrics.models import Song, Album, Artista
class Command(BaseCommand):
help = "Importa canciones desde un archivo JSON"
def add_arguments(self, parser):
parser.add_argument('archivo_json', type=str, help="Ruta del archivo JSON")
def handle(self, *args, **kwargs):
archivo_json = kwargs['archivo_json']
try:
with open(archivo_json, 'r', encoding='utf-8') as file:
datos = json.load(file)
self.stdout.write(self.style.WARNING(f"\nSe encontraron {len(datos)} canciones en el archivo '{archivo_json}'."))
confirmar = input("¿Deseas continuar con la importación? (s/n): ").strip().lower()
if confirmar != 's':
self.stdout.write(self.style.ERROR("Importación cancelada."))
return
canciones_creados = 0
for cancion_data in datos:
try:
album = Album.objects.get(name=cancion_data["album_nombre"])
artista = Artista.objects.get(nombre=cancion_data["artista_nombre"])
creado = Song.objects.create(
album=album,
artist=artista,
title=cancion_data['title'],
year=cancion_data['year'],
lyrics=cancion_data['lyrics'],
pista=cancion_data['pista'],
)
if creado:
canciones_creados += 1
except Album.DoesNotExist:
self.stderr.write(self.style.ERROR(f"Album '{cancion_data['album']}' no encontrado."))
self.stdout.write(self.style.SUCCESS(f'Se importaron {canciones_creados} canciones correctamente.'))
except FileNotFoundError:
self.stderr.write(self.style.ERROR(f"El archivo {archivo_json} no se encontró."))
except json.JSONDecodeError:
self.stderr.write(self.style.ERROR("Error al leer el archivo JSON. Asegúrate de que el formato sea correcto."))