From e887df9aacf0ef4c6ccdfac81c106cb8fdbbad53 Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Tue, 12 Sep 2023 11:24:06 +0200
Subject: [PATCH] Pamhyr: Add init.py.

---
 src/init.py   | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++
 src/pamhyr.py |  70 ++------------------------------
 2 files changed, 113 insertions(+), 66 deletions(-)
 create mode 100644 src/init.py

diff --git a/src/init.py b/src/init.py
new file mode 100644
index 00000000..0d602128
--- /dev/null
+++ b/src/init.py
@@ -0,0 +1,109 @@
+# init.py -- Pamhyr
+# Copyright (C) 2023  INRAE
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
+# -*- coding: utf-8 -*-
+
+import sys, os
+import locale
+import logging
+
+from PyQt5.QtCore import QTranslator
+
+from tools import (
+    reset_timers, display_timers, timer,
+    logger_color_blue, logger_color_red, logger_color_green, logger_color_reset
+)
+from config import Config
+
+from View.MainWindow import ApplicationWindow
+from Model.Study import Study
+
+
+# Configure logger
+
+logging.basicConfig(
+    level=logging.DEBUG,
+    format=(f'[{logger_color_blue()}PAMHYR{logger_color_reset()}]' +
+            f'[{logger_color_green()}%(levelname)s{logger_color_reset()}]' +
+            ' %(message)s')
+)
+logger = logging.getLogger()
+logger.setLevel(logging.INFO)
+
+try:
+    log = os.path.join(
+        os.path.dirname(Config.filename()), "log.txt"
+    )
+    logfile = open(log, "w+")
+    handler = logging.StreamHandler(logfile)
+    formatter = logging.Formatter('[%(asctime)s][%(levelname)s] %(message)s')
+    handler.setFormatter(formatter)
+    handler.setLevel(logging.DEBUG)
+    logger.addHandler(handler)
+except:
+    logger.error("Failed to create logfile...")
+
+
+def license():
+    "Display in stdout Pamhyr infomation about licence and version"
+    blue = lambda s: logger.info(f"{logger_color_blue()}{s}{logger_color_reset()}")
+
+    blue("""`7MM\"""Mq.   db      `7MMM.     ,MMF'`7MMF'  `7MMF'`YMM'   `MM'`7MM\"""Mq.""")
+    blue("""  MM   `MM. ;MM:       MMMb    dPMM    MM      MM    VMA   ,V    MM   `MM.""")
+    blue("""  MM   ,M9 ,V^MM.      M YM   ,M MM    MM      MM     VMA ,V     MM   ,M9     pd*"*b.""")
+    blue("""  MMmmdM9 ,M  `MM      M  Mb  M' MM    MMmmmmmmMM      VMMP      MMmmdM9     (O)   j8""")
+    blue("""  MM      AbmmmqMA     M  YM.P'  MM    MM      MM       MM       MM  YM.         ,;j9""")
+    blue("""  MM     A'     VML    M  `YM'   MM    MM      MM       MM       MM   `Mb.    ,-='""")
+    blue(""".JMML. .AMA.   .AMMA..JML. `'  .JMML..JMML.  .JMML.   .JMML.   .JMML. .JMM.  Ammmmmmm""")
+
+    with open(os.path.abspath(
+            os.path.join(
+                os.path.dirname(__file__),
+                "VERSION"
+            )
+    ), "r") as f:
+        version = f.readline().strip()
+        logger.info(f"version:  {logger_color_green()}{version}{logger_color_reset()}")
+
+    logger.info("license: pamhyr  Copyright (C) 2023  INRAE")
+    logger.info("license: This program comes with ABSOLUTELY NO WARRANTY.")
+    logger.info("license: This is free software, and you are welcome to redistribute it")
+    logger.info("license: under certain conditions.")
+
+def setup_lang(app, conf:Config):
+    "Return QTranslator configured for current language"
+    lang_file = ""
+    translator = QTranslator()
+
+    if conf.lang == "":
+        # System language
+        sys_lang = locale.getdefaultlocale()
+        if "fr" in sys_lang[0]:
+            lang_file = os.path.dirname(__file__) + "/lang/fr.qm"
+    elif conf.lang == "fr":
+        # French
+        lang_file = os.path.dirname(__file__) + "/lang/fr.qm"
+    else:
+        # English default language
+        lang_file = ""
+
+    if lang_file != "":
+        logger.info(f"Load lang file: {lang_file}")
+        ok = translator.load(lang_file)
+        if not ok:
+            logger.error("Failed to load translate file")
+
+    return translator
diff --git a/src/pamhyr.py b/src/pamhyr.py
index 55172c78..c2a7d938 100755
--- a/src/pamhyr.py
+++ b/src/pamhyr.py
@@ -34,81 +34,19 @@ from tools import (
 from View.MainWindow import ApplicationWindow
 from Model.Study import Study
 
-logging.basicConfig(
-    level=logging.DEBUG,
-    format=(f'[{logger_color_blue()}PAMHYR{logger_color_reset()}]' +
-            f'[{logger_color_green()}%(levelname)s{logger_color_reset()}]' +
-            ' %(message)s')
-)
-logger = logging.getLogger()
-logger.setLevel(logging.INFO)
-
-try:
-    log = os.path.join(
-        os.path.dirname(Config.filename()), "log.txt"
-    )
-    logfile = open(log, "w+")
-    handler = logging.StreamHandler(logfile)
-    formatter = logging.Formatter('[%(asctime)s][%(levelname)s] %(message)s')
-    handler.setFormatter(formatter)
-    handler.setLevel(logging.DEBUG)
-    logger.addHandler(handler)
-except:
-    logger.error("Failed to create logfile...")
-
-def license():
-    blue = lambda s: logger.info(f"{logger_color_blue()}{s}{logger_color_reset()}")
-
-    blue("""`7MM\"""Mq.   db      `7MMM.     ,MMF'`7MMF'  `7MMF'`YMM'   `MM'`7MM\"""Mq.""")
-    blue("""  MM   `MM. ;MM:       MMMb    dPMM    MM      MM    VMA   ,V    MM   `MM.""")
-    blue("""  MM   ,M9 ,V^MM.      M YM   ,M MM    MM      MM     VMA ,V     MM   ,M9     pd*"*b.""")
-    blue("""  MMmmdM9 ,M  `MM      M  Mb  M' MM    MMmmmmmmMM      VMMP      MMmmdM9     (O)   j8""")
-    blue("""  MM      AbmmmqMA     M  YM.P'  MM    MM      MM       MM       MM  YM.         ,;j9""")
-    blue("""  MM     A'     VML    M  `YM'   MM    MM      MM       MM       MM   `Mb.    ,-='""")
-    blue(""".JMML. .AMA.   .AMMA..JML. `'  .JMML..JMML.  .JMML.   .JMML.   .JMML. .JMM.  Ammmmmmm""")
+from init import license, setup_lang
 
-    with open(os.path.abspath(
-            os.path.join(
-                os.path.dirname(__file__),
-                "VERSION"
-            )
-    ), "r") as f:
-        version = f.readline().strip()
-        logger.info(f"version:  {logger_color_green()}{version}{logger_color_reset()}")
-
-    logger.info("license: pamhyr  Copyright (C) 2023  INRAE")
-    logger.info("license: This program comes with ABSOLUTELY NO WARRANTY.")
-    logger.info("license: This is free software, and you are welcome to redistribute it")
-    logger.info("license: under certain conditions.")
+logger = logging.getLogger()
 
 def main():
     conf = Config.load()
     app = QApplication(sys.argv)
 
-    translator = QTranslator()
+    tr = setup_lang(app, conf)
+    app.installTranslator(tr)
 
     license()
 
-    lang_file = ""
-    if conf.lang == "":
-        # System language
-        sys_lang = locale.getdefaultlocale()
-        if "fr" in sys_lang[0]:
-            lang_file = os.path.dirname(__file__) + "/lang/fr.qm"
-    elif conf.lang == "fr":
-        # French
-        lang_file = os.path.dirname(__file__) + "/lang/fr.qm"
-    else:
-        # English default language
-        lang_file = ""
-
-    if lang_file != "":
-        ok = translator.load(lang_file)
-        if not ok:
-            logger.error("Failed to load translate file")
-
-    app.installTranslator(translator)
-
     application = ApplicationWindow(conf=conf)
     application.show()
 
-- 
GitLab