42 lines
1.3 KiB
Python
42 lines
1.3 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 import_planning
|
|
|
|
|
|
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")
|
|
|
|
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"
|
|
)
|
|
)
|