Spaces:
Sleeping
Sleeping
| # @title utils/logger.py | |
| import logging | |
| import sys | |
| from datetime import datetime | |
| from pathlib import Path | |
| from typing import Optional, Dict, Any, Callable | |
| class SpotMakerLogger: | |
| """ | |
| Logger dla aplikacji SpotMaker. | |
| Obs艂uguje: | |
| - Logowanie do pliku i konsoli | |
| - 艢ledzenie post臋pu dla GUI | |
| - Logowanie szczeg贸艂owe dla ka偶dego modu艂u | |
| """ | |
| def __init__(self, log_dir: str = "logs"): | |
| self.log_dir = Path(log_dir) | |
| self.log_dir.mkdir(parents=True, exist_ok=True) | |
| # Inicjalizacja g艂贸wnego loggera | |
| self.logger = logging.getLogger('SpotMaker') | |
| self.logger.setLevel(logging.DEBUG) | |
| # Format log贸w | |
| formatter = logging.Formatter( | |
| '%(asctime)s - %(name)s - %(levelname)s - %(message)s' | |
| ) | |
| # Handler dla pliku | |
| file_handler = logging.FileHandler( | |
| self.log_dir / f"spotmaker_{datetime.now().strftime('%Y%m%d_%H%M%S')}.log", | |
| encoding='utf-8' | |
| ) | |
| file_handler.setLevel(logging.DEBUG) | |
| file_handler.setFormatter(formatter) | |
| # Handler dla konsoli | |
| console_handler = logging.StreamHandler(sys.stdout) | |
| console_handler.setLevel(logging.INFO) | |
| console_handler.setFormatter(formatter) | |
| self.logger.addHandler(file_handler) | |
| self.logger.addHandler(console_handler) | |
| # Stan dla GUI | |
| self.current_progress: Dict[str, float] = {} | |
| self.current_status: Dict[str, str] = {} | |
| # Callback dla aktualizacji UI | |
| self.update_ui_callback: Optional[Callable] = None | |
| def log(self, module: str, message: str, level: str = "info") -> None: | |
| """ | |
| Loguje wiadomo艣膰 z okre艣lonego modu艂u. | |
| Args: | |
| module: Nazwa modu艂u (np. 'video_gen', 'audio_gen') | |
| message: Tre艣膰 wiadomo艣ci | |
| level: Poziom logowania ('debug', 'info', 'warning', 'error', 'critical') | |
| """ | |
| log_method = getattr(self.logger, level.lower()) | |
| formatted_msg = f"[{module}] {message}" | |
| log_method(formatted_msg) | |
| # Aktualizacja interfejsu je艣li zdefiniowano callback | |
| if self.update_ui_callback: | |
| self.update_ui_callback(formatted_msg) | |
| def update_progress(self, module: str, progress: float, status: Optional[str] = None) -> Dict[str, Any]: | |
| """ | |
| Aktualizuje post臋p operacji dla danego modu艂u. | |
| Args: | |
| module: Nazwa modu艂u | |
| progress: Warto艣膰 post臋pu (0-100) | |
| status: Opcjonalny status tekstowy | |
| Returns: | |
| Dict zawieraj膮cy aktualny stan dla GUI | |
| """ | |
| self.current_progress[module] = min(max(progress, 0), 100) | |
| if status: | |
| self.current_status[module] = status | |
| self.log(module, f"Status: {status} | Post臋p: {progress:.1f}%") | |
| return { | |
| 'progress': self.current_progress, | |
| 'status': self.current_status | |
| } | |
| def get_module_progress(self, module: str) -> float: | |
| """Zwraca aktualny post臋p dla danego modu艂u.""" | |
| return self.current_progress.get(module, 0.0) | |
| def get_module_status(self, module: str) -> str: | |
| """Zwraca aktualny status dla danego modu艂u.""" | |
| return self.current_status.get(module, "Nieaktywny") | |
| def reset_module(self, module: str) -> None: | |
| """Resetuje post臋p i status dla danego modu艂u.""" | |
| self.current_progress[module] = 0.0 | |
| self.current_status[module] = "Zresetowano" | |
| self.log(module, "Zresetowano stan modu艂u") | |
| def format_error(self, module: str, error: Exception) -> str: | |
| """ | |
| Formatuje b艂膮d do logowania. | |
| Args: | |
| module: Nazwa modu艂u | |
| error: Obiekt wyj膮tku | |
| Returns: | |
| Sformatowana wiadomo艣膰 b艂臋du | |
| """ | |
| error_msg = f"[{module}] B艂膮d: {str(error)}" | |
| self.logger.error(error_msg) | |
| return error_msg | |
| def set_ui_callback(self, callback_fn: Callable[[str], None]) -> None: | |
| """Ustawia funkcj臋 callback do aktualizacji interfejsu.""" | |
| self.update_ui_callback = callback_fn |