From 8faa7f83e78716c5db6492370c27a93d8a01507e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Pracha=C5=99?= <jan.prachar@gmail.com> Date: Wed, 21 Apr 2021 01:50:14 +0200 Subject: [PATCH] import: add run_on_row() --- mo/imports.py | 12 +++++++++++- mo/web/org_contest.py | 21 +++++++-------------- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/mo/imports.py b/mo/imports.py index f0eedb2c..efbbed42 100644 --- a/mo/imports.py +++ b/mo/imports.py @@ -440,6 +440,16 @@ class Import: self.notify_users() return True + def run_on_row(self, row: mo.csv.Row) -> bool: + self.import_row(row) + if len(self.errors) > 0: + db.get_session().rollback() + return False + + db.get_session().commit() + self.notify_users() + return True + @dataclass class ContestImportRow(mo.csv.Row): @@ -746,7 +756,7 @@ class PointsImport(Import): def create_import(user: db.User, type: ImportType, - fmt: FileFormat, + fmt: Optional[FileFormat] = None, round: Optional[db.Round] = None, contest: Optional[db.Contest] = None, task: Optional[db.Task] = None, diff --git a/mo/web/org_contest.py b/mo/web/org_contest.py index d43ed413..76ae59eb 100644 --- a/mo/web/org_contest.py +++ b/mo/web/org_contest.py @@ -17,7 +17,7 @@ import mo from mo.csv import FileFormat import mo.config as config import mo.db as db -from mo.imports import ImportType, ContestImport, ContestImportRow, create_import +from mo.imports import ImportType, ContestImportRow, create_import import mo.jobs.submit from mo.rights import Right, ContestRights import mo.util @@ -249,7 +249,7 @@ class ParticipantAddForm(FlaskForm): save = wtforms.SubmitField("Přidat") def get_school_code(self) -> str: - return self.school_code.data if self.school_code else '#'+self.school.data + return self.school_code.data if self.school_code else '#'+str(self.school.data) def set_descriptions(self, contest: db.Contest): self.school_code.description = 'Kód školy najdete v <a href="' + url_for('org_place', id=contest.place.place_id)+ '">katalogu míst</a>.' @@ -515,21 +515,14 @@ def org_contest_add_user(id: int, site_id: Optional[int] = None): row.rok_naroz = form.rok_naroz.data if form.participation_place: row.kod_mista = form.participation_place.data + elif site: + row.kod_mista = '#'+str(site.place_id) - imp = ContestImport() - imp.user = g.user - imp.round = contest.round - imp.contest = master_contest - imp.gatekeeper = mo.rights.Gatekeeper(g.user) - imp.setup() - imp.import_row(row) - errs = imp.errors - if len(errs) == 0: - db.get_session().commit() - imp.notify_users() + imp = create_import(user=g.user, type=ImportType.participants, round=master_contest.round, contest=master_contest) + if imp.run_on_row(row): return redirect(url_for('org_contest_list', id=id, site_id=site_id)) else: - db.get_session().rollback() + errs = imp.errors return render_template( 'org_contest_add_user.html', -- GitLab