12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- from django.conf import settings
- from django.core.management.base import BaseCommand
- from games.utils import import_gamelist_file_to_db_for_system
- class Command(BaseCommand):
- help = "Import all games found in a given gamelist XML file"
- def add_arguments(self, parser):
- parser.add_argument("system", type=str)
- parser.add_argument(
- "--file",
- action="store_true",
- help="Import from specific file",
- )
- parser.add_argument(
- "--full-scan",
- action="store_true",
- help="Update all files, even ones we already know about",
- )
- def import_from_slug(self, slug, file_path, full_scan=False):
- results = import_gamelist_file_to_db_for_system(slug, file_path, full_scan)
- if not results:
- self.style.ERROR(
- "No games imported for {slug}, check for gamelist.xml file or re-run scraper"
- )
- return
- imported = results["imported"]
- not_imported = results["not_imported"]
- if imported:
- self.stdout.write(
- self.style.SUCCESS(
- f"Successfully imported {len(imported)} games for {slug}"
- )
- )
- if not_imported:
- self.stdout.write(
- self.style.SUCCESS(
- f"Found, but did not update {len(not_imported)} games for {slug} (use --full-scan to update)"
- )
- )
- if not imported and not not_imported:
- self.stdout.write(
- self.style.ERROR(
- "No games imported for {slug}, check for gamelist.xml file or re-run scraper"
- )
- )
- def handle(self, *args, **options):
- game_system_slug = options["system"]
- if not game_system_slug:
- self.style.ERROR(
- "Please provide a game system slug, or all to import from all systems"
- )
- return False
- if game_system_slug == "all":
- for slug in settings.GAME_SYSTEM_DEFAULTS.keys():
- self.import_from_slug(slug, options["file"], options["full_scan"])
- else:
- self.import_from_slug(
- game_system_slug, options["file"], options["full_scan"]
- )
|