import os from urllib.request import urlretrieve from shutil import copyfile from django.core.management import BaseCommand from django.utils import translation from member.models import Solution from tournament.models import Tournament class Command(BaseCommand): PROBLEMS = [ 'Création de puzzles', 'Départ en vacances', 'Un festin stratégique', 'Sauver les meubles', 'Prêt à décoller !', 'Ils nous espionnent !', 'De joyeux bûcherons', 'Robots auto-réplicateurs', ] 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'] teams_dir = d + '/Par équipe' os.makedirs(teams_dir, exist_ok=True) translation.activate(options['language']) copied = 0 for tournament in Tournament.objects.all(): os.mkdir(teams_dir + '/' + tournament.name) for team in tournament.teams.filter(validation_status='2valid'): os.mkdir(teams_dir + '/' + 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, teams_dir + '/' + tournament.name + '/' + str(sol.team) + '/' + str(sol) + '.pdf') copied += 1 self.stdout.write(self.style.SUCCESS("Successfully copied {copied} solutions!".format(copied=copied))) os.mkdir(d + '/Par problème') for pb in range(1, 9): sols = Solution.objects.filter(problem=pb).all() pbdir = d + '/Par problème/Problème n°{number} — {problem}'.format(number=pb, problem=self.PROBLEMS[pb - 1]) os.mkdir(pbdir) for sol in sols: os.symlink('../../Par équipe/' + sol.tournament.name + '/' + str(sol.team) + '/' + str(sol) + '.pdf', pbdir + '/' + str(sol) + '.pdf') self.stdout.write(self.style.SUCCESS("Symlinks by problem created!")) urlretrieve('https://tfjm.org/wp-content/uploads/2020/01/Problemes2020_23_01_v1_1.pdf', d + '/Énoncés.pdf') self.stdout.write(self.style.SUCCESS("Questions retrieved!"))