Skip to content
Merged
Changes from 1 commit
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
13 changes: 11 additions & 2 deletions src/nipanel/_panel_value_accessor.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
from __future__ import annotations

from abc import ABC
from typing import TypeVar, overload, cast

import grpc
from ni_measurement_plugin_sdk_service.discovery import DiscoveryClient
from ni_measurement_plugin_sdk_service.grpc.channelpool import GrpcChannelPool

from nipanel._panel_client import PanelClient

_T = TypeVar("_T")


class PanelValueAccessor(ABC):
"""This class allows you to access values for a panel's controls."""
Expand Down Expand Up @@ -41,7 +44,13 @@ def panel_id(self) -> str:
"""Read-only accessor for the panel ID."""
return self._panel_id

def get_value(self, value_id: str, default_value: object = None) -> object:
@overload
def get_value(self, value_id: str) -> object: ...

@overload
def get_value(self, value_id: str, default_value: _T | None = None) -> _T: ...

def get_value(self, value_id: str, default_value: _T | None = None) -> _T:
"""Get the value for a control on the panel with an optional default value.

Args:
Expand All @@ -52,7 +61,7 @@ def get_value(self, value_id: str, default_value: object = None) -> object:
The value, or the default value if not set
"""
try:
return self._panel_client.get_value(self._panel_id, value_id)
return cast(_T, self._panel_client.get_value(self._panel_id, value_id))
except grpc.RpcError as e:
if e.code() == grpc.StatusCode.NOT_FOUND and default_value is not None:
return default_value
Expand Down