"""Import one or more playlist for the given sound. Attach it to the provided sound. Playlists are in CSV format, where columns are separated with a '{settings.IMPORT_PLAYLIST_CSV_DELIMITER}'. Text quote is {settings.IMPORT_PLAYLIST_CSV_TEXT_QUOTE}. The order of the elements is: {settings.IMPORT_PLAYLIST_CSV_COLS} If 'minutes' or 'seconds' are given, position will be expressed as timed position, instead of position in playlist. """ import logging import os from argparse import RawTextHelpFormatter from django.core.management.base import BaseCommand from aircox.conf import settings from aircox.models import Sound from aircox.controllers.playlist_import import PlaylistImport __doc__ = __doc__.format(settings=settings) __all__ = ("Command",) logger = logging.getLogger("aircox.commands") class Command(BaseCommand): help = __doc__ def add_arguments(self, parser): parser.formatter_class = RawTextHelpFormatter parser.add_argument( "path", metavar="PATH", type=str, help="path of the input playlist to read", ) parser.add_argument( "--sound", "-s", type=str, help="generate a playlist for the sound of the given path. " "If not given, try to match a sound with the same path.", ) def handle(self, path, *args, **options): # FIXME: absolute/relative path of sounds vs given path if options.get("sound"): sound = Sound.objects.filter( file__icontains=options.get("sound") ).first() else: path_, ext = os.path.splitext(path) sound = Sound.objects.filter(path__icontains=path_).first() if not sound: logger.error( "no sound found in the database for the path " "{path}".format(path=path) ) return # FIXME: auto get sound.episode if any importer = PlaylistImport(path, sound=sound).run() for track in importer.tracks: logger.info( "track #{pos} imported: {title}, by {artist}".format( pos=track.position, title=track.title, artist=track.artist ) )