@@ -2220,16 +2220,17 @@ def setDatasetValuesByUuid(self, obj_uuid, data, slices=None, format="json"):
2220
2220
if dset is None :
2221
2221
msg = "Dataset: " + obj_uuid + " not found"
2222
2222
self .log .info (msg )
2223
- raise IOError (errno .ENXIO , msg )
2223
+ raise IOError (errno .ENXIO , msg )
2224
2224
2225
2225
dt = dset .dtype
2226
2226
typeItem = getTypeItem (dt )
2227
2227
itemSize = getItemSize (typeItem )
2228
2228
if itemSize == "H5T_VARIABLE" and format == "binary" :
2229
2229
msg = "Only JSON is supported for for this data type"
2230
2230
self .log .info (msg )
2231
- raise IOError (errno .EINVAL , msg )
2232
-
2231
+ raise IOError (errno .EINVAL , msg )
2232
+
2233
+
2233
2234
# need some special conversion for compound types --
2234
2235
# each element must be a tuple, but the JSON decoder
2235
2236
# gives us a list instead.
@@ -2251,8 +2252,8 @@ def setDatasetValuesByUuid(self, obj_uuid, data, slices=None, format="json"):
2251
2252
if slices is None :
2252
2253
# write entire dataset
2253
2254
if format == "binary" :
2254
- if len (data ) != dset .size :
2255
- msg = "Expected " + dset .size + " bytes, but got: " + len (data )
2255
+ if len (data ) != ( dset .size * itemSize ) :
2256
+ msg = "Expected " + ( dset .size * itemSize ) + " bytes, but got: " + len (data )
2256
2257
self .log .info (msg )
2257
2258
raise IOError (errno .EINVAL , msg )
2258
2259
arr = np .fromstring (data , dtype = dset .dtype )
@@ -2271,23 +2272,35 @@ def setDatasetValuesByUuid(self, obj_uuid, data, slices=None, format="json"):
2271
2272
self .log .error ("setDatasetValuesByUuid: number of dims in selection not same as rank" )
2272
2273
return False
2273
2274
else :
2274
-
2275
2275
npoints = 1
2276
2276
for i in range (rank ):
2277
2277
s = slices [i ]
2278
2278
count = (s .stop - s .start ) // s .step
2279
2279
npoints *= count
2280
2280
if count <= 0 :
2281
2281
self .log .error ("invalid slice specification" )
2282
- if count == 1 and len (dset .dtype ) > 1 :
2283
- # convert to tuple for compound singleton writes
2284
- data = tuple (data )
2285
-
2286
- if rank == 1 :
2287
- slice = slices [0 ]
2288
- dset [slice ] = data
2282
+
2283
+ if format == "binary" :
2284
+ np_shape = []
2285
+ for i in range (rank ):
2286
+ s = slices [i ]
2287
+ np_shape .append ( (s .stop - s .start ) )
2288
+ arr = np .fromstring (data , dtype = dset .dtype )
2289
+ arr .reshape (np_shape )
2290
+ if rank == 1 :
2291
+ s = slices [0 ]
2292
+ dset [s ] = arr
2293
+ else :
2294
+ dset [slices ] = arr
2289
2295
else :
2290
- dset [slices ] = data
2296
+ if count == 1 and len (dset .dtype ) > 1 :
2297
+ # convert to tuple for compound singleton writes
2298
+ data = tuple (data )
2299
+ elif rank == 1 :
2300
+ s = slices [0 ]
2301
+ dset [s ] = data
2302
+ else :
2303
+ dset [slices ] = data
2291
2304
2292
2305
# update modified time
2293
2306
self .setModifiedTime (obj_uuid )
@@ -2297,7 +2310,7 @@ def setDatasetValuesByUuid(self, obj_uuid, data, slices=None, format="json"):
2297
2310
setDatasetValuesByPointSelection - Update the dataset values using the given
2298
2311
data and point selection
2299
2312
"""
2300
- def setDatasetValuesByPointSelection (self , obj_uuid , data , points ):
2313
+ def setDatasetValuesByPointSelection (self , obj_uuid , data , points , format = "json" ):
2301
2314
dset = self .getDatasetObjByUuid (obj_uuid )
2302
2315
# need some special conversion for compound types --
2303
2316
# each element must be a tuple, but the JSON decoder
0 commit comments