Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
BaseBlenderAPIClient,
)
from openutm_verification.core.execution.config_models import DataFiles
from openutm_verification.core.execution.scenario_runner import scenario_step
from openutm_verification.core.execution.scenario_runner import ScenarioContext, scenario_step
from openutm_verification.core.reporting.reporting_models import (
Status,
StepResult,
Expand Down Expand Up @@ -761,6 +761,10 @@ def setup_flight_declaration(self, flight_declaration_path: str, trajectory_path

self.telemetry_states = telemetry_states

# Store data in ScenarioContext for reporting
ScenarioContext.set_flight_declaration_data(flight_declaration)
ScenarioContext.set_telemetry_data(telemetry_states)

upload_result = self.upload_flight_declaration(flight_declaration)

if upload_result.status == Status.FAIL:
Expand Down
28 changes: 28 additions & 0 deletions src/openutm_verification/core/execution/scenario_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
class ScenarioState:
steps: List[StepResult[Any]] = field(default_factory=list)
active: bool = False
flight_declaration_data: Optional[Any] = None
telemetry_data: Optional[Any] = None


_scenario_state: contextvars.ContextVar[Optional[ScenarioState]] = contextvars.ContextVar("scenario_state", default=None)
Expand Down Expand Up @@ -46,13 +48,39 @@ def add_result(cls, result: StepResult[Any]) -> None:
if state and state.active:
state.steps.append(result)

@classmethod
def set_flight_declaration_data(cls, data: Any) -> None:
state = _scenario_state.get()
if state and state.active:
state.flight_declaration_data = data

@classmethod
def set_telemetry_data(cls, data: Any) -> None:
state = _scenario_state.get()
if state and state.active:
state.telemetry_data = data

@property
def steps(self) -> List[StepResult[Any]]:
if self._state:
return self._state.steps
state = _scenario_state.get()
return state.steps if state else []

@property
def flight_declaration_data(self) -> Optional[Any]:
if self._state:
return self._state.flight_declaration_data
state = _scenario_state.get()
return state.flight_declaration_data if state else None

@property
def telemetry_data(self) -> Optional[Any]:
if self._state:
return self._state.telemetry_data
state = _scenario_state.get()
return state.telemetry_data if state else None


class StepDecorator(Protocol):
@overload
Expand Down
4 changes: 4 additions & 0 deletions src/openutm_verification/scenarios/registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ def _run_scenario_simple(scenario_id: str, func: Callable, args, kwargs) -> Scen
return result

steps = ctx.steps
flight_declaration_data = ctx.flight_declaration_data
telemetry_data = ctx.telemetry_data

final_status = Status.PASS if all(s.status == Status.PASS for s in steps) else Status.FAIL
total_duration = sum(s.duration for s in steps)
Expand All @@ -47,6 +49,8 @@ def _run_scenario_simple(scenario_id: str, func: Callable, args, kwargs) -> Scen
status=final_status,
duration_seconds=total_duration,
steps=steps,
flight_declaration_data=flight_declaration_data,
telemetry_data=telemetry_data,
)

except Exception as e:
Expand Down