🎉 Feature: Enhanced Development Tools & System Integration
This commit is contained in:
265
backend/utils/development_tools.py
Normal file
265
backend/utils/development_tools.py
Normal file
@ -0,0 +1,265 @@
|
||||
#!/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)")
|
Reference in New Issue
Block a user