#!/usr/bin/env python3 import argparse import mo.db as db import mo.jobs.score from mo.util import die, init_standalone from sqlalchemy.orm import joinedload parser = argparse.ArgumentParser(description='Publikuje oficiální výsledkové listiny na webu MO') parser.add_argument('--year', type=int, required=True, metavar='YY', help='ročník olympiády') parser.add_argument('--cat', type=str, metavar='C', help='kategorie (nepovinná)') parser.add_argument('--seq', type=int, metavar='S', help='pořadí kola (nepovinné)') parser.add_argument('-n', '--dry-run', default=False, action='store_true', help='pouze ukáže, co by bylo provedeno') args = parser.parse_args() init_standalone() sess = db.get_session() round_query = sess.query(db.Round).filter_by(year=args.year) if args.cat is not None: round_query = round_query.filter_by(category=args.cat) if args.seq is not None: round_query = round_query.filter_by(seq=args.seq) rounds = round_query.order_by(db.Round.category, db.Round.seq, db.Round.part).all() for round in rounds: print(round.round_code(), ": ", sep="", end="") if round.is_subround(): print('Sekundární kolo') continue if not round.export_score_to_mo_web: print('Nemá povolený export') continue if round.round_type == db.RoundType.other: print('Nemá nastavený typ') continue print('OK') for contest in sess.query(db.Contest).filter_by(round=round).options(joinedload(db.Contest.place), joinedload(db.Contest.scoretable)).all(): print(f'\t{contest.place.code}: ', end="") if contest.scoretable is None: print('Nemá výsledkovku') elif args.dry_run: print('Publikoval bych') else: print('Publikuji') mo.jobs.score.schedule_export_score_to_mo_web(contest, contest.scoretable) if not args.dry_run: sess.commit()