From 8e8c00cc60c7d5a56de845d23b7ce9fd4f2838fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valerie=20Gleason=20=F0=9F=91=8C?= Date: Thu, 12 Jun 2025 12:17:31 -0500 Subject: [PATCH 1/9] adding refresh component MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Valerie Gleason 👌 --- examples/sample/sample_panel.py | 1 + src/nipanel/_streamlit_constants.py | 1 + src/nipanel/_streamlit_panel_value_accessor.py | 16 ++++++++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/examples/sample/sample_panel.py b/examples/sample/sample_panel.py index 5bf96d3..faaca3b 100644 --- a/examples/sample/sample_panel.py +++ b/examples/sample/sample_panel.py @@ -5,6 +5,7 @@ import nipanel panel = nipanel.StreamlitPanelValueAccessor(panel_id="sample_panel") +panel.refresh() st.title("Sample Panel") diff --git a/src/nipanel/_streamlit_constants.py b/src/nipanel/_streamlit_constants.py index 2cd9601..bdad9df 100644 --- a/src/nipanel/_streamlit_constants.py +++ b/src/nipanel/_streamlit_constants.py @@ -1 +1,2 @@ STREAMLIT_PYTHON_PANEL_SERVICE = "ni.pythonpanel.v1.PythonPanelService" +STREAMLIT_REFRESH_COMPONENT_URL = "http://localhost:42001/panels/refresh" diff --git a/src/nipanel/_streamlit_panel_value_accessor.py b/src/nipanel/_streamlit_panel_value_accessor.py index dc9e1d2..f58ce2f 100644 --- a/src/nipanel/_streamlit_panel_value_accessor.py +++ b/src/nipanel/_streamlit_panel_value_accessor.py @@ -1,13 +1,17 @@ from __future__ import annotations -from typing import final +from typing import final, Any import grpc +import streamlit.components.v1 as components from ni_measurement_plugin_sdk_service.discovery import DiscoveryClient from ni_measurement_plugin_sdk_service.grpc.channelpool import GrpcChannelPool from nipanel._panel_value_accessor import PanelValueAccessor -from nipanel._streamlit_constants import STREAMLIT_PYTHON_PANEL_SERVICE +from nipanel._streamlit_constants import ( + STREAMLIT_PYTHON_PANEL_SERVICE, + STREAMLIT_REFRESH_COMPONENT_URL, +) @final @@ -43,3 +47,11 @@ def __init__( grpc_channel_pool=grpc_channel_pool, grpc_channel=grpc_channel, ) + + def refresh(self) -> Any: + """Get the Streamlit component for refreshing the panel.""" + _panel_refresh_component = components.declare_component( + "panelRefreshComponent", + url=f"{STREAMLIT_REFRESH_COMPONENT_URL}/{self.panel_id}", + ) + return _panel_refresh_component() From 3a07b7d201217c865d40fb50a5cde5b5a370c9d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valerie=20Gleason=20=F0=9F=91=8C?= Date: Tue, 17 Jun 2025 15:23:43 -0500 Subject: [PATCH 2/9] moving refresh component to separate namespace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Valerie Gleason 👌 --- src/nipanel/_streamlit_panel_initializer.py | 6 +++++- src/nipanel/_streamlit_panel_value_accessor.py | 18 +++--------------- src/nipanel/panel_refresh/__init__.py | 14 ++++++++++++++ 3 files changed, 22 insertions(+), 16 deletions(-) create mode 100644 src/nipanel/panel_refresh/__init__.py diff --git a/src/nipanel/_streamlit_panel_initializer.py b/src/nipanel/_streamlit_panel_initializer.py index e52d5fb..03cf993 100644 --- a/src/nipanel/_streamlit_panel_initializer.py +++ b/src/nipanel/_streamlit_panel_initializer.py @@ -1,8 +1,11 @@ +from streamlit.components.v1 import components from typing import cast import streamlit as st from nipanel._streamlit_panel_value_accessor import StreamlitPanelValueAccessor +from nipanel._streamlit_constants import STREAMLIT_REFRESH_COMPONENT_URL +from nipanel.panel_refresh import add_refresh_component PANEL_ACCESSOR_KEY = "StreamlitPanelValueAccessor" @@ -22,7 +25,8 @@ def initialize_panel() -> StreamlitPanelValueAccessor: st.session_state[PANEL_ACCESSOR_KEY] = _initialize_panel_from_base_path() panel = cast(StreamlitPanelValueAccessor, st.session_state[PANEL_ACCESSOR_KEY]) - # TODO: declare the refresh component here + refresh_component = add_refresh_component(panel.panel_id) + refresh_component() return panel diff --git a/src/nipanel/_streamlit_panel_value_accessor.py b/src/nipanel/_streamlit_panel_value_accessor.py index f58ce2f..09198c5 100644 --- a/src/nipanel/_streamlit_panel_value_accessor.py +++ b/src/nipanel/_streamlit_panel_value_accessor.py @@ -1,17 +1,13 @@ from __future__ import annotations -from typing import final, Any +from typing import final import grpc -import streamlit.components.v1 as components from ni_measurement_plugin_sdk_service.discovery import DiscoveryClient from ni_measurement_plugin_sdk_service.grpc.channelpool import GrpcChannelPool from nipanel._panel_value_accessor import PanelValueAccessor -from nipanel._streamlit_constants import ( - STREAMLIT_PYTHON_PANEL_SERVICE, - STREAMLIT_REFRESH_COMPONENT_URL, -) +from nipanel._streamlit_constants import STREAMLIT_PYTHON_PANEL_SERVICE @final @@ -46,12 +42,4 @@ def __init__( discovery_client=discovery_client, grpc_channel_pool=grpc_channel_pool, grpc_channel=grpc_channel, - ) - - def refresh(self) -> Any: - """Get the Streamlit component for refreshing the panel.""" - _panel_refresh_component = components.declare_component( - "panelRefreshComponent", - url=f"{STREAMLIT_REFRESH_COMPONENT_URL}/{self.panel_id}", - ) - return _panel_refresh_component() + ) \ No newline at end of file diff --git a/src/nipanel/panel_refresh/__init__.py b/src/nipanel/panel_refresh/__init__.py new file mode 100644 index 0000000..bcd0346 --- /dev/null +++ b/src/nipanel/panel_refresh/__init__.py @@ -0,0 +1,14 @@ +""" Panel refresh component for Streamlit. """ + +import streamlit.components.v1 as components +from nipanel._streamlit_constants import STREAMLIT_REFRESH_COMPONENT_URL + +def add_refresh_component(panel_id): + + refresh_component = components.declare_component( + "panelRefreshComponent", + url=f"{STREAMLIT_REFRESH_COMPONENT_URL}/{panel_id}", + key=f"panel_refresh_{panel_id}", + ) + + return refresh_component From 92b50076ef98ced713c6f8a6854e8827686c432b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valerie=20Gleason=20=F0=9F=91=8C?= Date: Tue, 17 Jun 2025 15:42:55 -0500 Subject: [PATCH 3/9] fixing formatting MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Valerie Gleason 👌 --- src/nipanel/_streamlit_panel_initializer.py | 2 -- src/nipanel/_streamlit_panel_value_accessor.py | 2 +- src/nipanel/panel_refresh/__init__.py | 9 ++++++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/nipanel/_streamlit_panel_initializer.py b/src/nipanel/_streamlit_panel_initializer.py index 03cf993..cf8aa6f 100644 --- a/src/nipanel/_streamlit_panel_initializer.py +++ b/src/nipanel/_streamlit_panel_initializer.py @@ -1,10 +1,8 @@ -from streamlit.components.v1 import components from typing import cast import streamlit as st from nipanel._streamlit_panel_value_accessor import StreamlitPanelValueAccessor -from nipanel._streamlit_constants import STREAMLIT_REFRESH_COMPONENT_URL from nipanel.panel_refresh import add_refresh_component PANEL_ACCESSOR_KEY = "StreamlitPanelValueAccessor" diff --git a/src/nipanel/_streamlit_panel_value_accessor.py b/src/nipanel/_streamlit_panel_value_accessor.py index 09198c5..dc9e1d2 100644 --- a/src/nipanel/_streamlit_panel_value_accessor.py +++ b/src/nipanel/_streamlit_panel_value_accessor.py @@ -42,4 +42,4 @@ def __init__( discovery_client=discovery_client, grpc_channel_pool=grpc_channel_pool, grpc_channel=grpc_channel, - ) \ No newline at end of file + ) diff --git a/src/nipanel/panel_refresh/__init__.py b/src/nipanel/panel_refresh/__init__.py index bcd0346..b8cf8cf 100644 --- a/src/nipanel/panel_refresh/__init__.py +++ b/src/nipanel/panel_refresh/__init__.py @@ -1,14 +1,17 @@ -""" Panel refresh component for Streamlit. """ +"""Panel refresh component for Streamlit.""" + +from typing import Any import streamlit.components.v1 as components + from nipanel._streamlit_constants import STREAMLIT_REFRESH_COMPONENT_URL -def add_refresh_component(panel_id): +def add_refresh_component(panel_id: str) -> Any: + """Add a refresh component to the Streamlit app.""" refresh_component = components.declare_component( "panelRefreshComponent", url=f"{STREAMLIT_REFRESH_COMPONENT_URL}/{panel_id}", - key=f"panel_refresh_{panel_id}", ) return refresh_component From b01b1fe939203dc821502c318f310cdd90572f82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valerie=20Gleason=20=F0=9F=91=8C?= Date: Wed, 18 Jun 2025 14:06:00 -0500 Subject: [PATCH 4/9] rename refresh method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Valerie Gleason 👌 --- src/nipanel/_streamlit_panel_initializer.py | 4 ++-- .../refresh}/__init__.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) rename src/nipanel/{panel_refresh => streamlit_components/refresh}/__init__.py (69%) diff --git a/src/nipanel/_streamlit_panel_initializer.py b/src/nipanel/_streamlit_panel_initializer.py index cf8aa6f..dea4342 100644 --- a/src/nipanel/_streamlit_panel_initializer.py +++ b/src/nipanel/_streamlit_panel_initializer.py @@ -1,9 +1,9 @@ from typing import cast import streamlit as st +from streamlit_components.refresh import initialize_refresh_component from nipanel._streamlit_panel_value_accessor import StreamlitPanelValueAccessor -from nipanel.panel_refresh import add_refresh_component PANEL_ACCESSOR_KEY = "StreamlitPanelValueAccessor" @@ -23,7 +23,7 @@ def initialize_panel() -> StreamlitPanelValueAccessor: st.session_state[PANEL_ACCESSOR_KEY] = _initialize_panel_from_base_path() panel = cast(StreamlitPanelValueAccessor, st.session_state[PANEL_ACCESSOR_KEY]) - refresh_component = add_refresh_component(panel.panel_id) + refresh_component = initialize_refresh_component(panel.panel_id) refresh_component() return panel diff --git a/src/nipanel/panel_refresh/__init__.py b/src/nipanel/streamlit_components/refresh/__init__.py similarity index 69% rename from src/nipanel/panel_refresh/__init__.py rename to src/nipanel/streamlit_components/refresh/__init__.py index b8cf8cf..4a39fdd 100644 --- a/src/nipanel/panel_refresh/__init__.py +++ b/src/nipanel/streamlit_components/refresh/__init__.py @@ -7,11 +7,11 @@ from nipanel._streamlit_constants import STREAMLIT_REFRESH_COMPONENT_URL -def add_refresh_component(panel_id: str) -> Any: +def initialize_refresh_component(panel_id: str) -> Any: """Add a refresh component to the Streamlit app.""" - refresh_component = components.declare_component( + _refresh_component_func = components.declare_component( "panelRefreshComponent", url=f"{STREAMLIT_REFRESH_COMPONENT_URL}/{panel_id}", ) - return refresh_component + return _refresh_component_func From a9aa6f1a76936e30887a5080d4b7b928a688db7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valerie=20Gleason=20=F0=9F=91=8C?= Date: Wed, 18 Jun 2025 14:15:57 -0500 Subject: [PATCH 5/9] fixing import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Valerie Gleason 👌 --- examples/sample/sample_panel.py | 3 +-- src/nipanel/_streamlit_panel_initializer.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/examples/sample/sample_panel.py b/examples/sample/sample_panel.py index 16506a5..724a900 100644 --- a/examples/sample/sample_panel.py +++ b/examples/sample/sample_panel.py @@ -1,8 +1,7 @@ """Streamlit application script for displaying values using nipanel package.""" -import streamlit as st - import nipanel +import streamlit as st panel = nipanel.initialize_panel() diff --git a/src/nipanel/_streamlit_panel_initializer.py b/src/nipanel/_streamlit_panel_initializer.py index dea4342..ac553cf 100644 --- a/src/nipanel/_streamlit_panel_initializer.py +++ b/src/nipanel/_streamlit_panel_initializer.py @@ -1,7 +1,7 @@ from typing import cast import streamlit as st -from streamlit_components.refresh import initialize_refresh_component +from nipanel.streamlit_components.refresh import initialize_refresh_component from nipanel._streamlit_panel_value_accessor import StreamlitPanelValueAccessor From 02d4b82ade082cea3b6a1638dc939d5e8a39477e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valerie=20Gleason=20=F0=9F=91=8C?= Date: Wed, 18 Jun 2025 15:15:24 -0500 Subject: [PATCH 6/9] fixing imports MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Valerie Gleason 👌 --- examples/sample/sample_panel.py | 3 ++- src/nipanel/_streamlit_panel_initializer.py | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/examples/sample/sample_panel.py b/examples/sample/sample_panel.py index 724a900..16506a5 100644 --- a/examples/sample/sample_panel.py +++ b/examples/sample/sample_panel.py @@ -1,8 +1,9 @@ """Streamlit application script for displaying values using nipanel package.""" -import nipanel import streamlit as st +import nipanel + panel = nipanel.initialize_panel() st.title("Sample Panel") diff --git a/src/nipanel/_streamlit_panel_initializer.py b/src/nipanel/_streamlit_panel_initializer.py index ac553cf..7dd3b92 100644 --- a/src/nipanel/_streamlit_panel_initializer.py +++ b/src/nipanel/_streamlit_panel_initializer.py @@ -1,9 +1,9 @@ from typing import cast import streamlit as st -from nipanel.streamlit_components.refresh import initialize_refresh_component from nipanel._streamlit_panel_value_accessor import StreamlitPanelValueAccessor +from nipanel.streamlit_components.refresh import initialize_refresh_component PANEL_ACCESSOR_KEY = "StreamlitPanelValueAccessor" From 75caadeecded8bbd9faf2ad6443c7f21b9a33249 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valerie=20Gleason=20=F0=9F=91=8C?= Date: Wed, 18 Jun 2025 15:49:22 -0500 Subject: [PATCH 7/9] fixing package structure and import error MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Valerie Gleason 👌 --- src/nipanel/_streamlit_panel_initializer.py | 2 +- .../refresh => streamlit_refresh}/__init__.py | 0 2 files changed, 1 insertion(+), 1 deletion(-) rename src/nipanel/{streamlit_components/refresh => streamlit_refresh}/__init__.py (100%) diff --git a/src/nipanel/_streamlit_panel_initializer.py b/src/nipanel/_streamlit_panel_initializer.py index 7dd3b92..6932ebf 100644 --- a/src/nipanel/_streamlit_panel_initializer.py +++ b/src/nipanel/_streamlit_panel_initializer.py @@ -3,7 +3,7 @@ import streamlit as st from nipanel._streamlit_panel_value_accessor import StreamlitPanelValueAccessor -from nipanel.streamlit_components.refresh import initialize_refresh_component +from nipanel.streamlit_refresh import initialize_refresh_component PANEL_ACCESSOR_KEY = "StreamlitPanelValueAccessor" diff --git a/src/nipanel/streamlit_components/refresh/__init__.py b/src/nipanel/streamlit_refresh/__init__.py similarity index 100% rename from src/nipanel/streamlit_components/refresh/__init__.py rename to src/nipanel/streamlit_refresh/__init__.py From 16ef0819b588c2c8555c451b443da53ddf7d2450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valerie=20Gleason=20=F0=9F=91=8C?= Date: Wed, 18 Jun 2025 16:14:05 -0500 Subject: [PATCH 8/9] fix stale comment --- src/nipanel/streamlit_refresh/__init__.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nipanel/streamlit_refresh/__init__.py b/src/nipanel/streamlit_refresh/__init__.py index 4a39fdd..ec9f1c5 100644 --- a/src/nipanel/streamlit_refresh/__init__.py +++ b/src/nipanel/streamlit_refresh/__init__.py @@ -1,4 +1,4 @@ -"""Panel refresh component for Streamlit.""" +"""Initializes a refresh component for Streamlit.""" from typing import Any @@ -8,7 +8,7 @@ def initialize_refresh_component(panel_id: str) -> Any: - """Add a refresh component to the Streamlit app.""" + """Initialize a refresh component to the Streamlit app.""" _refresh_component_func = components.declare_component( "panelRefreshComponent", url=f"{STREAMLIT_REFRESH_COMPONENT_URL}/{panel_id}", From e021b7772866ea107c27aebfaa6bcdf4d52ec266 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Valerie=20Gleason=20=F0=9F=91=8C?= Date: Thu, 19 Jun 2025 09:50:20 -0500 Subject: [PATCH 9/9] changing panel to panel-service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Valerie Gleason 👌 --- src/nipanel/_streamlit_constants.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nipanel/_streamlit_constants.py b/src/nipanel/_streamlit_constants.py index bdad9df..f1350c1 100644 --- a/src/nipanel/_streamlit_constants.py +++ b/src/nipanel/_streamlit_constants.py @@ -1,2 +1,2 @@ STREAMLIT_PYTHON_PANEL_SERVICE = "ni.pythonpanel.v1.PythonPanelService" -STREAMLIT_REFRESH_COMPONENT_URL = "http://localhost:42001/panels/refresh" +STREAMLIT_REFRESH_COMPONENT_URL = "http://localhost:42001/panel-service/refresh"