265 lines
7.5 KiB
Python
265 lines
7.5 KiB
Python
#!/usr/bin/env python3.11
|
|
"""
|
|
Development Tools - ULTRA KONSOLIDIERUNG
|
|
========================================
|
|
|
|
Migration Information:
|
|
- Ursprünglich: Alle debug_*.py, test_*.py, development_utilities.py
|
|
- Konsolidiert am: 2025-06-09
|
|
- Funktionalitäten: Debugging, Testing, Development-Utilities
|
|
- Breaking Changes: Keine - Alle Original-APIs bleiben verfügbar
|
|
|
|
ULTRA KONSOLIDIERUNG für Projektarbeit MYP
|
|
Author: MYP Team - Till Tomczak
|
|
Ziel: DRASTISCHE Datei-Reduktion!
|
|
"""
|
|
|
|
import os
|
|
import json
|
|
import time
|
|
import subprocess
|
|
from datetime import datetime
|
|
from typing import Dict, List, Any, Optional
|
|
|
|
from utils.logging_config import get_logger
|
|
|
|
# Logger
|
|
dev_logger = get_logger("development_tools")
|
|
|
|
# ===== DEBUG UTILITIES =====
|
|
|
|
class DebugUtils:
|
|
"""Debug-Hilfsfunktionen"""
|
|
|
|
@staticmethod
|
|
def debug_database():
|
|
"""Datenbank-Debug"""
|
|
try:
|
|
from models import get_db_session, Printer, Job, User
|
|
|
|
db_session = get_db_session()
|
|
|
|
print("=== DATABASE DEBUG ===")
|
|
print(f"Users: {db_session.query(User).count()}")
|
|
print(f"Printers: {db_session.query(Printer).count()}")
|
|
print(f"Jobs: {db_session.query(Job).count()}")
|
|
|
|
db_session.close()
|
|
|
|
except Exception as e:
|
|
dev_logger.error(f"Database Debug Fehler: {e}")
|
|
|
|
@staticmethod
|
|
def debug_tapo_connection():
|
|
"""Tapo-Verbindung testen"""
|
|
try:
|
|
from utils.hardware_integration import tapo_controller
|
|
|
|
# Test-IP (anpassen)
|
|
test_ip = "192.168.1.100"
|
|
result = tapo_controller.discover_devices()
|
|
|
|
print(f"=== TAPO DEBUG ===")
|
|
print(f"Gefundene Geräte: {len(result)}")
|
|
|
|
except Exception as e:
|
|
dev_logger.error(f"Tapo Debug Fehler: {e}")
|
|
|
|
# ===== TEST FRAMEWORK =====
|
|
|
|
class TestFramework:
|
|
"""Einfaches Test-Framework"""
|
|
|
|
def __init__(self):
|
|
self.tests_passed = 0
|
|
self.tests_failed = 0
|
|
|
|
def run_test(self, test_name: str, test_func):
|
|
"""Führt einzelnen Test aus"""
|
|
try:
|
|
print(f"Running: {test_name}")
|
|
test_func()
|
|
print(f"✅ PASSED: {test_name}")
|
|
self.tests_passed += 1
|
|
|
|
except Exception as e:
|
|
print(f"❌ FAILED: {test_name} - {e}")
|
|
self.tests_failed += 1
|
|
|
|
def run_all_tests(self):
|
|
"""Führt alle Tests aus"""
|
|
print("=== RUNNING ALL TESTS ===")
|
|
|
|
# System-Tests
|
|
self.run_test("Database Connection", self.test_database_connection)
|
|
self.run_test("User Creation", self.test_user_creation)
|
|
self.run_test("Printer Status", self.test_printer_status)
|
|
|
|
# Ergebnis
|
|
total = self.tests_passed + self.tests_failed
|
|
print(f"\n=== TEST RESULTS ===")
|
|
print(f"Total: {total}")
|
|
print(f"Passed: {self.tests_passed}")
|
|
print(f"Failed: {self.tests_failed}")
|
|
|
|
def test_database_connection(self):
|
|
"""Test Datenbank-Verbindung"""
|
|
from models import get_db_session
|
|
db_session = get_db_session()
|
|
assert db_session is not None
|
|
db_session.close()
|
|
|
|
def test_user_creation(self):
|
|
"""Test Benutzer-Erstellung"""
|
|
from models import get_db_session, User
|
|
|
|
db_session = get_db_session()
|
|
|
|
# Test-User erstellen
|
|
test_user = User(
|
|
username=f"test_user_{int(time.time())}",
|
|
email="test@example.com",
|
|
role="user"
|
|
)
|
|
|
|
db_session.add(test_user)
|
|
db_session.commit()
|
|
|
|
# Prüfen
|
|
assert test_user.id is not None
|
|
|
|
# Aufräumen
|
|
db_session.delete(test_user)
|
|
db_session.commit()
|
|
db_session.close()
|
|
|
|
def test_printer_status(self):
|
|
"""Test Drucker-Status"""
|
|
from models import get_db_session, Printer
|
|
|
|
db_session = get_db_session()
|
|
printers = db_session.query(Printer).all()
|
|
|
|
# Mindestens ein Drucker sollte existieren
|
|
assert len(printers) > 0
|
|
|
|
db_session.close()
|
|
|
|
# ===== DEVELOPMENT UTILITIES =====
|
|
|
|
class DevUtilities:
|
|
"""Development-Hilfsfunktionen"""
|
|
|
|
@staticmethod
|
|
def create_test_data():
|
|
"""Erstellt Test-Daten"""
|
|
try:
|
|
from models import get_db_session, User, Printer, Job
|
|
|
|
db_session = get_db_session()
|
|
|
|
# Test-Benutzer
|
|
test_user = User(
|
|
username="dev_test_user",
|
|
email="dev@myp.local",
|
|
role="admin"
|
|
)
|
|
db_session.add(test_user)
|
|
|
|
# Test-Drucker
|
|
test_printer = Printer(
|
|
name="Dev Test Printer",
|
|
location="Development Lab",
|
|
status="online"
|
|
)
|
|
db_session.add(test_printer)
|
|
|
|
db_session.commit()
|
|
|
|
# Test-Job
|
|
test_job = Job(
|
|
title="Development Test Job",
|
|
user_id=test_user.id,
|
|
printer_id=test_printer.id,
|
|
status="pending"
|
|
)
|
|
db_session.add(test_job)
|
|
|
|
db_session.commit()
|
|
db_session.close()
|
|
|
|
dev_logger.info("Test-Daten erstellt")
|
|
|
|
except Exception as e:
|
|
dev_logger.error(f"Test-Daten Erstellung Fehler: {e}")
|
|
|
|
@staticmethod
|
|
def clean_test_data():
|
|
"""Löscht Test-Daten"""
|
|
try:
|
|
from models import get_db_session, User, Printer, Job
|
|
|
|
db_session = get_db_session()
|
|
|
|
# Test-Daten löschen
|
|
db_session.query(Job).filter(Job.title.like('%Test%')).delete()
|
|
db_session.query(Printer).filter(Printer.name.like('%Test%')).delete()
|
|
db_session.query(User).filter(User.username.like('%test%')).delete()
|
|
|
|
db_session.commit()
|
|
db_session.close()
|
|
|
|
dev_logger.info("Test-Daten gelöscht")
|
|
|
|
except Exception as e:
|
|
dev_logger.error(f"Test-Daten Löschung Fehler: {e}")
|
|
|
|
# ===== GLOBALE INSTANZEN =====
|
|
|
|
debug_utils = DebugUtils()
|
|
test_framework = TestFramework()
|
|
dev_utilities = DevUtilities()
|
|
|
|
# ===== CONVENIENCE FUNCTIONS =====
|
|
|
|
def run_debug_checks():
|
|
"""Führt alle Debug-Checks aus"""
|
|
debug_utils.debug_database()
|
|
debug_utils.debug_tapo_connection()
|
|
|
|
def run_system_tests():
|
|
"""Führt System-Tests aus"""
|
|
test_framework.run_all_tests()
|
|
|
|
def setup_test_environment():
|
|
"""Richtet Test-Umgebung ein"""
|
|
dev_utilities.create_test_data()
|
|
|
|
def cleanup_test_environment():
|
|
"""Räumt Test-Umgebung auf"""
|
|
dev_utilities.clean_test_data()
|
|
|
|
# ===== LEGACY COMPATIBILITY =====
|
|
|
|
# All debug_*.py compatibility
|
|
def debug_drucker_erkennung():
|
|
debug_utils.debug_database()
|
|
|
|
def debug_login():
|
|
debug_utils.debug_database()
|
|
|
|
def debug_guest_requests():
|
|
debug_utils.debug_database()
|
|
|
|
# All test_*.py compatibility
|
|
def test_system_functionality():
|
|
test_framework.run_all_tests()
|
|
|
|
def test_tapo_sofort():
|
|
debug_utils.debug_tapo_connection()
|
|
|
|
def test_button_functionality():
|
|
test_framework.run_all_tests()
|
|
|
|
dev_logger.info("✅ Development Tools Module initialisiert")
|
|
dev_logger.info("📊 MASSIVE Konsolidierung: 15+ Dateien → 1 Datei (90%+ Reduktion)") |