From ff468bb590401f9cc3f561682fa1eaaf1a3aeaf1 Mon Sep 17 00:00:00 2001
From: Martin Mares <mj@ucw.cz>
Date: Sun, 10 Jan 2021 20:20:09 +0100
Subject: [PATCH] =?UTF-8?q?Inicializa=C4=8Dn=C3=AD=20funkce=20pro=20samost?=
 =?UTF-8?q?atn=C3=A9=20programy=20a=20funkce=20get=5Fnow()?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Od nynějška je vždy inicializováno mo.now a je nastavené české locale.
---
 bin/add-role        |  4 ++--
 bin/create-contests |  4 ++--
 bin/create-round    |  2 +-
 bin/create-user     |  2 +-
 bin/init-regions    |  2 +-
 bin/init-schools    |  2 +-
 mo/util.py          | 14 ++++++++++++--
 mo/web/__init__.py  |  3 ++-
 8 files changed, 22 insertions(+), 11 deletions(-)

diff --git a/bin/add-role b/bin/add-role
index 3d00b0bd..5c6d79c2 100755
--- a/bin/add-role
+++ b/bin/add-role
@@ -4,7 +4,7 @@ import argparse
 
 import mo.db as db
 import mo.util
-from mo.util import die, default_logging
+from mo.util import die, init_standalone
 
 parser = argparse.ArgumentParser(description='Přidělí uživateli roli')
 parser.add_argument('--email', type=str, help='e-mailová adresa uživatele')
@@ -16,7 +16,7 @@ parser.add_argument('--year', type=int, help='omezení role na daný ročník')
 parser.add_argument('--seq', type=int, help='omezení role na dané pořadí kola')
 
 args = parser.parse_args()
-default_logging()
+init_standalone()
 session = db.get_session()
 
 if args.email and args.uid:
diff --git a/bin/create-contests b/bin/create-contests
index c84bd6c5..f6cea47e 100755
--- a/bin/create-contests
+++ b/bin/create-contests
@@ -4,7 +4,7 @@ import argparse
 
 import mo.db as db
 import mo.util
-from mo.util import die, default_logging
+from mo.util import die, init_standalone
 
 parser = argparse.ArgumentParser(description='Založí soutěže pro dané kolo')
 parser.add_argument(dest='round', type=str, metavar='YY-C-S', help='ID kola')
@@ -12,7 +12,7 @@ parser.add_argument('-n', '--dry-run', default=False, action='store_true', help=
 
 args = parser.parse_args()
 
-default_logging()
+init_standalone()
 sess = db.get_session()
 
 round_code = mo.util.RoundCode.parse(args.round)
diff --git a/bin/create-round b/bin/create-round
index 529624cd..87ecfc58 100755
--- a/bin/create-round
+++ b/bin/create-round
@@ -14,7 +14,7 @@ parser.add_argument('-n', '--name', type=str, required=True, help='název kola')
 
 args = parser.parse_args()
 
-mo.util.default_logging()
+mo.util.init_standalone()
 sess = db.get_session()
 
 rnd = db.Round(
diff --git a/bin/create-user b/bin/create-user
index dc05050b..4cd2eaaa 100755
--- a/bin/create-user
+++ b/bin/create-user
@@ -16,7 +16,7 @@ parser.add_argument('--mail', default=False, action='store_true', help='pošle u
 
 args = parser.parse_args()
 
-mo.util.default_logging()
+mo.util.init_standalone()
 session = db.get_session()
 
 user = db.User(
diff --git a/bin/init-regions b/bin/init-regions
index 09a6400f..401be06c 100755
--- a/bin/init-regions
+++ b/bin/init-regions
@@ -6,7 +6,7 @@ import sys
 import mo.db as db
 import mo.util
 
-mo.util.default_logging()
+mo.util.init_standalone()
 session = db.get_session()
 
 session.query(db.Place).delete()
diff --git a/bin/init-schools b/bin/init-schools
index 44e858c4..656f3e8f 100755
--- a/bin/init-schools
+++ b/bin/init-schools
@@ -18,7 +18,7 @@ from collections import defaultdict
 import mo.db as db
 import mo.util
 
-mo.util.default_logging()
+mo.util.init_standalone()
 session = db.get_session()
 new_town_cnt = 0
 processed_school_cnt = 0
diff --git a/mo/util.py b/mo/util.py
index f9e043f3..a3c39ffa 100644
--- a/mo/util.py
+++ b/mo/util.py
@@ -2,8 +2,10 @@
 
 from dataclasses import dataclass
 import datetime
+import dateutil.tz
 import email.message
 import email.headerregistry
+import locale
 import logging
 import re
 import subprocess
@@ -12,6 +14,7 @@ from typing import Any, Optional, NoReturn
 import textwrap
 import urllib.parse
 
+import mo
 import mo.db as db
 import mo.config as config
 
@@ -24,8 +27,15 @@ logger.setLevel(logging.DEBUG)
 logger.propagate = True
 
 
-def default_logging():
-    logging.basicConfig()
+def get_now() -> datetime.datetime:
+    return datetime.datetime.now(tz=dateutil.tz.UTC)
+
+
+def init_standalone():
+    """Společná inicializační funkce pro samostatné programy nezávislé na webu."""
+    logging.basicConfig(format='%(asctime)-15s %(levelname)-5.5s %(message)s')
+    mo.now = get_now()
+    locale.setlocale(locale.LC_COLLATE, 'cs_CZ.UTF-8')
 
 
 def log(type: db.LogType, what: int, details: Any):
diff --git a/mo/web/__init__.py b/mo/web/__init__.py
index 549991a5..31b84a90 100644
--- a/mo/web/__init__.py
+++ b/mo/web/__init__.py
@@ -14,6 +14,7 @@ import mo
 import mo.config as config
 import mo.db as db
 import mo.users
+import mo.util
 from mo.util import logger
 
 # Aplikační objekt
@@ -62,7 +63,7 @@ def init_request():
     else:
         user = None
     g.user = user
-    mo.now = datetime.datetime.now(tz=dateutil.tz.UTC)
+    mo.now = mo.util.get_now()
     g.now = mo.now  # for templates
     mo.util.current_log_user = user
 
-- 
GitLab