File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -71,6 +71,14 @@ def write(attr_name, value)
7171 values = normalize_data ( value )
7272 datatype_id = datatype_id_for ( values )
7373
74+ exists = HDF5 ::FFI . H5Aexists ( @dataset_id , attr_name )
75+ raise HDF5 ::Error , "Failed to check attribute existence: #{ attr_name } " if exists . negative?
76+
77+ if exists . positive?
78+ status = HDF5 ::FFI . H5Adelete ( @dataset_id , attr_name )
79+ raise HDF5 ::Error , "Failed to replace attribute: #{ attr_name } " if status < 0
80+ end
81+
7482 dims = ::FFI ::MemoryPointer . new ( :ulong_long , 1 )
7583 dims . write_array_of_ulong_long ( [ values . length ] )
7684 dataspace_id = HDF5 ::FFI . H5Screate_simple ( 1 , dims , nil )
Original file line number Diff line number Diff line change @@ -105,6 +105,22 @@ class HDF5Test < Test::Unit::TestCase
105105 end
106106 end
107107
108+ test 'dataset attrs overwrite existing value' do
109+ Dir . mktmpdir do |dir |
110+ path = File . join ( dir , 'attribute-overwrite.h5' )
111+
112+ HDF5 ::File . create ( path ) do |file |
113+ dataset = file . create_dataset ( 'values' , [ 1 , 2 , 3 ] )
114+ dataset . attrs [ 'scale' ] = 42
115+ dataset . attrs [ 'scale' ] = 100
116+ end
117+
118+ HDF5 ::File . open ( path ) do |file |
119+ assert_equal ( [ 100 ] , file [ 'values' ] . attrs [ 'scale' ] )
120+ end
121+ end
122+ end
123+
108124 test 'group list_datasets returns only datasets' do
109125 Dir . mktmpdir do |dir |
110126 path = File . join ( dir , 'group-list.h5' )
You can’t perform that action at this time.
0 commit comments