65 lines
2.1 KiB
Python
65 lines
2.1 KiB
Python
import json
|
|
import sys
|
|
|
|
from django.core.management.base import BaseCommand, CommandError
|
|
from django.db import transaction
|
|
|
|
from events.models import Event
|
|
from games.services.planning import (
|
|
create_missing_steam_games,
|
|
import_planning,
|
|
slot_game_names,
|
|
)
|
|
from games.tasks import refresh_steam_games_task
|
|
|
|
|
|
class Command(BaseCommand):
|
|
help = (
|
|
"Import an event planning from the legacy PolyLAN planning JSON "
|
|
"(slots missing from the file are deleted)"
|
|
)
|
|
|
|
def add_arguments(self, parser):
|
|
parser.add_argument("event_path", help="Path of the event, e.g. polylan-43")
|
|
parser.add_argument("json_file", help="Planning JSON file, '-' for stdin")
|
|
parser.add_argument(
|
|
"--no-steam",
|
|
action="store_true",
|
|
help="Don't look up unknown games on the Steam store",
|
|
)
|
|
|
|
def handle(self, *args, **options):
|
|
try:
|
|
event = Event.objects.get(path=options["event_path"])
|
|
except Event.DoesNotExist:
|
|
raise CommandError(f"No event with path {options['event_path']!r}")
|
|
|
|
if options["json_file"] == "-":
|
|
data = json.load(sys.stdin)
|
|
else:
|
|
with open(options["json_file"], encoding="utf-8") as f:
|
|
data = json.load(f)
|
|
|
|
entries = data["list"] if isinstance(data, dict) else data
|
|
with transaction.atomic():
|
|
created, updated, deleted = import_planning(event, entries)
|
|
|
|
self.stdout.write(
|
|
self.style.SUCCESS(
|
|
f"Planning of {event}: {created} created, {updated} updated, {deleted} deleted"
|
|
)
|
|
)
|
|
|
|
if options["no_steam"]:
|
|
return
|
|
|
|
games = create_missing_steam_games(event, slot_game_names(entries))
|
|
for game in games:
|
|
self.stdout.write(f"+ {game.name} (Steam app {game.steam_app_id})")
|
|
if games:
|
|
# Prices, blurb, ... for the games page
|
|
refresh_steam_games_task.enqueue(game_ids=[game.id for game in games])
|
|
self.stdout.write(
|
|
self.style.SUCCESS(f"{len(games)} game(s) found on Steam and added to {event}")
|
|
)
|