import xml.etree.ElementTree as ET from django.core.management.base import BaseCommand, CommandError from dateutil import parser from games.models import Developer, Game, GameSystem, Genre, Publisher def export_gamelist_file_to_path_for_system(file_path, game_system): exported_games = [] root = ET.Element("gameList") tree = ET.ElementTree(root) tree.write("filename.xml") games = Game.objects.filter(game_system=game_system) for game in games: game_node = ET.SubElement(root, "game") genre_str = ", ".join(game.genre.all().values_list("name", flat=True)) release_date_str = "" if game.release_date: release_date_str = game.release_date.strftime("%Y%m%dT00000") ET.SubElement(game_node, "path").text = ( game.rom_file.path if game.rom_file else "" ) ET.SubElement(game_node, "name").text = game.name ET.SubElement(game_node, "thumbnail").text = "" ET.SubElement(game_node, "image").text = ( game.screenshot.path if game.screenshot else "" ) ET.SubElement(game_node, "marquee").text = ( game.marquee.path if game.marquee else "" ) ET.SubElement(game_node, "video").text = game.video.path if game.video else "" ET.SubElement(game_node, "rating").text = str(game.rating) ET.SubElement(game_node, "desc").text = game.description ET.SubElement(game_node, "releasedate").text = release_date_str ET.SubElement(game_node, "developer").text = str(game.developer) ET.SubElement(game_node, "publisher").text = str(game.publisher) ET.SubElement(game_node, "genre").text = genre_str ET.SubElement(game_node, "players").text = str(game.players) if game.kid_game: ET.SubElement(game_node, "kidgame").text = "true" exported_games.append(game) tree = ET.ElementTree(root) tree.write(file_path, xml_declaration=True, encoding="utf-8") return exported_games class Command(BaseCommand): help = "Export all games found to a given gamelist XML file" def add_arguments(self, parser): parser.add_argument("file_path", nargs="+", type=str) parser.add_argument("system", nargs="+", type=str) def handle(self, *args, **options): game_system = GameSystem.objects.get(retropie_slug=options["system"][0]) games = export_gamelist_file_to_path_for_system( options["file_path"][0], game_system, ) self.stdout.write(self.style.SUCCESS(f"Successfully exported {len(games)}"))