From e2b6d91e22bc4926b21ed7edd2dd407a6b613008 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Tue, 30 Mar 2021 17:29:42 +0200 Subject: [PATCH] =?UTF-8?q?merge-users=20si=20um=C3=AD=20aspo=C5=88=20?= =?UTF-8?q?=C4=8D=C3=A1ste=C4=8Dn=C4=9B=20poradit=20s=20testovac=C3=AD=20s?= =?UTF-8?q?out=C4=9B=C5=BE=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/merge-users | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/bin/merge-users b/bin/merge-users index 53926811..6a06e5bd 100755 --- a/bin/merge-users +++ b/bin/merge-users @@ -1,6 +1,7 @@ #!/usr/bin/env python3 import argparse +from sqlalchemy import and_ import mo.db as db import mo.users @@ -33,10 +34,31 @@ print(f"Slučuji UID {suid} do UID {duid}") sess = db.get_session() conn = sess.connection() +test_round = sess.query(db.Round).filter_by(category='T').one_or_none() +if test_round is not None: + test_submits = (sess + .query(db.Solution) + .join(db.Task) + .filter(db.Solution.user_id == suid) + .filter(db.Task.round == test_round) + .filter(db.Round.category == 'T') + .all()) + if test_submits: + mo.util.die("Zdrojový účastník něco odevzdal v testovací soutěži, nutno vyřešit ručně") + test_contest = sess.query(db.Contest).filter_by(round=test_round).one_or_none() + test_contest_id = test_contest.contest_id if test_contest is not None else None +else: + test_contest = None + test_contest_id = None + +sess.flush() + conn.execute(db.Log.__table__.update().where(db.Log.changed_by == suid).values(changed_by=duid)) conn.execute(db.Participant.__table__.delete().where(db.Participant.user_id == suid)) +conn.execute(db.Participation.__table__.delete().where(and_(db.Participation.user_id == suid, db.Participation.contest_id == test_contest_id))) + conn.execute(db.Participation.__table__.update().where(db.Participation.user_id == suid).values(user_id=duid)) conn.execute(db.UserRole.__table__.update().where(db.UserRole.user_id == suid).values(user_id=duid)) -- GitLab