Select Git revision
export-pion
-
Martin Mareš authoredMartin Mareš authored
export-pion 1.74 KiB
#!/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)