diff --git a/util.py b/util.py index 4920332..95b0368 100644 --- a/util.py +++ b/util.py @@ -157,33 +157,58 @@ def deep_get(dictionary, keys, default=None): return reduce(lambda d, key: d.get(key, default) if isinstance(d, dict) else default, keys, dictionary) +def _get_string(dictionary: dict, key:str, alt_key=None, default=None): + p = [] + value = default + find_key_recursive(dictionary, key, p) + if len(p) > 0: + value = deep_get(dictionary, p, default) + elif alt_key: + find_key_recursive(dictionary, alt_key, p) + value = deep_get(dictionary, p, default) + if value != default and isinstance(value, dict): + value = default + return value + + +def _get_date(dictionary: dict, key: str, alt_key=None, default=None): + p = [] + value = default + find_key_recursive(dictionary, key, p) + if len(p) > 0: + value = dt.date.fromisoformat(deep_get(dictionary, p, default)) + elif alt_key: + find_key_recursive(dictionary, alt_key, p) + value = dt.date.fromisoformat(deep_get(dictionary, p, default)) + if value != default and isinstance(value, dict): + value = default + return value + + def read_dataset_info(info_file): exp = "" quality = "" comment = "" rec_date = None has_nix = False + setup = "" + rec_duration = 0.0 if not os.path.exists(info_file): - return exp, rec_date, quality, comment, has_nix + return exp, rec_date, quality, comment, has_nix, rec_duration, setup has_nix = len(glob.glob(os.path.sep.join(info_file.split(os.path.sep)[:-1]) + os.path.sep + "*.nix")) > 0 info = read_info_file(info_file) p = [] - find_key_recursive(info, "Experimenter", p) - if len(p) > 0: - exp = deep_get(info, p) - p = [] - find_key_recursive(info, "Date", p) - if len(p) > 0: - rec_date = dt.date.fromisoformat(deep_get(info, p)) - p = [] - find_key_recursive(info, "Recording quality", p) - if len(p) > 0: - quality = deep_get(info, p) - find_key_recursive(info, "Comment", p) - if len(p) > 0: - comment = deep_get(info, p, default="") - - return exp, rec_date, quality, comment, has_nix + exp = _get_string(info, "Experimenter") + rec_date = _get_date(info, "Date") + quality = _get_string(info, "Recording quality") + comment = _get_string(info, "Comment", default="") + rec_duration = _get_string(info, "Recording duration", "Recording duratio", default=0.0) + if rec_duration != 0.0 and isinstance(rec_duration, str) and "min" in rec_duration: + rec_duration = rec_duration[:-3] + setup_info = _get_string(info, "Setup", default=None) + if setup_info and isinstance(setup_info, dict): + setup = _get_string(setup_info, "Identifier") + return exp, rec_date, quality, comment, has_nix, rec_duration, setup def nix_metadata_to_dict(section):