From d542641f7d9e1a5d3182981b6d594d0a0602c0e6 Mon Sep 17 00:00:00 2001 From: Jan Grewe Date: Wed, 18 Sep 2019 18:06:34 +0200 Subject: [PATCH] improve feedback upon unknown or ambiguous ids --- fishbook/fishbook.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/fishbook/fishbook.py b/fishbook/fishbook.py index 7adbcd1..44a36ed 100644 --- a/fishbook/fishbook.py +++ b/fishbook/fishbook.py @@ -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!")