diff --git a/app.py b/app.py index 3bea4bb..d2430e2 100644 --- a/app.py +++ b/app.py @@ -5,7 +5,6 @@ Modularized version with Blueprints import logging import os -import socket from flask import Flask from flask_wtf.csrf import CSRFProtect from models import db @@ -100,38 +99,12 @@ def create_app(config: dict | None = None) -> Flask: app = create_app() -def get_lan_ip() -> str: - """Ermittelt die LAN-IP-Adresse dieses Rechners (Best-Effort). - - Öffnet einen UDP-Socket zu einer externen Adresse, um das ausgehende - Interface zu bestimmen – es werden dabei keine Daten gesendet. - Fällt bei Fehlern auf 127.0.0.1 zurück. - """ - s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) - try: - s.connect(('8.8.8.8', 80)) - return s.getsockname()[0] - except OSError: - return '127.0.0.1' - finally: - s.close() - - if __name__ == '__main__': - DEBUG = True - PORT = 5000 + logger.info("=" * 50) + logger.info("Tipptrainer gestartet") + logger.info(f"Version: {app.config['APP_VERSION']}") + logger.info(f"Lektionen geladen: {len(app.config['LESSONS'])}") + logger.info("Debug-Info verfügbar unter: http://127.0.0.1:5000/debug") + logger.info("=" * 50) - # Banner genau einmal ausgeben: ohne Reloader sofort, mit Reloader nur - # im Worker-Prozess (WERKZEUG_RUN_MAIN), nicht im Supervisor. - if not DEBUG or os.environ.get('WERKZEUG_RUN_MAIN') == 'true': - lan_ip = get_lan_ip() - logger.info("=" * 50) - logger.info("Tipptrainer gestartet") - logger.info(f"Version: {app.config['APP_VERSION']}") - logger.info(f"Lektionen geladen: {len(app.config['LESSONS'])}") - logger.info(f"Tipp-Training lokal: http://127.0.0.1:{PORT}") - logger.info(f"Tipp-Training im LAN: http://{lan_ip}:{PORT}") - logger.info(f"Debug-Info: http://127.0.0.1:{PORT}/debug") - logger.info("=" * 50) - - app.run(debug=DEBUG, host='0.0.0.0', port=PORT) + app.run(debug=True, host='0.0.0.0', port=5000) diff --git a/tests/test_integration_progress.py b/tests/test_integration_progress.py index c69786c..7aed9b4 100644 --- a/tests/test_integration_progress.py +++ b/tests/test_integration_progress.py @@ -5,7 +5,7 @@ import unittest import os os.environ['FLASK_TESTING'] = 'true' # Set before importing app -from app import create_app, db +from app import app, db from models import Progress, LessonProgress from services.progress_service import ProgressService @@ -15,11 +15,10 @@ class TestProgressServiceIntegration(unittest.TestCase): def setUp(self): """Setup: Test-App und In-Memory-Datenbank""" - self.app = create_app({ - 'TESTING': True, - 'SQLALCHEMY_DATABASE_URI': 'sqlite:///:memory:', - 'WTF_CSRF_ENABLED': False, - }) + app.config['TESTING'] = True + app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:' + app.config['WTF_CSRF_ENABLED'] = False + self.app = app self.app_context = self.app.app_context() self.app_context.push() db.create_all() @@ -260,12 +259,10 @@ class TestResolveCurrentLessonIndex(unittest.TestCase): """Tests für die zentrale Lektions-Auflösung (Resume + Validierung).""" def setUp(self): - self.app = create_app({ - 'TESTING': True, - 'SQLALCHEMY_DATABASE_URI': 'sqlite:///:memory:', - 'WTF_CSRF_ENABLED': False, - }) - self.app_context = self.app.app_context() + app.config['TESTING'] = True + app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:' + app.config['WTF_CSRF_ENABLED'] = False + self.app_context = app.app_context() self.app_context.push() db.create_all() diff --git a/tests/test_integration_statistics.py b/tests/test_integration_statistics.py index 8c5c94b..591ab2b 100644 --- a/tests/test_integration_statistics.py +++ b/tests/test_integration_statistics.py @@ -6,7 +6,7 @@ import os os.environ['FLASK_TESTING'] = 'true' # Set before importing app from datetime import timedelta, date -from app import create_app, db +from app import app, db from models import LessonStatistic, DailyPractice from services.statistics_service import StatisticsService @@ -16,11 +16,10 @@ class TestStatisticsServiceIntegration(unittest.TestCase): def setUp(self): """Setup: Test-App und In-Memory-Datenbank""" - self.app = create_app({ - 'TESTING': True, - 'SQLALCHEMY_DATABASE_URI': 'sqlite:///:memory:', - 'WTF_CSRF_ENABLED': False, - }) + app.config['TESTING'] = True + app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///:memory:' + app.config['WTF_CSRF_ENABLED'] = False + self.app = app self.app_context = self.app.app_context() self.app_context.push() db.create_all()