From 45014c191db7033b5530450fb863f5a0bfff85ba Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Setni=C4=8Dka?= <setnicka@seznam.cz>
Date: Sat, 9 Jan 2021 18:37:09 +0100
Subject: [PATCH] =?UTF-8?q?Zaveden=C3=AD=20glob=C3=A1ln=C3=ADho=20mo.now?=
 =?UTF-8?q?=20pro=20ke=C5=A1ov=C3=A1n=C3=AD=20=C4=8Dasu?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Referenční čas nastavovaný v initu requestu (web) nebo při volání skriptu.
---
 mo/__init__.py                          |  5 +++++
 mo/web/__init__.py                      | 11 +++--------
 mo/web/templates/user_contest_task.html |  2 +-
 mo/web/user.py                          |  7 +++----
 4 files changed, 12 insertions(+), 13 deletions(-)

diff --git a/mo/__init__.py b/mo/__init__.py
index d29dbadd..4ee7974b 100644
--- a/mo/__init__.py
+++ b/mo/__init__.py
@@ -1,4 +1,9 @@
 # Top-level module
 
+import datetime
+
 # Aktuální ročník
 current_year = 70
+
+# Referenční čas nastavovaný v initu requestu (web) nebo při volání skriptu
+now: datetime.datetime
diff --git a/mo/web/__init__.py b/mo/web/__init__.py
index 31d637f4..df78cc1e 100644
--- a/mo/web/__init__.py
+++ b/mo/web/__init__.py
@@ -9,6 +9,7 @@ import logging
 import os
 import werkzeug.exceptions
 
+import mo
 import mo.config as config
 import mo.db as db
 import mo.users
@@ -75,6 +76,8 @@ def init_request():
     else:
         user = None
     g.user = user
+    mo.now = datetime.datetime.now(tz=dateutil.tz.UTC)
+    g.now = mo.now  # for templates
     mo.util.current_log_user = user
 
     # K některým podstromům je nutné mít speciální oprávnění
@@ -93,14 +96,6 @@ def init_request():
 app.before_request(init_request)
 
 
-# Kešování aktuálního času
-
-def get_request_time() -> datetime.datetime:
-    if not hasattr(g, 'now'):
-        g.now = datetime.datetime.now(tz=dateutil.tz.UTC)
-    return g.now
-
-
 # Většina webu je v samostatných modulech
 import mo.web.auth
 import mo.web.menu
diff --git a/mo/web/templates/user_contest_task.html b/mo/web/templates/user_contest_task.html
index f648dd4a..819f7a11 100644
--- a/mo/web/templates/user_contest_task.html
+++ b/mo/web/templates/user_contest_task.html
@@ -9,7 +9,7 @@
 
 <h3>Odevzdat řešení</h3>
 
-{% if round.ct_submit_end != None and when > round.ct_submit_end %}
+{% if round.ct_submit_end != None and g.now > round.ct_submit_end %}
 <p class="alert alert-danger">Pozor, odevzdáváte po termínu. Vaše řešení nemusí být hodnoceno.
 Doporučujeme využít políčko pro komentář a vysvětlit situaci.
 {% endif %}
diff --git a/mo/web/user.py b/mo/web/user.py
index 001284d1..681276c4 100644
--- a/mo/web/user.py
+++ b/mo/web/user.py
@@ -10,12 +10,13 @@ import werkzeug.exceptions
 import wtforms
 import wtforms.validators as validators
 
+import mo
 import mo.config as config
 import mo.db as db
 import mo.submit
 import mo.util
 from mo.util import logger
-from mo.web import app, get_request_time
+from mo.web import app
 import mo.web.util
 
 
@@ -36,7 +37,6 @@ def user_index():
     return render_template(
         'user_index.html',
         pions=pions,
-        when=get_request_time(),
         db=db,  # kvůli hodnotám enumů
     )
 
@@ -83,7 +83,7 @@ def task_statement_available(contest: db.Contest) -> bool:
     return (round.state == db.RoundState.running
             and round.tasks_file is not None
             and round.ct_tasks_start is not None
-            and get_request_time() >= round.ct_tasks_start)
+            and mo.now >= round.ct_tasks_start)
 
 
 @app.route('/user/contest/<int:id>/')
@@ -181,7 +181,6 @@ def user_contest_task(contest_id: int, task_id: int):
         contest=contest,
         task=task,
         papers=papers,
-        when=get_request_time(),
         form=form,
     )
 
-- 
GitLab