#!/usr/bin/env python3 # Přehled všech organizátorských účtů from dataclasses import dataclass from sqlalchemy.orm import joinedload import sys import mo.csv import mo.db as db sess = db.get_session() orgs = (sess.query(db.User) .filter_by(is_org=True) .options(joinedload(db.User.roles).joinedload(db.UserRole.place)) .all()) @dataclass class Row: jmeno: str email: str last_login: str role: str = "" kod_souteze: str = "" kod_mista: str = "" misto: str = "" output = [] for user in sorted(orgs, key=lambda u: u.sort_key()): def row() -> Row: return Row( jmeno=user.full_name(), email=user.email, last_login=(user.last_login_at.strftime('%Y-%m-%d') if user.last_login_at is not None else '-'), ) if user.roles: for r in sorted(user.roles, key=lambda r: (r.role, r.category or "", r.year or -1, r.seq or -1, r.place_id or -1)): o = row() o.role = r.role o.kod_souteze = f"{r.category or '*'}-{r.year or '*'}-{r.seq or '*'}" p = r.place o.kod_mista = p.get_code() o.misto = p.type_name() + " " + p.name output.append(o) else: o = row() o.role = '-' output.append(o) mo.csv.write(sys.stdout, mo.csv.FileFormat.en_csv, Row, output)