diff --git a/src/metadata_review_lib.py b/src/metadata_review_lib.py index a74863c..c7d7428 100644 --- a/src/metadata_review_lib.py +++ b/src/metadata_review_lib.py @@ -193,7 +193,21 @@ def second_save_metadata_review(review_yaml_file_path, reviewer_attrs): print('Nothing to commit.') +def parse_attribute(attr_value): + dtype = [] + values_list = [] + max_length = 100 + for key in attr_value.keys(): + if (not key=='rename_as'): + dtype.append((key,f'S{max_length}')) + values_list.append(attr_value[key]) + if len(values_list)>2: + new_attr_value = np.array([tuple(values_list)],dtype=dtype) + else: + new_attr_value = attr_value['value'] + + return new_attr_value def third_update_hdf5_file_with_review(input_hdf5_file, yalm_review_file, reviewer_attrs = {}, hdf5_upload : bool = False): @@ -240,41 +254,37 @@ def third_update_hdf5_file_with_review(input_hdf5_file, yalm_review_file, review for attr_name, attr_value in yaml_obj['attributes'].items(): #attr_value = yaml_obj['attributes'][attr_name] + if not isinstance(attr_value,dict): + attr_value = {'rename_as':attr_name, 'value':attr_value, 'delete': False} + + if attr_value.get('delete',False) and (attr_name in hdf5_obj.attrs.keys()): + hdf5_obj.attrs.__delitem__(attr_name) + continue + # Check whether attr_name belongs to the existing attributes of hdf5_obj if attr_name in hdf5_obj.attrs.keys(): #else: # renaming attribute and possibly change of value assigment - if isinstance(attr_value,dict): - # Retreive possibly new attribute's name and value - new_attr_name = attr_value.get('rename_as',attr_name) # if 'rename_as' is a key in attr_value returns the value, otherwise it return the existing value - - dtype = [] - values_list = [] - max_length = 100 - for key in attr_value.keys(): - if (not key=='rename_as'): - dtype.append((key,f'S{max_length}')) - values_list.append(attr_value.get(key,hdf5_obj.attrs[attr_name])) - if len(values_list)>2: - new_attr_value = np.array([tuple(values_list)],dtype=dtype) - else: - new_attr_value = attr_value.get('value',hdf5_obj.attrs[attr_name]) - hdf5_obj.attrs[new_attr_name] = new_attr_value + #if isinstance(attr_value,dict): + # # Retreive possibly new attribute's name and value + new_attr_name = attr_value.get('rename_as',attr_name) # if 'rename_as' is a key in attr_value returns the value, otherwise it return the existing value + + hdf5_obj.attrs[new_attr_name] = parse_attribute(attr_value) - # Remove from hdf5_obj.attrs attribute w/ name: attr_name if - # yaml indicates a renaming of the attribute. - if not (new_attr_name == attr_name): - hdf5_obj.attrs.__delitem__(attr_name) - else: - hdf5_obj.attrs[attr_name] = attr_value + # Remove from hdf5_obj.attrs attribute w/ name: attr_name if + # yaml indicates a renaming of the attribute. + if not (new_attr_name == attr_name): + hdf5_obj.attrs.__delitem__(attr_name) + #else: + # hdf5_obj.attrs[attr_name] = attr_value else: # attribute inclusion - if isinstance(attr_value,dict): + #if isinstance(attr_value,dict): # Retreive new attribute's name and value - new_attr_name = attr_value.get('rename_as',attr_name) # if 'rename_as' is a key in attr_value returns the value, otherwise it return the existing value - new_attr_value = attr_value.get('value',np.nan) # TODO: let the user know why np.nan might have been assigned - hdf5_obj.attrs[new_attr_name] = new_attr_value - else: - hdf5_obj.attrs[attr_name] = attr_value + # new_attr_name = attr_value.get('rename_as',attr_name) # if 'rename_as' is a key in attr_value returns the value, otherwise it return the existing value + # new_attr_value = attr_value.get('value',np.nan) # TODO: let the user know why np.nan might have been assigned + hdf5_obj.attrs[attr_name] = parse_attribute(attr_value) + #else: + # hdf5_obj.attrs[attr_name] = attr_value # Recreate/or update yaml representation of updated input_hdf5_file. output_yml_filename_path = hdf5_vis.take_yml_snapshot_of_hdf5_file(input_hdf5_file)