jmri_logixng.context

ExecutionContext — the runtime environment a LogixNG sees.

Every Action.execute / Expression.evaluate call receives the context. It exposes:

  • connection — the active SystemConnection (so actions can reach the bean managers).
  • log — a logger for the LogAction.
  • trace — opt-in evaluation trace, useful for debugging conditionals.
 1"""``ExecutionContext`` — the runtime environment a LogixNG sees.
 2
 3Every Action.execute / Expression.evaluate call receives the context. It
 4exposes:
 5
 6* ``connection`` — the active :class:`SystemConnection` (so actions can
 7  reach the bean managers).
 8* ``log`` — a logger for the LogAction.
 9* ``trace`` — opt-in evaluation trace, useful for debugging conditionals.
10"""
11from __future__ import annotations
12
13import logging
14from dataclasses import dataclass, field
15
16from jmri_core.hal.connection import SystemConnection
17
18
19@dataclass
20class ExecutionContext:
21    """Runtime context passed through every node visit."""
22
23    connection: SystemConnection
24    log: logging.Logger = field(default_factory=lambda: logging.getLogger("jmri_logixng"))
25    trace_enabled: bool = False
26    trace: list[str] = field(default_factory=list)
27
28    def emit_trace(self, message: str) -> None:
29        if self.trace_enabled:
30            self.trace.append(message)
@dataclass
class ExecutionContext:
20@dataclass
21class ExecutionContext:
22    """Runtime context passed through every node visit."""
23
24    connection: SystemConnection
25    log: logging.Logger = field(default_factory=lambda: logging.getLogger("jmri_logixng"))
26    trace_enabled: bool = False
27    trace: list[str] = field(default_factory=list)
28
29    def emit_trace(self, message: str) -> None:
30        if self.trace_enabled:
31            self.trace.append(message)

Runtime context passed through every node visit.

ExecutionContext( connection: jmri_core.hal.SystemConnection, log: logging.Logger = <factory>, trace_enabled: bool = False, trace: list[str] = <factory>)
log: logging.Logger
trace_enabled: bool = False
trace: list[str]
def emit_trace(self, message: str) -> None:
29    def emit_trace(self, message: str) -> None:
30        if self.trace_enabled:
31            self.trace.append(message)