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

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

Používají globální čas z mo.now, aby vždy operovaly s referenčím časem
pro daný request.
parent a142afd7
No related branches found
No related tags found
2 merge requests!12Účastnická část webu podporuje všechny stavy kola,!9WIP: Zárodek uživatelské části webu a submitování
...@@ -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_format import time_and_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 {time_and_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 {time_and_timedelta(self.ct_tasks_start)}"
elif self.ct_submit_end and self.ct_submit_end < mo.now:
details = f" – odevzdávání skončilo {time_and_timedelta(self.ct_submit_end)}"
elif self.ct_submit_end:
details = f" – odevzdávejte do {time_and_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 ct_can_submit(self) -> bool:
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 to comment