From c7c536f9f924872541818fbd2571521800b76602 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Mon, 18 Dec 2023 15:25:55 -0500 Subject: [PATCH 1/3] helper and viewer-level access to data_labels properties --- CHANGES.rst | 3 ++ jdaviz/configs/default/plugins/viewers.py | 50 ++++++++++++++++++----- jdaviz/core/helpers.py | 12 ++++++ 3 files changed, 55 insertions(+), 10 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index bcf38d7540..e7fcb16f05 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -31,6 +31,9 @@ API Changes - ``width`` argument in Line Analysis plugin is renamed to ``continuum_width`` and ``width`` will be removed in a future release. [#2587] +- New API access to ``viz.data_labels``, ``viewer.data_labels_visible`` and + ``viewer.data_labels_loaded``. [#2626] + Cubeviz ^^^^^^^ diff --git a/jdaviz/configs/default/plugins/viewers.py b/jdaviz/configs/default/plugins/viewers.py index 5d9396b6f3..71b52e5243 100644 --- a/jdaviz/configs/default/plugins/viewers.py +++ b/jdaviz/configs/default/plugins/viewers.py @@ -36,25 +36,55 @@ def __init__(self, *args, **kwargs): @property def user_api(self): # default exposed user APIs. Can override this method in any particular viewer. + expose = ['data_labels', 'data_labels_loaded', 'data_labels_visible'] if isinstance(self, BqplotImageView): if isinstance(self, AstrowidgetsImageViewerMixin): - expose = ['save', - 'center_on', 'offset_by', 'zoom_level', 'zoom', - 'colormap_options', 'set_colormap', - 'stretch_options', 'stretch', - 'autocut_options', 'cuts', - 'marker', 'add_markers', 'remove_markers', 'reset_markers', - 'blink_once', 'reset_limits'] + expose += ['save', + 'center_on', 'offset_by', 'zoom_level', 'zoom', + 'colormap_options', 'set_colormap', + 'stretch_options', 'stretch', + 'autocut_options', 'cuts', + 'marker', 'add_markers', 'remove_markers', 'reset_markers', + 'blink_once', 'reset_limits'] else: # cubeviz image viewers don't inherit from AstrowidgetsImageViewerMixin yet, # but also shouldn't expose set_limits because of equal aspect ratio concerns - expose = [] + expose += [] elif isinstance(self, TableViewer): - expose = [] + expose += [] else: - expose = ['set_limits', 'reset_limits'] + expose += ['set_limits', 'reset_limits'] return ViewerUserApi(self, expose=expose) + @property + def data_labels_loaded(self): + """ + List of data labels loaded in this viewer. + + Returns + ------- + data_labels : list + list of strings + """ + viewer_item = self.jdaviz_app._get_viewer_item(self.reference_id) + return [self.jdaviz_app._get_data_item_by_id(data_id)['name'] + for data_id in viewer_item.get('selected_data_items', {}).keys()] + + @property + def data_labels_visible(self): + """ + List of data labels visible in this viewer. + + Returns + ------- + data_labels : list + list of strings + """ + viewer_item = self.jdaviz_app._get_viewer_item(self.reference_id) + return [self.jdaviz_app._get_data_item_by_id(data_id)['name'] + for data_id, visibility in viewer_item.get('selected_data_items', {}).items() + if visibility != 'hidden'] + def reset_limits(self): """ Reset viewer axes limits. diff --git a/jdaviz/core/helpers.py b/jdaviz/core/helpers.py index d3b2dddd13..03a7b882e1 100644 --- a/jdaviz/core/helpers.py +++ b/jdaviz/core/helpers.py @@ -109,6 +109,18 @@ def load_data(self, data, data_label=None, parser_reference=None, **kwargs): kwargs['data_label'] = data_label self.app.load_data(data, parser_reference=parser_reference, **kwargs) + @property + def data_labels(self): + """ + List of data labels loaded and available in jdaviz + + Returns + ------- + data_labels : list + list of strings + """ + return [data.label for data in self.app.data_collection] + @property def plugins(self): """ From badd462bfa7be0d40fab00335ea460388bf5c668 Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Thu, 21 Dec 2023 11:24:20 -0500 Subject: [PATCH 2/3] do not expose for table viewers --- jdaviz/configs/default/plugins/viewers.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/jdaviz/configs/default/plugins/viewers.py b/jdaviz/configs/default/plugins/viewers.py index 71b52e5243..8457922ba6 100644 --- a/jdaviz/configs/default/plugins/viewers.py +++ b/jdaviz/configs/default/plugins/viewers.py @@ -36,7 +36,10 @@ def __init__(self, *args, **kwargs): @property def user_api(self): # default exposed user APIs. Can override this method in any particular viewer. - expose = ['data_labels', 'data_labels_loaded', 'data_labels_visible'] + if not isinstance(self, TableViewer): + expose = ['data_labels', 'data_labels_loaded', 'data_labels_visible'] + else: + expose = [] if isinstance(self, BqplotImageView): if isinstance(self, AstrowidgetsImageViewerMixin): expose += ['save', From 8a9dfdf8e32768d629b92b1fd547a8554040bf2d Mon Sep 17 00:00:00 2001 From: Kyle Conroy Date: Thu, 21 Dec 2023 13:22:15 -0500 Subject: [PATCH 3/3] test coverage --- CHANGES.rst | 2 +- jdaviz/tests/test_user_api.py | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index e7fcb16f05..b70a9ac59c 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -31,7 +31,7 @@ API Changes - ``width`` argument in Line Analysis plugin is renamed to ``continuum_width`` and ``width`` will be removed in a future release. [#2587] -- New API access to ``viz.data_labels``, ``viewer.data_labels_visible`` and +- New API access to ``viz.data_labels``, ``viewer.data_labels_visible``, and ``viewer.data_labels_loaded``. [#2626] Cubeviz diff --git a/jdaviz/tests/test_user_api.py b/jdaviz/tests/test_user_api.py index e18ba9c0a1..136c58db53 100644 --- a/jdaviz/tests/test_user_api.py +++ b/jdaviz/tests/test_user_api.py @@ -21,3 +21,12 @@ def test_specviz_zoom_level(specviz_helper): assert v._obj.state.x_max == 2 assert v._obj.state.y_min == 1 assert v._obj.state.y_max == 2 + + +def test_specviz_data_labels(specviz_helper, spectrum1d): + label = "Test 1D Spectrum" + specviz_helper.load_data(spectrum1d, data_label=label) + + assert specviz_helper.data_labels == [label] + assert specviz_helper.viewers['spectrum-viewer'].data_labels_loaded == [label] + assert specviz_helper.viewers['spectrum-viewer'].data_labels_visible == [label]