230 lines
7.2 KiB
Python
230 lines
7.2 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Development-Setup für MYP Druckerverwaltungssystem
|
|
Startet das System im Development-Modus ohne /opt/myp-Deployment
|
|
|
|
Verwendung:
|
|
python setup_development.py
|
|
python setup_development.py --port 5000
|
|
python setup_development.py --debug
|
|
"""
|
|
|
|
import os
|
|
import sys
|
|
import subprocess
|
|
import argparse
|
|
from pathlib import Path
|
|
|
|
def print_development_banner():
|
|
"""Zeigt den Development-Banner"""
|
|
banner = f"""
|
|
{'='*70}
|
|
🔧 MYP DEVELOPMENT SETUP
|
|
{'='*70}
|
|
|
|
🚀 Environment: Development (Local)
|
|
🔒 Security: Relaxed (für Development)
|
|
🌐 Network: HTTP (localhost)
|
|
⚡ Performance: Debug-optimiert
|
|
📊 Monitoring: Development-Logging
|
|
🎯 Modus: Development + Debug
|
|
📁 Arbeitsverzeichnis: {os.getcwd()}
|
|
|
|
{'='*70}
|
|
"""
|
|
print(banner)
|
|
|
|
def check_development_requirements():
|
|
"""Prüft Development-Voraussetzungen"""
|
|
print("🔍 Prüfe Development-Voraussetzungen...")
|
|
|
|
requirements = []
|
|
|
|
# Python-Version prüfen
|
|
if sys.version_info < (3, 8):
|
|
requirements.append("❌ Python 3.8+ erforderlich")
|
|
return False
|
|
else:
|
|
requirements.append("✅ Python-Version OK")
|
|
|
|
# Erforderliche Dateien prüfen
|
|
required_files = [
|
|
'app.py',
|
|
'models.py',
|
|
'utils/settings.py',
|
|
'requirements.txt'
|
|
]
|
|
|
|
missing_files = []
|
|
for file in required_files:
|
|
if os.path.exists(file):
|
|
requirements.append(f"✅ {file}")
|
|
else:
|
|
requirements.append(f"❌ {file} fehlt")
|
|
missing_files.append(file)
|
|
|
|
# Node.js und npm prüfen
|
|
try:
|
|
subprocess.run(['node', '--version'], capture_output=True, check=True)
|
|
requirements.append("✅ Node.js verfügbar")
|
|
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
requirements.append("❌ Node.js nicht gefunden")
|
|
missing_files.append("Node.js")
|
|
|
|
try:
|
|
subprocess.run(['npm', '--version'], capture_output=True, check=True)
|
|
requirements.append("✅ npm verfügbar")
|
|
except (subprocess.CalledProcessError, FileNotFoundError):
|
|
requirements.append("❌ npm nicht gefunden")
|
|
missing_files.append("npm")
|
|
|
|
# CSS-Build prüfen
|
|
if os.path.exists('static/css/tailwind.min.css'):
|
|
requirements.append("✅ CSS bereits gebaut")
|
|
else:
|
|
requirements.append("⚠️ CSS muss gebaut werden")
|
|
|
|
# Python-Dependencies prüfen
|
|
try:
|
|
import flask
|
|
requirements.append("✅ Flask verfügbar")
|
|
except ImportError:
|
|
requirements.append("❌ Flask nicht installiert")
|
|
missing_files.append("Flask")
|
|
|
|
# Datenbank-Verzeichnis prüfen
|
|
if os.path.exists('instance'):
|
|
requirements.append("✅ Datenbank-Verzeichnis")
|
|
else:
|
|
requirements.append("⚠️ Instance-Verzeichnis wird erstellt")
|
|
os.makedirs('instance', exist_ok=True)
|
|
requirements.append("✅ Instance-Verzeichnis erstellt")
|
|
|
|
for req in requirements:
|
|
print(f" {req}")
|
|
|
|
if missing_files:
|
|
print(f"\n❌ FEHLENDE ABHÄNGIGKEITEN: {', '.join(missing_files)}")
|
|
return False
|
|
|
|
print("✅ Alle Voraussetzungen erfüllt\n")
|
|
return True
|
|
|
|
def install_python_dependencies():
|
|
"""Installiert Python-Dependencies"""
|
|
print("📦 Installiere Python-Dependencies...")
|
|
|
|
try:
|
|
subprocess.run([
|
|
sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt'
|
|
], check=True)
|
|
print("✅ Python-Dependencies installiert\n")
|
|
return True
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"❌ Fehler bei Python-Installation: {e}")
|
|
return False
|
|
|
|
def build_css():
|
|
"""Baut das CSS mit Tailwind"""
|
|
print("🎨 Baue CSS mit Tailwind...")
|
|
|
|
try:
|
|
# Prüfe ob node_modules existiert
|
|
if not os.path.exists('node_modules'):
|
|
print(" Installiere npm-Dependencies...")
|
|
subprocess.run(['npm', 'install'], check=True)
|
|
|
|
# Baue CSS
|
|
subprocess.run(['npm', 'run', 'build'], check=True)
|
|
print("✅ CSS erfolgreich gebaut\n")
|
|
return True
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"❌ Fehler beim CSS-Build: {e}")
|
|
return False
|
|
|
|
def set_development_environment():
|
|
"""Setzt Development-Umgebungsvariablen"""
|
|
print("🔧 Konfiguriere Development-Environment...")
|
|
|
|
# Development-Environment setzen
|
|
os.environ['FLASK_ENV'] = 'development'
|
|
os.environ['FLASK_DEBUG'] = '1'
|
|
os.environ['USE_PRODUCTION_CONFIG'] = 'false'
|
|
os.environ['DEVELOPMENT_MODE'] = 'true'
|
|
|
|
# Logging
|
|
os.environ['LOG_LEVEL'] = 'DEBUG'
|
|
|
|
# Performance (relaxed für Development)
|
|
os.environ['USE_MINIFIED_ASSETS'] = 'false'
|
|
os.environ['DISABLE_ANIMATIONS'] = 'false'
|
|
os.environ['LIMIT_GLASSMORPHISM'] = 'false'
|
|
|
|
# Sicherheit (relaxed für Development)
|
|
os.environ['FLASK_SSL_REQUIRED'] = 'false'
|
|
os.environ['SESSION_SECURE'] = 'false'
|
|
|
|
print(" ✅ Development-Environment konfiguriert")
|
|
print(" ✅ Debug-Modus aktiviert")
|
|
print(" ✅ Sicherheit für Development angepasst")
|
|
print()
|
|
|
|
def start_development_server(port=5000, debug=True):
|
|
"""Startet den Development-Server"""
|
|
print(f"🚀 Starte Development-Server auf Port {port}...")
|
|
print(f"🌐 URL: http://localhost:{port}")
|
|
print("🛑 Stoppen mit Strg+C\n")
|
|
|
|
try:
|
|
# Setze Port
|
|
os.environ['FLASK_PORT'] = str(port)
|
|
os.environ['FLASK_HOST'] = '127.0.0.1' # Nur localhost für Development
|
|
|
|
# Importiere und starte die App
|
|
from app import main
|
|
main()
|
|
|
|
except KeyboardInterrupt:
|
|
print("\n🛑 Development-Server gestoppt")
|
|
except Exception as e:
|
|
print(f"\n❌ FEHLER: {str(e)}")
|
|
sys.exit(1)
|
|
|
|
def main():
|
|
"""Haupt-Development-Setup-Funktion"""
|
|
parser = argparse.ArgumentParser(description='MYP Development Setup')
|
|
parser.add_argument('--port', type=int, default=5000, help='Server-Port (Standard: 5000)')
|
|
parser.add_argument('--debug', action='store_true', default=True, help='Debug-Modus aktivieren')
|
|
parser.add_argument('--skip-deps', action='store_true', help='Überspringe Dependency-Installation')
|
|
parser.add_argument('--skip-css', action='store_true', help='Überspringe CSS-Build')
|
|
|
|
args = parser.parse_args()
|
|
|
|
# Banner anzeigen
|
|
print_development_banner()
|
|
|
|
# Voraussetzungen prüfen
|
|
if not check_development_requirements():
|
|
print("🛑 Setup abgebrochen - behebe die Fehler und versuche es erneut")
|
|
sys.exit(1)
|
|
|
|
# Dependencies installieren (falls nicht übersprungen)
|
|
if not args.skip_deps:
|
|
if not install_python_dependencies():
|
|
print("🛑 Setup abgebrochen - Python-Dependencies konnten nicht installiert werden")
|
|
sys.exit(1)
|
|
|
|
# CSS bauen (falls nicht übersprungen)
|
|
if not args.skip_css:
|
|
if not build_css():
|
|
print("🛑 Setup abgebrochen - CSS konnte nicht gebaut werden")
|
|
sys.exit(1)
|
|
|
|
# Development-Environment setzen
|
|
set_development_environment()
|
|
|
|
# Development-Server starten
|
|
start_development_server(port=args.port, debug=args.debug)
|
|
|
|
if __name__ == "__main__":
|
|
main() |