diff --git a/sample-management-custom/caosdb-server/caosdb-webui/src/ext/js/ext_stockmanagement.js b/sample-management-custom/caosdb-server/caosdb-webui/src/ext/js/ext_stockmanagement.js index 8c79a108d0b9b1e91e3c75a871a0f10f39f11530..36e05ce21f77c5294a17e3deb694379e7247dd63 100644 --- a/sample-management-custom/caosdb-server/caosdb-webui/src/ext/js/ext_stockmanagement.js +++ b/sample-management-custom/caosdb-server/caosdb-webui/src/ext/js/ext_stockmanagement.js @@ -6,12 +6,12 @@ 'use strict'; /** - * @module ext_bis_stockmanagement + * @module ext_stockmanagement * @version 0.2 * * @requires($, navbar, log, form_elements, form_panel, bis_custom_reference_resolver) */ -const ext_bis_stockmanagement = function($, navbar, log, form_elements, form_panel, bis_custom_reference_resolver) { +const ext_stockmanagement = function($, navbar, log, form_elements, form_panel, bis_custom_reference_resolver) { const tool_box = "Storage Management" // The item that is shown in the top-navbar @@ -115,7 +115,7 @@ const ext_bis_stockmanagement = function($, navbar, log, form_elements, form_pan script: "export_container_csv.py", fields: [{ type: "text", - name: "bis_ids", + name: "container_ids", label: container_id_label, required: true, pattern: "((([0-9]+\\s*-\\s*){0,1}[0-9]+)\\s*,\\s*)*(([0-9]+\\s*-\\s*){0,1}[0-9]+)", diff --git a/sample-management-custom/caosdb-server/scripting/bin/export_container_csv.py b/sample-management-custom/caosdb-server/scripting/bin/export_container_csv.py index d30e91f56e20b6159d45211456b5f3435f6fa5a8..13a2a1b3f77b0b35573e1c6c3246fab2ac1ff668 100755 --- a/sample-management-custom/caosdb-server/scripting/bin/export_container_csv.py +++ b/sample-management-custom/caosdb-server/scripting/bin/export_container_csv.py @@ -100,7 +100,7 @@ def extract_parent_container(record, key): return reverse_semicolon_separated_list(values) -def extract_bis_id(record, key): +def extract_eid(record, key): return record.id @@ -193,7 +193,7 @@ def default_extractor(record, key): EXTRACTORS = { - get_column_header_name("entity_id"): extract_bis_id, + get_column_header_name("entity_id"): extract_eid, get_column_header_name("container_label_prop"): default_extractor, get_column_header_name("Collection"): extract_collection, get_column_header_name("container_size_prop"): default_extractor, @@ -235,29 +235,29 @@ def retrieve_containers(data): container = [] not_found = [] - for bis_id in data: - if isinstance(bis_id, int): + for eid in data: + if isinstance(eid, int): try: container.append( cached_query( - f"FIND RECORD {get_entity_name('container_rt')} WITH id = '{bis_id}'", + f"FIND RECORD {get_entity_name('container_rt')} WITH id = '{eid}'", unique=True)) except EmptyUniqueQueryError as e: # we want to warn about these - not_found.append(bis_id) + not_found.append(eid) else: found_at_least_one_in_range = False - for next_bis_id in bis_id: + for next_eid in eid: try: container.append( cached_query( - f"FIND RECORD {get_entity_name('container_rt')} WITH id = '{next_bis_id}'", + f"FIND RECORD {get_entity_name('container_rt')} WITH id = '{next_eid}'", unique=True)) found_at_least_one_in_range = True except EmptyUniqueQueryError as e: pass if not found_at_least_one_in_range: - not_found.append(f"{bis_id.start}-{bis_id.stop-1}") + not_found.append(f"{eid.start}-{eid.stop-1}") return container, not_found @@ -325,7 +325,7 @@ def main(): with open(args.filename) as form_json: form_data = json.load(form_json) - tmp = form_data["bis_ids"].split(",") + tmp = form_data["container_ids"].split(",") data = [] for d in tmp: if "-" in d: diff --git a/sample-management-custom/caosdb-server/scripting/bin/update_containers.py b/sample-management-custom/caosdb-server/scripting/bin/update_containers.py index d48491686bf52ddbd66cce6deb9a41732b243464..12ef9b6a907f5fb587e5e768ea10e4a6c6d347cb 100755 --- a/sample-management-custom/caosdb-server/scripting/bin/update_containers.py +++ b/sample-management-custom/caosdb-server/scripting/bin/update_containers.py @@ -37,7 +37,7 @@ from linkahead.cached import cached_query, cached_get_entity_by from bis_utils import (get_do_not_insert_type_names, replace_entity_urls_by_ids, whitespace_cleanup_in_df) from sample_helpers.container_update_get_parent import get_container_by_identifier -from sample_helpers.utils import CONSTANTS +from sample_helpers.utils import (CONSTANTS, get_column_header_name, get_entity_name) # suppress warning of diff function apilogger = logging.getLogger("linkahead.apiutils") @@ -89,29 +89,35 @@ def main(): # Get referenced container entities child_containers = db.Container() parent_containers = db.Container() + id_column_name = get_column_header_name("entity_id") + parent_column_name = get_column_header_name("Parent container") for index, row in data.iterrows(): - if not _value_in_row("BIS ID", row): - logger.error(f"BIS ID is missing in row {index+1}. Nothing was updated.") + if not _value_in_row(id_column_name, row): + logger.error(f"{id_column_name} is missing in row {index+1}. Nothing was updated.") return 1 try: - child = db.Record(id=int(row["BIS ID"])) + child = db.Record(id=int(row[id_column_name])) except ValueError: logger.error( - f"Invalid BIS ID {row['BIS ID']} in row {index + 1}. Nothing was updated.") + f"Invalid {id_column_name} {row[id_column_name]} in row {index + 1}. Nothing was updated.") return 1 - child.add_parent("Container") + child.add_parent(get_entity_name("container_rt")) child_containers.append(child) - - if _value_in_row("Parent container", row): - parent_identifier = row["Parent container"] + + if _value_in_row(parent_column_name, row): + parent_identifier = row[parent_column_name] parent = get_container_by_identifier(parent_identifier) if len(parent) == 0: logger.error( - f"Couldn't find parent with identifier '{parent_identifier}' in row {index+1}.") + f"Couldn't find parent with identifier '{parent_identifier}' " + f"in row {index+1}." + ) return 1 elif len(parent) > 1: - logger.error(f"Parent with identifier '{parent_identifier}' in row {index+1} was not unique. " - "Please specify with BIS ID instead.") + logger.error( + f"Parent with identifier '{parent_identifier}' in row " + f"{index+1} was not unique. Please specify with " + f"{id_column_name} instead.") return 1 parent = parent[0] try: @@ -125,16 +131,22 @@ def main(): return 1 # Get IDs of proerperties - child_container_prop = cached_get_entity_by(query="FIND Property WITH name = 'Child container'") - custom_label_prop = cached_get_entity_by(query="FIND Property WITH name = 'Custom label'") - pdf_rt = cached_get_entity_by(query="FIND RECORDTYPE WITH name=PDFReport") + child_container_prop = cached_get_entity_by( + query=f"FIND Property WITH name = '{get_entity_name('child_container_prop')}'" + ) + custom_label_prop = cached_get_entity_by( + query=f"FIND Property WITH name = '{get_entity_name('custom_label_prop')}'" + ) + pdf_rt = cached_get_entity_by( + query=f"FIND RECORDTYPE WITH name='{get_entity_name('PDFReport')}'" + ) # Update (/create) container entities for index, row in data.iterrows(): # Add child to parent parent = None - if _value_in_row("Parent container", row): - parent_identifier = row["Parent container"] + if _value_in_row(parent_column_name, row): + parent_identifier = row[parent_column_name] # This has already been checked above for uniqueness candidate = get_container_by_identifier(parent_identifier)[0] # A bit redundant, but we need the exact Python object here that is in the parent_containers list. @@ -142,17 +154,21 @@ def main(): if parent.get_property(child_container_prop.id) is None: parent.add_property(id=child_container_prop.id, - name=child_container_prop.name, value=[int(row["BIS ID"])]) + name=child_container_prop.name, value=[int(row[id_column_name])]) else: if parent.get_property(child_container_prop.id).value is None: - parent.get_property(child_container_prop.id).value = [int(row["BIS ID"])] + parent.get_property(child_container_prop.id).value = [int(row[id_column_name])] else: - if int(row["BIS ID"]) not in parent.get_property(child_container_prop.id).value: + if int(row[id_column_name]) not in parent.get_property(child_container_prop.id).value: parent.get_property(child_container_prop.id).value.append( - int(row["BIS ID"])) - - # remove the current child from all other parents (don't do anything if the parent didn't change) - old_parents = cached_query(f"FIND Container WHICH REFERENCES {int(row['BIS ID'])}") + int(row[id_column_name])) + + # remove the current child from all other parents (don't + # do anything if the parent didn't change) + old_parents = cached_query( + f"FIND {get_entity_name('container_rt')} WHICH REFERENCES " + f"{int(row[id_column_name])}" + ) for old_parent in old_parents: if parent is not None and old_parent.id == parent.id: # old parent also is new parent @@ -162,20 +178,20 @@ def main(): old_parent = parent_containers.get_entity_by_id(old_parent.id) except KeyError: parent_containers.append(old_parent) - old_parent.remove_value_from_property("Child container", int( - row["BIS ID"]), remove_if_empty_afterwards=False) - if old_parent.get_property("Child container").value is None: - old_parent.get_property("Child container").value = [] + old_parent.remove_value_from_property(child_container_prop.name, int( + row[id_column_name]), remove_if_empty_afterwards=False) + if old_parent.get_property(child_container_prop.name).value is None: + old_parent.get_property(child_container_prop.name).value = [] # Add custom label o child - child = child_containers.get_entity_by_id(id=int(row["BIS ID"])) - if _value_in_row("Custom label", row): - child.name = row["Custom label"] + child = child_containers.get_entity_by_id(id=int(row[id_column_name])) + if _value_in_row(get_column_header_name("custom_label_prop"), row): + child.name = row[get_column_header_name("custom_label_prop")] if child.get_property(custom_label_prop.id) is None: child.add_property(id=custom_label_prop.id, - name=custom_label_prop.name, value=row["Custom label"]) + name=custom_label_prop.name, value=row[get_column_header_name("custom_label_prop")]) else: - child.get_property(custom_label_prop.id).value = row["Custom label"] + child.get_property(custom_label_prop.id).value = row[get_column_header_name("custom_label_prop")] # Treat PI if _value_in_row("PI", row):