Skip to content
Snippets Groups Projects

Účastnická část webu podporuje všechny stavy kola

Merged Jiří Setnička requested to merge jirka/user-all-states into devel
All threads resolved!
1 file
+ 26
1
Compare changes
  • Side-by-side
  • Inline
  • 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.
+ 26
1
@@ -3,6 +3,7 @@
import datetime
from enum import Enum as PythonEnum, auto
from mo.util_simple import human_timedelta
import re
from sqlalchemy import \
Boolean, Column, DateTime, ForeignKey, Integer, String, Text, UniqueConstraint, \
@@ -159,7 +160,7 @@ class RoundState(MOEnum):
round_state_names = {
RoundState.preparing: 'íprava',
RoundState.preparing: 'ipravuje se',
RoundState.running: 'běží',
RoundState.grading: 'opravuje se',
RoundState.closed: 'ukončeno',
@@ -187,6 +188,23 @@ class Round(Base):
def round_code(self):
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:
# Zde jsme raději přepečliví...
return (self.state != RoundState.preparing
@@ -194,6 +212,13 @@ class Round(Base):
and self.ct_tasks_start is not None
and mo.now >= self.ct_tasks_start)
def 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):
__tablename__ = 'users'
Loading