1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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)}"))
|