From 5e1bbd1589a3b90990b6d480e965e51db6c09b90 Mon Sep 17 00:00:00 2001 From: Dan Birman Date: Tue, 20 Aug 2024 15:04:52 -0700 Subject: [PATCH] feat: adding option for missing/present --- src/aind_metadata_viz/app.py | 20 ++++++++++++++------ src/aind_metadata_viz/metadata_helpers.py | 5 +++-- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/aind_metadata_viz/app.py b/src/aind_metadata_viz/app.py index e8b0771..c6d9213 100644 --- a/src/aind_metadata_viz/app.py +++ b/src/aind_metadata_viz/app.py @@ -102,14 +102,20 @@ def build_top(): return pane +missing_selector = pn.widgets.Select(name='Value state', options=['Missing', 'Present']) + + def build_csv(file, field): # For everybody who is missing the currently active file/field id_fields = ["name", "_id", "location", "creation"] + get_present = missing_selector.value == 'Present' + df_data = [] for data in data_list: if not data[file] is None: - if mid_selector.value == " " or check_present(field, data[file]): + if mid_selector.value == " " or check_present(field, data[file], check_present=get_present): + # This file/field combo is present/missing, get all the id information id_data = {} for id_field in id_fields: if id_field in data: @@ -134,13 +140,15 @@ def build_csv_jscode(event): '"', '\\"' ) # Escape newlines and double quotes + get_missing = missing_selector.value == 'Missing' + missing_text = 'missing' if get_missing else 'present' + if not mid_selector.value == " ": - filename = f"{top_selector.value}-{mid_selector.value}-missing.csv" + filename = f"{top_selector.value}-{mid_selector.value}-{missing_text}.csv" else: - filename = f"{top_selector.value}-missing.csv" + filename = f"{top_selector.value}-{missing_text}.csv" js_code = f""" -console.log('here'); var text = "{csv_escaped}"; var blob = new Blob([text], {{ type: 'text/plain' }}); @@ -210,7 +218,7 @@ def build_mid(selected): option_list = [" "] + list(mid_list[0].keys()) mid_selector.options = option_list - return pn.panel(chart) + return pn.pane.Vega(chart) header = """ @@ -223,7 +231,7 @@ def build_mid(selected): # Left column (controls) left_col = pn.Column( - header_pane, top_selector, mid_selector, download_button, width=400 + header_pane, top_selector, mid_selector, missing_selector, download_button, width=400 ) mid_plot = pn.bind(build_mid, selected=top_selector) diff --git a/src/aind_metadata_viz/metadata_helpers.py b/src/aind_metadata_viz/metadata_helpers.py index 0b20fab..dbeceb9 100644 --- a/src/aind_metadata_viz/metadata_helpers.py +++ b/src/aind_metadata_viz/metadata_helpers.py @@ -1,4 +1,4 @@ -def check_present(key: str, object: dict): +def check_present(key: str, object: dict, check_present: bool = True): """Return true if the value of a key exists and is not None, or any of '' [] {} in a JSON object @@ -9,7 +9,7 @@ def check_present(key: str, object: dict): object : dict Dictionary """ - return ( + present = ( object[key] is not None and object[key] != "" and object[key] != [] @@ -17,6 +17,7 @@ def check_present(key: str, object: dict): if key in object else False ) + return present if check_present else not present def process_present_dict(data: dict, expected_fields: list):