47 lines
1.5 KiB
Python
47 lines
1.5 KiB
Python
from __future__ import annotations
|
|
from backend.node_registry import register_node
|
|
from backend.execution_context import emit_value
|
|
from backend.data_types import RecordTable
|
|
from backend.nodes.helpers import _measurement_entry, _measurement_value, _scalar_payload
|
|
|
|
|
|
@register_node(display_name="Value Display")
|
|
class ValueDisplay:
|
|
@classmethod
|
|
def INPUT_TYPES(cls):
|
|
return {
|
|
"required": {
|
|
"value": ("FLOAT", {
|
|
"accepted_types": ["RECORD_TABLE"],
|
|
}),
|
|
"measurement": ("STRING", {
|
|
"default": "",
|
|
"choices_from_measure_input": "value",
|
|
"show_when_source_type": {
|
|
"value": ["RECORD_TABLE"],
|
|
},
|
|
}),
|
|
}
|
|
}
|
|
|
|
OUTPUTS = (
|
|
('FLOAT', 'value'),
|
|
)
|
|
FUNCTION = "display_value"
|
|
|
|
DESCRIPTION = "Display a FLOAT, or a selected numeric row from a measurement table, and pass the value through unchanged."
|
|
|
|
_broadcast_value_fn = None
|
|
_current_node_id: str = ""
|
|
|
|
def display_value(self, value, measurement: str = "") -> tuple:
|
|
unit = ""
|
|
if isinstance(value, RecordTable):
|
|
row = _measurement_entry(value, measurement)
|
|
numeric = _measurement_value(value, measurement)
|
|
unit = row.get("unit", "") if isinstance(row.get("unit"), str) else ""
|
|
else:
|
|
numeric = float(value)
|
|
emit_value(_scalar_payload(numeric, unit))
|
|
return (numeric,)
|