Select Git revision
delete-submits
-
Martin Mareš authoredMartin Mareš authored
delete-submits 1.57 KiB
#!/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()