PlatSim_Genova/python_simulate_wrapper.py
2026-01-30 16:38:33 +01:00

208 lines
5.5 KiB
Python

#!/usr/bin/env python3
"""
Python Wrapper for Simulation Mode Execution
This wrapper configures the Python environment to use the local
test environment packages and then executes GRIFO_M_PBIT.py in simulation mode.
Usage:
python python_simulate_wrapper.py
This script can be executed with any Python 3.7+ interpreter and will
configure the environment to use the embedded test environment.
"""
import sys
import os
from pathlib import Path
def setup_environment():
"""Configure Python environment for test execution."""
# Get script directory (GrifoAutomaticTestEnv)
script_dir = Path(__file__).parent.resolve()
# Define paths
test_env = script_dir / "TestEnvironment"
test_scripts = test_env / "scripts"
test_lib = test_env / "env"
test_site_packages = test_lib / "site-packages"
# Verify paths exist
if not test_scripts.exists():
print(f"[ERROR] Test scripts directory not found: {test_scripts}")
sys.exit(1)
if not test_site_packages.exists():
print(f"[ERROR] Test site-packages not found: {test_site_packages}")
sys.exit(1)
# Add to sys.path (in reverse order, will be prepended)
paths_to_add = [
str(test_site_packages),
str(test_lib),
str(test_scripts),
]
print("=" * 79)
print("GRIFO M-PBIT Test - Simulation Mode Wrapper")
print("=" * 79)
print()
print(f"Python Version: {sys.version}")
print(f"Python Executable: {sys.executable}")
print()
print("Configuring environment paths:")
for path in reversed(paths_to_add):
if path not in sys.path:
sys.path.insert(0, path)
print(f" [+] {path}")
print()
print("Environment configured successfully")
print()
# Change working directory to scripts
os.chdir(str(test_scripts))
print(f"Working directory: {os.getcwd()}")
print()
return test_scripts
def verify_imports():
"""Verify critical imports are available."""
print("Verifying imports...")
required_modules = [
'fpdf',
'defusedxml',
'PIL',
'serial',
'pyvisa',
]
missing = []
for module in required_modules:
try:
__import__(module)
print(f" [OK] {module}")
except ImportError as e:
print(f" [MISSING] {module}: {e}")
missing.append(module)
if missing:
print()
print(f"[WARNING] {len(missing)} module(s) not found: {', '.join(missing)}")
print("[WARNING] Test may fail if these modules are required")
print()
def execute_test(test_scripts):
"""Execute GRIFO_M_PBIT.py with --simulate flag."""
test_script = test_scripts / "GRIFO_M_PBIT.py"
if not test_script.exists():
print(f"[ERROR] Test script not found: {test_script}")
sys.exit(1)
# Check mock module
mock_module = test_scripts / "GRIFO_M_PBIT_mock.py"
if not mock_module.exists():
print(f"[WARNING] Mock module not found: {mock_module}")
print("[WARNING] Simulation mode may not work")
print()
print("=" * 79)
print("Starting Test Execution")
print("=" * 79)
print()
print(f"Test Script: {test_script.name}")
print("Mode: SIMULATION (no hardware required)")
print()
print("Test Configuration:")
print(" - Repetitions: 10 (configurable in script)")
print(" - BIT Timeout: 180 seconds")
print(" - PBIT Time: 15-25 seconds (randomized)")
print()
print("Simulation Features:")
print(" - Simulated 1553 bus messages")
print(" - Simulated serial terminal (%%E, %%F, RECYCLE)")
print(" - Simulated power control")
print(" - Configurable scenarios and timing")
print()
print("=" * 79)
print()
# Add --simulate flag to sys.argv
sys.argv = [str(test_script), '--simulate']
# Execute test script
try:
# Read and execute the test script
with open(test_script, 'r', encoding='utf-8') as f:
script_code = f.read()
# Create globals for execution
script_globals = {
'__name__': '__main__',
'__file__': str(test_script),
}
# Execute
exec(compile(script_code, str(test_script), 'exec'), script_globals)
print()
print("=" * 79)
print("[OK] Test completed successfully")
print("=" * 79)
return 0
except Exception as e:
print()
print("=" * 79)
print(f"[ERROR] Test failed with exception:")
print("=" * 79)
print()
import traceback
traceback.print_exc()
print()
return 1
def main():
"""Main entry point."""
try:
# Setup environment
test_scripts = setup_environment()
# Verify imports
verify_imports()
# Execute test
exit_code = execute_test(test_scripts)
sys.exit(exit_code)
except KeyboardInterrupt:
print()
print()
print("=" * 79)
print("[INTERRUPTED] Test execution interrupted by user")
print("=" * 79)
sys.exit(130)
except Exception as e:
print()
print("=" * 79)
print(f"[ERROR] Wrapper failed: {e}")
print("=" * 79)
import traceback
traceback.print_exc()
sys.exit(1)
if __name__ == '__main__':
main()