Skip to content

Commit f2c2ba4

Browse files
Parenting now relies on parent data in viewers
* Child data will be added to all viewers in which parents reside. * Still need to add filter to viewer selection in UI for child data
1 parent 7f2fdcf commit f2c2ba4

3 files changed

Lines changed: 38 additions & 25 deletions

File tree

jdaviz/configs/default/plugins/data_menu/data_menu.py

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -693,12 +693,6 @@ def add_data(self, *data_labels):
693693
"""
694694
available = self.dataset.choices
695695

696-
# TODO: Remove this if we decide to prevent users from removing child data from viewers
697-
for label in data_labels:
698-
# Check if incoming labels are children of parent data
699-
parent_label = self.app._get_assoc_data_parent(label)
700-
available += self.app._get_assoc_data_children(parent_label)
701-
702696
unavailable = [data_label for data_label in data_labels
703697
if data_label not in available]
704698
if len(unavailable):

jdaviz/core/loaders/importers/importer.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -417,6 +417,10 @@ def add_to_data_collection(self, data, data_label=None, data_hash=None,
417417

418418
# Determine which viewer(s) to add the data to.
419419
viewer_select = viewer_select if viewer_select is not None else self.viewer
420+
if parent is not None:
421+
viewer_select.selected = [viewer for viewer, viewer_api in
422+
self._app._jdaviz_helper.viewers.items()
423+
if parent in viewer_api.data_menu.data_labels_loaded]
420424

421425
if viewer_select is False:
422426
# return without adding to viewers or broadcasting snackbar message that
@@ -463,7 +467,10 @@ def add_to_data_collection(self, data, data_label=None, data_hash=None,
463467
for viewer_label in viewer_select.selected:
464468
viewer = self._app._jdaviz_helper.viewers.get(viewer_label)
465469
try:
466-
viewer.data_menu.add_data(data_label)
470+
if parent is not None:
471+
self._app.add_data_to_viewer(viewer_label, data_label)
472+
else:
473+
viewer.data_menu.add_data(data_label)
467474
except Exception as e:
468475
failed_viewers.append(viewer_label)
469476
exceptions.append(str(e))

jdaviz/core/loaders/tests/test_loaders.py

Lines changed: 30 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -873,15 +873,35 @@ def test_load_image_auto_parent_existing_in_dc(self, rename):
873873
assert dcf_helper._app._get_assoc_data_parent('Image[ERR,2]') == primary_label
874874
assert dcf_helper._app._get_assoc_data_children(primary_label) == ['Image[ERR,2]']
875875

876-
# This should raise 'Data labels {unavailable} not able to be loaded...'
877-
# if parent child association doesn't work correctly (i.e. the previous behavior)
878-
# TODO: Remove this if we decide to prevent users from removing child data from viewers
879-
dcf_helper.viewers['Image'].data_menu.add_data('Image[ERR,2]')
876+
def test_multi_viewer_parent_data(self):
877+
dcf_helper = self.dcf_helper
878+
ldr = self.ldr
879+
880+
# Default parent selection is 'auto'
881+
ldr.importer.extension = 'SCI,1'
882+
ldr.load()
883+
884+
# Load a second viewer with the same data - Image (1)
885+
vc = dcf_helper.new_viewers['Image']
886+
vc.dataset = 'Image[SCI,1]'
887+
vc()
888+
889+
assert len(dcf_helper.viewers['Image'].data_menu.data_labels_loaded) == 1
890+
assert len(dcf_helper.viewers['Image (1)'].data_menu.data_labels_loaded) == 1
891+
892+
# Parent should be 'Auto'
893+
ldr.importer.extension = 'ERR,1'
894+
ldr.load()
880895

881-
# TODO: Remove skip once this behavior is fixed
896+
assert dcf_helper._app._get_assoc_data_parent('Image[ERR,1]') == 'Image[SCI,1]'
897+
assert dcf_helper._app._get_assoc_data_children('Image[SCI,1]') == ['Image[ERR,1]']
898+
899+
assert len(dcf_helper.viewers['Image'].data_menu.data_labels_loaded) == 2
900+
assert len(dcf_helper.viewers['Image (1)'].data_menu.data_labels_loaded) == 2
901+
902+
# TODO: Remove skip once this behavior is fixed
882903
@pytest.mark.skip
883-
@pytest.mark.parametrize('remove_from', ('viewer', 'app'))
884-
def test_load_unload_parenting_behavior(self, remove_from):
904+
def test_load_unload_parenting_behavior(self):
885905
ldr = self.ldr
886906
dcf_helper = self.dcf_helper
887907

@@ -895,17 +915,9 @@ def test_load_unload_parenting_behavior(self, remove_from):
895915

896916
dm = dcf_helper.viewers['Image'].data_menu
897917
dm.layer = ['Image[ERR,1]']
898-
899-
if remove_from == 'viewer':
900-
# Remove from viewer and use data_menu.add_data
901-
# TODO: remove this and the parametrization if we decide to
902-
# prevent users from removing child data from viewers (keep remove_from_app though)
903-
dm.remove_from_viewer()
904-
dm.add_data('Image[ERR,1]')
905-
else:
906-
# Remove from app and load again
907-
dm.remove_from_app()
908-
ldr.load()
918+
# Remove from app and load again
919+
dm.remove_from_app()
920+
ldr.load()
909921

910922
assert dcf_helper._app._get_assoc_data_parent('Image[ERR,1]') is None
911923
assert dcf_helper._app._get_assoc_data_children('Image[SCI,1]') == []

0 commit comments

Comments
 (0)