Skip to content
Snippets Groups Projects
Commit 0d9bd1fb authored by Jiří Setnička's avatar Jiří Setnička
Browse files

DB: Pomocné funkce pro kontrolu stavu a vypisování db.Round

Spousta z nich operuje s časem. Aby byl referenční čas pro celý request
stejný (a protože mo.db by neměla záviset na Flasku, kde by to šlo
vytáhnout z g.now), tak db.Round očekává nastavení now zvenku přes
set_now(now). Není to úplně elegantní, ale zajistí to stejný čas pro
celý request, i kdyby se zpracovával déle.
parent cc02a252
Branches
No related tags found
No related merge requests found
This commit is part of merge request !12. Comments created here will be created in the context of that merge request.
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
import datetime import datetime
from enum import Enum as PythonEnum, auto from enum import Enum as PythonEnum, auto
from mo.util_simple import human_timedelta
import re import re
from sqlalchemy import \ from sqlalchemy import \
Boolean, Column, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint, \ Boolean, Column, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint, \
...@@ -159,7 +160,7 @@ class RoundState(MOEnum): ...@@ -159,7 +160,7 @@ class RoundState(MOEnum):
round_state_names = { round_state_names = {
RoundState.preparing: 'íprava', RoundState.preparing: 'ipravuje se',
RoundState.running: 'běží', RoundState.running: 'běží',
RoundState.grading: 'opravuje se', RoundState.grading: 'opravuje se',
RoundState.closed: 'ukončeno', RoundState.closed: 'ukončeno',
...@@ -187,6 +188,23 @@ class Round(Base): ...@@ -187,6 +188,23 @@ class Round(Base):
def round_code(self): def round_code(self):
return f"{self.year}-{self.category}-{self.seq}" return f"{self.year}-{self.category}-{self.seq}"
def has_tasks(self):
return self.tasks_file
def long_state(self) -> str:
details = ""
if self.state == RoundState.preparing:
if self.ct_tasks_start and self.ct_tasks_start > mo.now:
details = f" – začne {self.ct_tasks_start:%Y-%m-%d %H:%M} ({human_timedelta(self.ct_tasks_start)})"
elif self.state == RoundState.running:
if self.ct_tasks_start and self.ct_tasks_start > mo.now:
details = f" – zadání bude zveřejněno {self.ct_tasks_start:%Y-%m-%d %H:%M} ({human_timedelta(self.ct_tasks_start)})"
elif self.ct_submit_end and self.ct_submit_end < mo.now:
details = f" – odevzdávání skončilo {self.ct_submit_end:%Y-%m-%d %H:%M} ({human_timedelta(self.ct_submit_end)})"
elif self.ct_submit_end:
details = f" – odevzdávejte do {self.ct_submit_end:%Y-%m-%d %H:%M} ({human_timedelta(self.ct_submit_end)})"
return self.state.friendly_name() + details
def task_statement_available(self) -> bool: def task_statement_available(self) -> bool:
# Zde jsme raději přepečliví... # Zde jsme raději přepečliví...
return (self.state != RoundState.preparing return (self.state != RoundState.preparing
...@@ -194,6 +212,13 @@ class Round(Base): ...@@ -194,6 +212,13 @@ class Round(Base):
and self.ct_tasks_start is not None and self.ct_tasks_start is not None
and mo.now >= self.ct_tasks_start) and mo.now >= self.ct_tasks_start)
def can_submit(self) -> bool:
  • Tady bych byl radši explicitní v tom, že se to týká možnosti účastníka submitovat. Tedy třeba ct_can_submit, když už máme ct_tasks_start.

  • Jiří Setnička @setnicka

    changed this line in version 3 of the diff

    ·

    changed this line in version 3 of the diff

    Toggle commit list
  • Author Maintainer

    Přejmenováno na ct_can_submit.

  • Please register or sign in to reply
return (
self.state == RoundState.running and (
not self.ct_tasks_start or mo.now >= self.ct_tasks_start
)
)
class User(Base): class User(Base):
__tablename__ = 'users' __tablename__ = 'users'
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment