diff --git a/apps/member/management/commands/extract_solutions.py b/apps/member/management/commands/extract_solutions.py new file mode 100644 index 0000000..176a2bf --- /dev/null +++ b/apps/member/management/commands/extract_solutions.py @@ -0,0 +1,45 @@ +import os +from shutil import copyfile + +from django.core.management import BaseCommand +from django.utils import translation + +from tournament.models import Tournament + + +class Command(BaseCommand): + def add_arguments(self, parser): + parser.add_argument('dir', + type=str, + default='.', + help="Directory where solutions should be saved.") + parser.add_argument('--language', '-l', + type=str, + choices=['en', 'fr'], + default='fr', + help="Language of the title of the files.") + + def handle(self, *args, **options): + """ + Copy solutions elsewhere. + """ + d = options['dir'] + + translation.activate(options['language']) + + copied = 0 + + for tournament in Tournament.objects.all(): + os.mkdir(d + '/' + tournament.name) + for team in tournament.teams.filter(validation_status='2valid'): + os.mkdir(d + '/' + tournament.name + '/' + str(team)) + for sol in tournament.solutions: + if not os.path.isfile('media/' + sol.file.name): + self.stdout.write(self.style.WARNING(("Warning: solution '{sol}' is not found. Maybe the file" + "was deleted?").format(sol=str(sol)))) + continue + copyfile('media/' + sol.file.name, d + '/' + tournament.name + + '/' + str(sol.team) + '/' + str(sol) + '.pdf') + copied += 1 + + self.stdout.write(self.style.SUCCESS("Successfully copied {copied} solutions!".format(copied=copied)))