refactor: logger

This commit is contained in:
RedDeadDepresso
2024-09-20 01:26:15 +01:00
parent 3158d11b8e
commit 5cc96fa121
12 changed files with 93 additions and 70 deletions

View File

@@ -2,22 +2,20 @@ import logging
import sys
from typing import Union
from app.common.signal_bus import signalBus
class Logger:
"""
Logger class for logging
"""
def __init__(self):
def __init__(self, signalBus=None):
"""
:param logger_signal: Logger Box signal
"""
# Init logger box signal, logs and logger
# logger box signal is used to output log to logger box
self.logs = ""
self.logger_signal = signalBus.loggerSignal
self.logger_signal = signalBus.loggerSignal if signalBus else None
self.logger = logging.getLogger("KAFFIO_Logger")
formatter = logging.Formatter("%(levelname)s |%(category)s | %(message)s ")
handler1 = logging.StreamHandler(stream=sys.stdout)
@@ -29,11 +27,11 @@ class Logger:
# Status Color: Blue, Red, Green, Orange
self.statusColor = ['#2d8cf0', '#00c12b', '#ed3f14', '#f90', '#f90', '#f90', '#f90', '#f90']
# Create a list with each status padded with spaces
paddedStatus = [self.align(s) for s in self.status]
self.paddedStatus = [self.align(s) for s in self.status]
# Status HTML: <b style="color:$color">status</b>
self.statusHtml = [
f'<b style="color:{_color};">{status}</b>'
for _color, status in zip(self.statusColor, paddedStatus)]
for _color, status in zip(self.statusColor, self.paddedStatus)]
def __out__(self, category: str, message: str, level: int = 1, raw_print=False) -> None:
"""
@@ -53,8 +51,8 @@ class Logger:
# If logger box is not None, output log to logger box
# else output log to console
if self.logger_signal is not None:
category = self.align(category)
if self.logger_signal is not None:
message = message.replace('\n', '<br>').replace(' ', '&nbsp;')
adding = (f'''
<div style="font-family: Consolas, monospace;color:{self.statusColor[level - 1]};">
@@ -64,18 +62,18 @@ class Logger:
self.logs += adding
self.logger_signal.emit(adding)
else:
print(f'{self.statusHtml[level - 1]} | {category} | {message}')
print(f'{self.paddedStatus[level - 1]} | {category} | {message}')
def align(self, string, maxLength=8):
space = '&nbsp;' if self.logger_signal is not None else ' '
space = ' '
return f"{string}{space * (maxLength - len(string))}"
def colorize(self, adding):
for i, s in enumerate(self.status):
def colorize(self, adding: str):
for i, s in enumerate(self.paddedStatus):
if s in adding:
adding = (f'''
<div style="font-family: Consolas, monospace;color:{self.statusColor[i]};">
{adding}
{adding.replace(' ', '&nbsp;')}
</div>
''')
self.logs += adding
@@ -106,7 +104,7 @@ class Logger:
"""
self.__out__(category, message, 3)
def skipped(self, category: str, message: str) -> None:
def warning(self, category: str, message: str) -> None:
"""
:param message: log message
@@ -114,7 +112,7 @@ class Logger:
"""
self.__out__(category, message, 4)
def warning(self, category: str, message: str) -> None:
def skipped(self, category: str, message: str) -> None:
"""
:param message: log message
@@ -159,6 +157,3 @@ class Logger:
'</div>', raw_print=True)
else:
print('--------------------------------------------------------------------')
logger = Logger()

View File

@@ -0,0 +1,64 @@
from PySide6.QtCore import QThread, QProcess, Signal, QObject
import os
class ScriptManager(QObject):
def __init__(self, signalBus):
super().__init__()
self.signalBus = signalBus
self.logger = signalBus.logger
self._process = None
self._line = '--------------------------------------------------------------------'
self.__connectSignalToSlot()
def __connectSignalToSlot(self):
self.signalBus.startSignal.connect(self.start)
self.signalBus.stopSignal.connect(self.stop)
def start(self):
if self._process is not None:
self.stop()
else:
if os.path.exists("script.exe"):
args = ["script.exe"]
elif os.path.exists("script.py"):
args = ["python", "script.py"]
else:
self.logger.error("No valid script found to execute.")
return
self._process = QProcess(self)
self._process.readyReadStandardOutput.connect(self.readOutput)
self._process.readyReadStandardError.connect(self.readError)
self._process.finished.connect(self.processFinished)
if len(args) > 1:
self._process.start(args[0], args[1:])
else:
self._process.start(args[0])
def readOutput(self):
if self._process is not None:
while self._process.canReadLine():
line = str(self._process.readLine(), encoding='utf-8').strip()
if line == self._line:
self.logger.line()
else:
self.logger.colorize(line)
def readError(self):
if self._process is not None:
while self._process.canReadLine():
error_line = str(self._process.readLine(), encoding='utf-8').strip()
self.logger.colorize(f"Error: {error_line}", color='red')
def processFinished(self):
"""Slot called when the process finishes."""
self.signalBus.stopSignal.emit()
def stop(self):
if self._process is not None:
self._process.terminate()
self._process.waitForFinished()
self._process = None

View File

@@ -1,7 +1,8 @@
# coding: utf-8
from PySide6.QtCore import QObject, Signal
from qfluentwidgets import SettingCardGroup
from app.common.logger import Logger
from app.common.script_manager import ScriptManager
class SignalBus(QObject):
""" Signal bus """
@@ -16,5 +17,10 @@ class SignalBus(QObject):
stopSignal = Signal()
loggerSignal = Signal(str)
def __init__(self, parent: QObject | None = None) -> None:
super().__init__(parent)
self.logger = Logger(self)
self.scriptManager = ScriptManager(self)
signalBus = SignalBus()

View File

@@ -1,45 +0,0 @@
import os
import subprocess
import threading
from app.common.signal_bus import signalBus
from app.common.logger import logger
class ThreadManager:
def __init__(self):
super().__init__()
self._script = None
self._line = '--------------------------------------------------------------------'
def start(self):
if self._script is not None:
self.stop()
else:
args = []
if os.path.exists("script.exe"):
args = ["script.exe"]
elif os.path.exists("script.py"):
args = ["python", "script.py"]
self._script = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
threading.Thread(target=self.readOutput).start()
def readOutput(self):
while self._script is not None:
line = self._script.stdout.readline().decode('utf-8')
if not line:
signalBus.stopSignal.emit()
elif line == self._line:
logger.line()
else:
logger.colorize(line)
def stop(self):
if self._script is not None:
self._script.terminate()
self._script = None
threadManager = ThreadManager()
signalBus.startSignal.connect(threadManager.start)
signalBus.stopSignal.connect(threadManager.stop)

View File

@@ -12,7 +12,6 @@ from .logger_interface import LoggerInterface
from .setting_interface import SettingInterface
from ..common.config import ZH_SUPPORT_URL, EN_SUPPORT_URL, cfg
from ..common.signal_bus import signalBus
from ..common.thread_manager import threadManager
from ..common import resource
from ..components.navigation_checkbox import NavigationCheckBox
from ..components.navigation_action_buttons import NavigationActionButtons

View File

@@ -2,7 +2,7 @@ import os
import re as regex
import codecs
import shutil
from app.common.logger import logger
from util.logger import logger
class FilterConvertKKS:
def __init__(self, config, file_manager):

View File

@@ -1,6 +1,6 @@
import os
import codecs
from app.common.logger import logger
from util.logger import logger
class InstallChara:
def __init__(self, config, file_manager):

View File

@@ -1,6 +1,6 @@
import os
import codecs
from app.common.logger import logger
from util.logger import logger
class RemoveChara:

View File

@@ -5,7 +5,7 @@ try:
pass
from util.config import Config
from app.common.logger import logger
from util.logger import logger
from util.file_manager import FileManager
from modules.install_chara import InstallChara
from modules.remove_chara import RemoveChara

View File

@@ -1,7 +1,7 @@
import sys
import json
import os
from app.common.logger import logger
from util.logger import logger
class Config:
def __init__(self, config_file):

View File

@@ -5,7 +5,7 @@ import patoolib
import customtkinter
import subprocess
import time
from app.common.logger import logger
from util.logger import logger
class FileManager:

4
util/logger.py Normal file
View File

@@ -0,0 +1,4 @@
from app.common.logger import Logger
logger = Logger()