Skip to content
Snippets Groups Projects

Publikace výsledkovky na web MO

Merged Jiří Kalvoda requested to merge jk/vysledkovka into devel
Compare and Show latest version
7 files
+ 33
33
Compare changes
  • Side-by-side
  • Inline

Files

+ 15
21
@@ -17,11 +17,11 @@ from mo.util_format import format_decimal
#
# Job snapshot_score: Vytvoří kopii aktuální výsledkovy (TODO: a pdf k ní)
# Job snapshot_score: Vytvoří kopii aktuální výsledkovky (TODO: a pdf k ní)
#
# Vstupní JSON:
# { 'contest_id': int,
# 'snapshot_note': snapshot_note
# 'snapshot_note': komentář k vzniklé verzi výsledkovky
# }
#
# Výstupní JSON:
@@ -32,7 +32,7 @@ from mo.util_format import format_decimal
def schedule_snapshot_score(contest: db.Contest, for_user: db.User, snapshot_note: str) -> None:
the_job = TheJob()
job = the_job.create(db.JobType.snapshot_score, for_user)
job.description = 'Zamrazení aktuálního stavu výsledkové listiny'
job.description = 'Zmrazení aktuálního stavu výsledkové listiny'
job.in_json = {"contest_id": contest.contest_id, "snapshot_note": snapshot_note}
the_job.submit()
@@ -46,7 +46,7 @@ class OrderKeyEncoder(json.JSONEncoder):
return super().encode(o)
def make_snapshot_score_pdf(the_job: TheJob, score: db.ScoreTable):
def make_snapshot_score_pdf(the_job: TheJob, score: db.ScoreTable) -> str:
job = the_job.job
contest = score.contest
round = contest.round
@@ -84,7 +84,7 @@ def handle_snapshot_score(the_job: TheJob):
sess = db.get_session()
ct_id: int = job.in_json["contest_id"] # type: ignore
contest: db.Contest = sess.query(db.Contest).get(ct_id) # type: ignore
contest: db.Contest = mo.util.assert_not_none(sess.query(db.Contest).get(ct_id))
round = contest.round
score = Score(round.master, contest)
tasks = score.get_tasks()
@@ -128,7 +128,6 @@ def handle_snapshot_score(the_job: TheJob):
pdf_file = make_snapshot_score_pdf(the_job, score)
score_table = db.ScoreTable(
contest_id=ct_id,
user=job.user,
@@ -151,12 +150,13 @@ def handle_snapshot_score(the_job: TheJob):
)
sess.commit()
job.result = 'Zamrazení výsledkové listiny: Hotovo'
job.result = 'Zmrazení výsledkové listiny: Hotovo'
#
# Job export_score_to_mo_web: Exportuje výsledkovou listinu na stránky matematické olympiády
#
# Běží pod systémovým uživatelem (například proto, aby nebylo možné job smazat před tím, než začne běžet)
# Běží pod systémovým uživatelem. (Například proto, aby nebylo možné job smazat před tím, než začne běžet.)
#
# Vstupní JSON:
# { 'scoretable_id': int,
@@ -170,7 +170,7 @@ def handle_snapshot_score(the_job: TheJob):
def schedule_export_score_to_mo_web(score_table: db.ScoreTable) -> None:
the_job = TheJob()
job = the_job.create(db.JobType.export_score_to_mo_web, db.get_system_user())
job.description = 'Publikování výsledkové listiny na web MO'
job.description = 'Publikování výsledkové listiny na webu MO'
job.in_json = {"scoretable_id": score_table.scoretable_id}
the_job.submit()
@@ -180,18 +180,14 @@ def handle_export_score_to_mo_web(the_job: TheJob):
API_ENDPOINT_JSON = "/Redakce/Api/ScoreboardImporterApi/RawData"
API_ENDPOINT_PDF = "/Redakce/Api/ScoreboardImporterApi/PdfData"
job = the_job.job
assert job.in_json is not None
job = mo.util.assert_not_none(the_job.job)
sess = db.get_session()
scoretable_id: int = job.in_json["scoretable_id"] # type: ignore
score_table: db.ScoreTable = sess.query(db.ScoreTable).get(scoretable_id) # type: ignore
contest: db.Contest = sess.query(db.Contest).get(score_table.contest_id) # type: ignore
score_table: db.ScoreTable = mo.util.assert_not_none(sess.query(db.ScoreTable).get(scoretable_id))
contest: db.Contest = mo.util.assert_not_none(sess.query(db.Contest).get(score_table.contest_id))
round = contest.round
print(score_table.tasks)
print(score_table.rows)
json_tasks = [{
"code": t['code'] if type(t) == dict else t[0],
"name": t.get("name", None) if type(t) == dict else t[1],
@@ -209,8 +205,6 @@ def handle_export_score_to_mo_web(the_job: TheJob):
'status': "winner" if c['winner'] else "successful" if c['successful'] else None,
} for c in score_table.rows]
print(score_table.score_metadata)
def noneAs(x, default):
return x if x is not None else default
@@ -237,7 +231,7 @@ def handle_export_score_to_mo_web(the_job: TheJob):
reply = requests.post(url=config.MO_WEB_SERVER + API_ENDPOINT_JSON + params_str, json=json)
if reply.status_code != 200:
err_text = f"Export výsledkovky na web MO: Server odpověděl {reply.status_code}: {reply.text}"
err_text = f"Export výsledkovky na webu MO: Server odpověděl {reply.status_code}: {reply.text}"
mo.util.log(
type=db.LogType.contest,
what=contest.contest_id,
@@ -259,7 +253,7 @@ def handle_export_score_to_mo_web(the_job: TheJob):
reply = requests.post(url=config.MO_WEB_SERVER + API_ENDPOINT_PDF + params_str, data=file, headers=headers)
if reply.status_code != 200:
err_text = f"Export výsledkovky na web MO: Server odpověděl {reply.status_code}: {reply.text}"
err_text = f"Export výsledkovky na webu MO: Server odpověděl {reply.status_code}: {reply.text}"
mo.util.log(
type=db.LogType.contest,
what=contest.contest_id,
@@ -283,4 +277,4 @@ def handle_export_score_to_mo_web(the_job: TheJob):
},
)
sess.commit()
job.result = 'Publikování výsledkové listiny na web MO: Hotovo'
job.result = 'Publikování výsledkové listiny na webu MO: Hotovo'
Loading