#!/usr/bin/env python3 import argparse import mo.db as db import mo.users 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 = mo.users.user_by_email(args.email) elif args.uid: user = mo.users.user_by_uid(args.uid) 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, user.user_id, { 'action': 'new-role', 'role': db.row2dict(ur), }) session.commit()