diff --git a/src/init.py b/src/init.py new file mode 100644 index 0000000000000000000000000000000000000000..0d6021286aba38062e8dff3cc6e0892e3e26819a --- /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 55172c780e3adaa401316c8a8a8eef11ddd92b2f..c2a7d938d99148fafd90d7af2f3dd8f26b0bed65 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()