#!/usr/bin/env python3 import logging import threading from collections import deque from server import start_server logger = logging.getLogger() def __setup_buffer_handler(): # lazy load GUI frameworks from PyQt6.QtCore import QObject, pyqtSignal class BufferingHandler(logging.Handler, QObject): new_record = pyqtSignal(str) def __init__(self, capacity=100): logging.Handler.__init__(self) QObject.__init__(self) self.buffer = deque(maxlen=capacity) # Define a buffer with a fixed capacity def emit(self, record): try: msg = self.format(record) self.buffer.append(msg) # Add message to the buffer self.new_record.emit(msg) # Emit signal except RuntimeError: pass def get_buffer(self): return list(self.buffer) # Return a copy of the buffer buffer_handler = BufferingHandler() buffer_handler.setFormatter(logging.getLogger().handlers[0].formatter) new_logger = logging.getLogger() new_logger.addHandler(buffer_handler) return buffer_handler def __show_gui(buffer_handler): # lazy load GUI frameworks from PyQt6.QtWidgets import QApplication # load application app: QApplication = QApplication(sys.argv) if app.style().objectName() != 'macos': app.setStyle('Fusion') # configure main window from src.ui.main_window import MainWindow window: MainWindow = MainWindow() window.buffer_handler = buffer_handler window.show() return app.exec() if __name__ == '__main__': import sys local_server_thread = threading.Thread(target=start_server, args=[True], daemon=True) local_server_thread.start() __show_gui(__setup_buffer_handler()) sys.exit()