diff --git a/bin/export-pion b/bin/export-pion new file mode 100755 index 0000000000000000000000000000000000000000..0947950c42b7949611b6624f57ad451ea6c17594 --- /dev/null +++ b/bin/export-pion @@ -0,0 +1,54 @@ +#!/usr/bin/env python3 +# Účast ve všech soutěžích ročníku (anonymně) + +from dataclasses import dataclass +from sqlalchemy.orm import joinedload +import sys + +import mo.csv +import mo.db as db + +sess = db.get_session() + +res = (sess.query(db.Participant, db.Participation) + .select_from(db.Participant) + .join(db.Participation, db.Participation.user_id == db.Participant.user_id) + .options(joinedload(db.Participant.user)) + .options(joinedload(db.Participant.school_place).joinedload(db.Place.parent_place).joinedload(db.Place.parent_place).joinedload(db.Place.parent_place)) + .options(joinedload(db.Participation.place)) + .options(joinedload(db.Participation.contest).joinedload(db.Contest.place)) + .options(joinedload(db.Participation.contest).joinedload(db.Contest.round)) + .all()) + + +@dataclass +class Row: + rocnik: str = "" + kategorie: str = "" + kolo: str = "" + misto: str = "" + kod_mista: str = "" + kod_ucastnika: str = "" + nazev_skoly: str = "" + kod_skoly: str = "" + kraj_skoly: str = "" + + +output = [] +for pant, pion in res: + if pion.contest.round.is_subround(): + continue + output.append(Row( + rocnik=str(pion.contest.round.year), + kategorie=pion.contest.round.category, + kolo=str(pion.contest.round.level), + misto=pion.contest.place.name, + kod_mista=str(pion.contest.place.place_id), + kod_ucastnika=str(pion.user_id), + nazev_skoly=pant.school_place.name, + kod_skoly=str(pant.school), + kraj_skoly=pant.school_place.parent_place.parent_place.parent_place.name, + )) + +output.sort(key=lambda o: (o.rocnik, o.kategorie, o.kolo, o.kod_mista, o.kod_ucastnika)) +mo.csv.write(sys.stdout, mo.csv.FileFormat.en_csv, Row, output)