#!/usr/bin/env python3 import argparse import mo.config as config import mo.db as db from mo.util import init_standalone, die, log parser = argparse.ArgumentParser(description='Smaže všechny submity uživatele v aktuálním ročníku') parser.add_argument('--uid', type=int, required=True, help='user_id') parser.add_argument('-n', '--dry-run', default=False, action='store_true', help='mazání jenom simuluje') args = parser.parse_args() action = "Smažu" if args.dry_run else "Mažu" init_standalone() sess = db.get_session() user = sess.query(db.User).get(args.uid) if user is None: die(f'Uživatel s UID {args.uid} neexistuje') print(f'{action} odevzdaná řešení uživatele {user.full_name()} <{user.email}>') task_subq = (sess.query(db.Task.task_id) .join(db.Round) .filter(db.Round.year == config.CURRENT_YEAR)) sols = (sess.query(db.Solution) .filter_by(user=user) .filter(db.Solution.task_id.in_(task_subq)) .all()) for sol in sols: print(f'{action} řešení úlohy #{sol.task_id} {sol.task.code} ({sol.task.name})') sess.delete(sol) papers = (sess.query(db.Paper) .filter_by(for_user_obj=user) .filter(db.Paper.for_task.in_(task_subq)) .all()) for paper in papers: print(f'{action} papír #{paper.paper_id} (úloha #{paper.for_task}, odevzdáno {paper.uploaded_at})') sess.delete(paper) log( type=db.LogType.participant, what=user.user_id, details={ 'action': 'delete-submits', 'reason': 'script', }, ) if not args.dry_run: sess.commit()