From cedfe614e74759808a37a6d30f6c44019430a5c0 Mon Sep 17 00:00:00 2001 From: Florez Ospina Juan Felipe Date: Thu, 20 Jun 2024 15:32:33 +0200 Subject: [PATCH] Implemented input argument to enable append information to exisintg attributes, which must take the values of either strings or lists. --- src/metadata_review_lib.py | 45 ++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 12 deletions(-) diff --git a/src/metadata_review_lib.py b/src/metadata_review_lib.py index 483e564..5744a55 100644 --- a/src/metadata_review_lib.py +++ b/src/metadata_review_lib.py @@ -329,27 +329,48 @@ class MetadataHarvester: "datasets": {} } - def add_project_info(self, key_or_dict, value=None): - self._add_info("project", key_or_dict, value) + def add_project_info(self, key_or_dict, value=None, append=False): + self._add_info("project", key_or_dict, value, append) - def add_sample_info(self, key_or_dict, value=None): - self._add_info("sample", key_or_dict, value) + def add_sample_info(self, key_or_dict, value=None, append=False): + self._add_info("sample", key_or_dict, value, append) - def add_environment_info(self, key_or_dict, value=None): - self._add_info("environment", key_or_dict, value) + def add_environment_info(self, key_or_dict, value=None, append=False): + self._add_info("environment", key_or_dict, value, append) - def add_instrument_info(self, key_or_dict, value=None): - self._add_info("instruments", key_or_dict, value) + def add_instrument_info(self, key_or_dict, value=None, append=False): + self._add_info("instruments", key_or_dict, value, append) - def add_dataset_info(self, key_or_dict, value=None): - self._add_info("datasets", key_or_dict, value) + def add_dataset_info(self, key_or_dict, value=None, append=False): + self._add_info("datasets", key_or_dict, value, append) - def _add_info(self, category, key_or_dict, value): + def _add_info(self, category, key_or_dict, value, append): """Internal helper method to add information to a category.""" if isinstance(key_or_dict, dict): self.metadata[category].update(key_or_dict) else: - self.metadata[category][key_or_dict] = value + if key_or_dict in self.metadata[category]: + if append: + current_value = self.metadata[category][key_or_dict] + + if isinstance(current_value, list): + + if not isinstance(value, list): + # Append the new value to the list + self.metadata[category][key_or_dict].append(value) + else: + self.metadata[category][key_or_dict] = current_value + value + + elif isinstance(current_value, str): + # Append the new value as a comma-separated string + self.metadata[category][key_or_dict] = current_value + ',' + str(value) + else: + # Handle other types (for completeness, usually not required) + self.metadata[category][key_or_dict] = [current_value, value] + else: + self.metadata[category][key_or_dict] = value + else: + self.metadata[category][key_or_dict] = value def get_metadata(self): return {