Skip to content
Snippets Groups Projects
Commit cbed27b6 authored by Martin Mareš's avatar Martin Mareš
Browse files

export-pion: Body

parent 33899392
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3 #!/usr/bin/env python3
# Účast ve všech soutěžích ročníku (anonymně) # Účast a body ve všech soutěžích ročníku (anonymně)
from collections import defaultdict
from dataclasses import dataclass from dataclasses import dataclass
from decimal import Decimal
from sqlalchemy import and_ from sqlalchemy import and_
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
import sys import sys
from typing import DefaultDict, Tuple
import mo.csv import mo.csv
import mo.db as db import mo.db as db
from mo.util import assert_not_none
from mo.util_format import format_decimal
sess = db.get_session() sess = db.get_session()
points_by_uid_roundid: DefaultDict[Tuple[int, int], Decimal] = defaultdict(Decimal)
sols = (sess.query(db.Solution)
.options(joinedload(db.Solution.task))
.all())
for sol in sols:
if sol.points is not None:
points_by_uid_roundid[sol.user_id, sol.task.round_id] += sol.points
res = (sess.query(db.Participant, db.Participation, db.Contest, db.Round) res = (sess.query(db.Participant, db.Participation, db.Contest, db.Round)
.select_from(db.Participant) .select_from(db.Participant)
.join(db.Participation, db.Participation.user_id == db.Participant.user_id) .join(db.Participation, db.Participation.user_id == db.Participant.user_id)
...@@ -24,7 +39,7 @@ res = (sess.query(db.Participant, db.Participation, db.Contest, db.Round) ...@@ -24,7 +39,7 @@ res = (sess.query(db.Participant, db.Participation, db.Contest, db.Round)
@dataclass @dataclass
class Row: class Row(mo.csv.Row):
rocnik: str = "" rocnik: str = ""
kategorie: str = "" kategorie: str = ""
kolo_seq: str = "" kolo_seq: str = ""
...@@ -41,11 +56,16 @@ class Row: ...@@ -41,11 +56,16 @@ class Row:
kraj_skoly: str = "" kraj_skoly: str = ""
nuts_skoly: str = "" nuts_skoly: str = ""
odhad_pohlavi: str = "" odhad_pohlavi: str = ""
body: str = ""
output = [] output = []
for pant, pion, ct, rnd in res: for pant, pion, ct, rnd in res:
female_guess = pant.user.last_name.endswith('á') female_guess = pant.user.last_name.endswith('á')
if (pion.user_id, rnd.round_id) in points_by_uid_roundid:
points = assert_not_none(format_decimal(points_by_uid_roundid[pion.user_id, rnd.round_id]))
else:
points = ""
output.append(Row( output.append(Row(
rocnik=str(rnd.year), rocnik=str(rnd.year),
kategorie=rnd.category, kategorie=rnd.category,
...@@ -63,6 +83,7 @@ for pant, pion, ct, rnd in res: ...@@ -63,6 +83,7 @@ for pant, pion, ct, rnd in res:
kraj_skoly=pant.school_place.parent_place.parent_place.parent_place.name, kraj_skoly=pant.school_place.parent_place.parent_place.parent_place.name,
nuts_skoly=pant.school_place.parent_place.parent_place.nuts, nuts_skoly=pant.school_place.parent_place.parent_place.nuts,
odhad_pohlavi="Ž" if female_guess else "M", odhad_pohlavi="Ž" if female_guess else "M",
body=points,
)) ))
output.sort(key=lambda o: (o.rocnik, o.kategorie, o.kolo_seq, o.id_mista, o.id_ucastnika)) output.sort(key=lambda o: (o.rocnik, o.kategorie, o.kolo_seq, o.id_mista, o.id_ucastnika))
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment