Skip to content
Snippets Groups Projects
Select Git revision
  • ac706593df8054f76aa9415c14a5e075e539d1c7
  • 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

add-role

Blame
  • add-role 1.93 KiB
    #!/usr/bin/env python3
    
    import argparse
    
    import mo.db as db
    import mo.util
    from mo.util import die, init_standalone
    
    parser = argparse.ArgumentParser(description='Přidělí uživateli roli')
    parser.add_argument('--email', type=str, help='e-mailová adresa uživatele')
    parser.add_argument('--uid', type=int, help='ID uživatele')
    parser.add_argument('--role', type=str, help='název role', required=True)
    parser.add_argument('--place', type=str, help='omezení role na místo s daným kódem')
    parser.add_argument('--cat', type=str, help='omezení role na danou kategorii')
    parser.add_argument('--year', type=int, help='omezení role na daný ročník')
    parser.add_argument('--seq', type=int, help='omezení role na dané pořadí kola')
    
    args = parser.parse_args()
    init_standalone()
    session = db.get_session()
    
    if args.email and args.uid:
        parser.error('--email a --uid nesmí být uvedeny současně')
    elif args.email:
        user = session.query(db.User).filter_by(email=args.email).first()
    elif args.uid:
        user = session.query(db.User).filter_by(user_id=args.uid).first()
    else:
        parser.error('Je nutné vybrat uživatele pomocí --email nebo --uid')
    
    if not user:
        die("Tento uživatel neexistuje")
    
    if user.is_admin:
        die("Tento uživatel je admin, nemá smysl přidělovat mu další práva")
    
    if not user.is_org:
        die("Tento uživatel není organizátor")
    
    role = getattr(db.RoleType, args.role, None)
    if role is None:
        die("Tato role neexistuje")
    
    if args.place:
        for_place = db.get_place_by_code(args.place)
        if for_place is None:
            die("Toto místo neexistuje")
    else:
        for_place = db.get_root_place()
    
    assert for_place is not None
    ur = db.UserRole(
        user_id=user.user_id,
        place=for_place,
        role=role,
        category=args.cat,
        year=args.year,
        seq=args.seq,
    )
    session.add(ur)
    session.flush()
    
    mo.util.log(db.LogType.user_role, ur.user_role_id, {
        'action': 'assigned',
        'new': db.row2dict(ur),
    })
    session.commit()