Skip to content

Commit

Permalink
Let app.get_viewer() fallback to ID when reference is None (#2156)
Browse files Browse the repository at this point in the history
* Add test that would fail on main currently

* Let app.get_viewer() auto fallback
on using ID when viewer has no reference.
  • Loading branch information
pllim authored May 12, 2023
1 parent c4911b3 commit 8bc5b8e
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 8 deletions.
18 changes: 10 additions & 8 deletions jdaviz/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -572,25 +572,24 @@ def get_viewer(self, viewer_reference):
Notes
-----
This is only used in cases where the viewers have been pre-defined
in the configuration file. Otherwise, viewers are not stored via
reference.
If viewer does not have a reference, it is going to try to look
up the viewer using the given reference as ID.
Parameters
----------
viewer_reference : str
The reference to the viewer defined with the ``reference`` key
in the yaml configuration file.
in the YAML configuration file.
Returns
-------
`~glue_jupyter.bqplot.common.BqplotBaseView`
viewer : `~glue_jupyter.bqplot.common.BqplotBaseView`
The viewer class instance.
"""
return self._viewer_by_reference(viewer_reference)
return self._viewer_by_reference(viewer_reference, fallback_to_id=True)

def get_viewer_by_id(self, vid):
"""Like :meth:`get_viewer` but use ID instead of reference name.
"""Like :meth:`get_viewer` but use ID directly instead of reference name.
This is useful when reference name is `None`.
"""
return self._viewer_store.get(vid)
Expand Down Expand Up @@ -1460,7 +1459,7 @@ def find_viewer_item(stack_items):

return viewer_item

def _viewer_by_reference(self, reference):
def _viewer_by_reference(self, reference, fallback_to_id=False):
"""
Viewer instance by reference defined in the yaml configuration file.
Expand All @@ -1476,6 +1475,9 @@ def _viewer_by_reference(self, reference):
"""
viewer_item = self._viewer_item_by_reference(reference)

if viewer_item is None and fallback_to_id:
return self._viewer_by_id(reference)

return self._viewer_store[viewer_item['id']]

def _viewer_item_by_reference(self, reference):
Expand Down
7 changes: 7 additions & 0 deletions jdaviz/configs/imviz/tests/test_viewers.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@ def test_create_destroy_viewer(imviz_helper, desired_name, actual_name):
assert imviz_helper.app.get_viewer_ids() == ['imviz-0']


def test_get_viewer_created(imviz_helper):
# This viewer has no reference but has ID.
viewer1 = imviz_helper.create_image_viewer()
viewer2 = imviz_helper.app.get_viewer('imviz-1')
assert viewer1 is viewer2


def test_destroy_viewer_invalid(imviz_helper):
assert imviz_helper.app.get_viewer_ids() == ['imviz-0']

Expand Down

0 comments on commit 8bc5b8e

Please sign in to comment.