Skip to content
Snippets Groups Projects
Select Git revision
  • 0250d10c7950a4cf5a536d47ffb5537f58cadc2a
  • devel default
  • master
  • fo
  • jirka/typing
  • fo-base
  • mj/submit-images
  • jk/issue-96
  • jk/issue-196
  • honza/add-contestant
  • honza/mr7
  • honza/mrf
  • honza/mrd
  • honza/mra
  • honza/mr6
  • honza/submit-images
  • honza/kolo-vs-soutez
  • jh-stress-test-wip
  • shorten-schools
19 results

delete-submits

Blame
  • 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()