diff --git a/hed/tools/analysis/annotation_util.py b/hed/tools/analysis/annotation_util.py index 085da3bb..1f7b9476 100644 --- a/hed/tools/analysis/annotation_util.py +++ b/hed/tools/analysis/annotation_util.py @@ -173,6 +173,20 @@ def merge_hed_dict(sidecar_dict, hed_dict): sidecar_dict[key]['Levels'] = value_dict['Levels'] +def str_list(obj_list): + """ Return a list with the objects converted to string except for None elements. + + Parameters: + obj_list (list): A list of objects that are None or have a str method. + + Returns: + list: A list with the objects converted to strings -- except None values are preserved. + """ + + # Using list comprehension to convert non-None items to strings + return [str(item) if item is not None else None for item in obj_list] + + def str_to_tabular(tsv_str, sidecar=None): """ Return a TabularInput a tsv string. diff --git a/tests/tools/analysis/test_annotation_util.py b/tests/tools/analysis/test_annotation_util.py index 3df6a381..8f4f5994 100644 --- a/tests/tools/analysis/test_annotation_util.py +++ b/tests/tools/analysis/test_annotation_util.py @@ -6,11 +6,11 @@ from hed import schema as hedschema from hed.errors import HedFileError from hed.models.sidecar import Sidecar +from hed.models.hed_string import HedString from hed.tools.analysis.annotation_util import check_df_columns, df_to_hed, extract_tags,\ - hed_to_df, merge_hed_dict, strs_to_sidecar, str_to_tabular + hed_to_df, merge_hed_dict, strs_to_sidecar, str_to_tabular, str_list from hed.tools.analysis.annotation_util import _flatten_cat_col, _flatten_val_col, _get_value_entry, _tag_list_to_str, \ _update_cat_dict, generate_sidecar_entry -# from hed.tools.analysis.annotation_util import _find_last_pos, _find_first_pos, trim_back, trim_front from hed.tools.analysis.tabular_summary import TabularSummary from hed.tools.util.io_util import get_file_list @@ -308,6 +308,21 @@ def test_strs_to_tabular(self): events_contents = file.read() tab_in = str_to_tabular(events_contents, sidecar=self.json_path) + def test_str_list(self): + # schema + # list1 = [HedString('Red, Sensory-event', schema)] + list1 = ['abc', '', None, 3.24] + str_list1 = str_list(list1) + self.assertEqual(len(str_list1), len(list1)) + self.assertIsNone(str_list1[2], None) + self.assertEqual(str_list1[3], '3.24') + self.assertFalse(str_list1[1]) + list2 = [HedString('Red, Sensory-event', self.hed_schema), None, HedString('', self.hed_schema)] + str_list2 = str_list(list2) + self.assertEqual(len(str_list2), len(list2)) + self.assertIsNone(str_list2[1], None) + self.assertEqual(str_list2[0], 'Red,Sensory-event') + self.assertEqual(str_list2[2], '') def test_flatten_cat_col(self): col1 = self.sidecar2c["a"]