Skip to content
Snippets Groups Projects
Commit d8645b58 authored by Florian Spreckelsen's avatar Florian Spreckelsen
Browse files

MAINT: Remove bis from container id variable in web form

parent da255a8b
No related branches found
No related tags found
1 merge request!1F awi sams
......@@ -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]+)",
......
......@@ -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:
......
......@@ -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"]))
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 Container WHICH REFERENCES {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 {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):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment