Skip to content
Snippets Groups Projects

Základ práce s uživateli

Merged Jiří Setnička requested to merge jirka/users into master
2 unresolved threads
Files
10
+ 18
37
#!/usr/bin/env python3
import argparse
import re
import sys
import mo.db as db
import mo.util
from mo.util import die
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-id', type=int, help='omezení role na místo s daným ID')
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('--round', type=str, metavar='YY-R', help='omezení role na dané kolo')
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()
session = db.get_session()
@@ -29,58 +29,39 @@ else:
parser.error('Je nutné vybrat uživatele pomocí --email nebo --uid')
if not user:
print("Tento uživatel neexistuje", file=sys.stderr)
sys.exit(1)
die("Tento uživatel neexistuje")
if user.is_admin:
print("Tento uživatel je admin, nemá smysl přidělovat mu další práva", file=sys.stderr)
sys.exit(1)
die("Tento uživatel je admin, nemá smysl přidělovat mu další práva")
if not user.is_org:
print("Tento uživatel není organizátor", file=sys.stderr)
sys.exit(1)
die("Tento uživatel není organizátor")
role = getattr(db.RoleType, args.role, None)
if role is None:
print("Tato role neexistuje", file=sys.stderr)
sys.exit(1)
die("Tato role neexistuje")
for_round = None
if args.round:
m = re.fullmatch(r'(\d+)-(\d+)', args.round)
if not m:
parser.error('Chybná syntaxe --round')
if not args.cat:
parser.error('--round vyžaduje zadání kategorie')
round = session.query(db.Round).filter_by(year=int(m[1]), category=args.cat, level=int(m[2])).first()
if not round:
print("Toto kolo neexistuje", file=sys.stderr)
sys.exit(1)
for_round = round.round_id
if args.place_id:
for_place = args.place_id
if args.place:
for_place = db.get_place_by_code(args.place)
if for_place is None:
die("Toto místo neexistuje")
else:
place = session.query(db.Place).filter_by(level=1).first()
assert place
for_place = place.place_id
for_place = db.get_root_place()
assert for_place is not None
ur = db.UserRole(
user_id=user.user_id,
place_id=for_place,
place=for_place,
role=role,
category=args.cat,
round_id=for_round,
year=args.year,
seq=args.seq,
)
session.add(ur)
session.flush()
mo.util.log(db.LogType.user_role, ur.user_role_id, {
'action': 'assigned',
'user_id': ur.user_id,
'place_id': ur.place_id,
'role': role.name,
'category': ur.category,
'round_id': ur.round_id,
'new': db.row2dict(ur),
})
session.commit()
Loading