Spaces:
Running
Running
| import os | |
| import sys | |
| import importlib.util | |
| import datetime | |
| import logging | |
| from logging.handlers import RotatingFileHandler | |
| class PyFundamentsDebug: | |
| """ | |
| Debug-Klasse für PyFundaments. | |
| Liest ENV-Variablen und konfiguriert Logging. | |
| Gibt Startup-Infos aus, wenn PYFUNDAMENTS_DEBUG=true. | |
| """ | |
| def __init__(self): | |
| # Debug aktivieren mit ENV VAR (default: False) | |
| self.enabled = os.getenv("PYFUNDAMENTS_DEBUG", "false").lower() == "true" | |
| # Log-Level aus ENV lesen, default INFO | |
| log_level_str = os.getenv("LOG_LEVEL", "INFO").upper() | |
| self.log_level = getattr(logging, log_level_str, logging.INFO) | |
| # Logs in /tmp oder stdout? (default False) | |
| self.log_to_tmp = os.getenv("LOG_TO_TMP", "false").lower() == "true" | |
| # Öffentliches Logging an/aus (default True) | |
| self.enable_public_logs = os.getenv("ENABLE_PUBLIC_LOGS", "true").lower() == "true" | |
| # Logger Setup | |
| self.logger = logging.getLogger('pyfundaments_debug') | |
| self._setup_logger() | |
| def _setup_logger(self): | |
| if not self.enable_public_logs: | |
| # Nur kritische Fehler im Log, wenn deaktiviert | |
| logging.basicConfig(level=logging.CRITICAL) | |
| return | |
| handlers = [] | |
| if self.log_to_tmp: | |
| log_file = '/tmp/pyfundaments_debug.log' | |
| file_handler = RotatingFileHandler(log_file, maxBytes=1024*1024, backupCount=3) | |
| handlers.append(file_handler) | |
| handlers.append(logging.StreamHandler(sys.stdout)) | |
| logging.basicConfig( | |
| level=self.log_level, | |
| format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', | |
| handlers=handlers | |
| ) | |
| def run(self): | |
| if not self.enabled: | |
| return | |
| self.logger.info(f"==== PYFUNDAMENTS DEBUG STARTUP ({datetime.datetime.now()}) ====") | |
| self.logger.info(f"Python version: {sys.version}") | |
| self.logger.info(f"CWD: {os.getcwd()}") | |
| self.logger.info(f"sys.path: {sys.path}") | |
| fund_dir = "fundaments" | |
| self.logger.info(f"fundaments exists: {os.path.isdir(fund_dir)}") | |
| required_files = [ | |
| "__init__.py", | |
| "access_control.py", | |
| "postgresql.py", | |
| "config_handler.py", | |
| "security.py", | |
| "user_handler.py", | |
| "encryption.py" | |
| ] | |
| for file in required_files: | |
| path = os.path.join(fund_dir, file) | |
| exists = os.path.isfile(path) | |
| readable = os.access(path, os.R_OK) | |
| self.logger.info(f"{file} exists: {exists} | readable: {readable}") | |
| if os.path.isdir(fund_dir): | |
| self.logger.info(f"Listing fundaments contents: {os.listdir(fund_dir)}") | |
| else: | |
| self.logger.warning("fundaments folder not found.") | |
| spec = importlib.util.find_spec("fundaments") | |
| self.logger.info(f"fundaments importable: {spec is not None}") | |
| conflicts = [mod for mod in sys.modules if mod == "fundaments"] | |
| self.logger.info(f"Name conflict in sys.modules: {conflicts}") | |
| self.logger.info("==== PYFUNDAMENTS DEBUG END ====") | |