improve feedback upon unknown or ambiguous ids

This commit is contained in:
Jan Grewe 2019-09-18 18:06:34 +02:00
parent 6a8c800b0b
commit d542641f7d

View File

@ -6,6 +6,13 @@ def _safe_get_val(dictionary:dict, key, default=None):
return dictionary[key] if key in dictionary.keys() else default
def _results_check(results, id, text="ID"):
if len(results) == 0:
raise ValueError("%s %s does not exist!" % (text, id))
elif len(results) > 1:
raise ValueError("%s %s is not unique!" % (text, id))
class Cell:
def __init__(self, cell_id=None, tuple=None):
if tuple:
@ -13,7 +20,7 @@ class Cell:
elif cell_id:
pattern = "cell_id like '{0:s}'".format(cell_id)
cells = (Cells & pattern)
assert (len(cells) == 1), "Cell id does not exist or is not unique!"
_results_check(cells, cell_id, "Cell ID")
self.__tuple = cells.fetch(as_dict=True)[0]
else:
print("Empty Cell, not linked to any database entry!")
@ -78,7 +85,7 @@ class Dataset:
elif dataset_id:
pattern = "dataset_id like '{0:s}'".format(dataset_id)
dsets = (Datasets & pattern)
assert(len(dsets) == 1), "Dataset name is not unique!"
_results_check(dsets, dataset_id, "Dataset ID")
self.__tuple = dsets.fetch(limit=1)[0]
else:
print("Empty dataset, not linked to any database entry!")
@ -147,7 +154,7 @@ class RePro:
self.__tuple = tuple
elif repro_id:
repros = (RePro & "repro_id like '{0:s}'".format(repro_id))
assert (len(repros) == 1), "Repro id does not exist or is not unique!"
_results_check(repros, repro_id, "RePro ID")
self.__tuple = repros.fetch(limit=1, as_dict=True)[0]
else:
self.__tuple = {}
@ -208,7 +215,7 @@ class Stimulus:
self.__tuple = tuple
elif stimulus_id:
stims = Stimuli & "stimulus_id = '%s'" %stimulus_id
assert(len(stims) == 1), "Stimulus_id does not exist or is not unique!"
_results_check(stims, stimulus_id, "Stimulus ID")
self.__tuple = stims.fetch(limit=1, as_dict=True)[0]
else:
print("Empty RePro, not linked to any database entry!")
@ -230,7 +237,9 @@ class Subject:
if tuple:
self.__tuple = tuple
elif subject_id:
self.__tuple = Subjects & "subject_id like '{0:s}'".format(subject_id).fetch()[0]
subjects = Subjects & "subject_id like '{0:s}'".format(subject_id)
_results_check(subjects, subject_id, "Subject ID")
self.__tuple = subjects.fetch()[0]
else:
self.__tuple = {}
print("Empty Subject, not linked to any database entry!")