67
67
"""
68
68
import errno
69
69
import time
70
- import base64
71
70
import h5py
72
71
import numpy as np
73
72
import uuid
@@ -2286,7 +2285,10 @@ def setDatasetValuesByUuid(self, obj_uuid, data, slices=None, format="json"):
2286
2285
s = slices [i ]
2287
2286
np_shape .append ( (s .stop - s .start ) )
2288
2287
arr = np .fromstring (data , dtype = dset .dtype )
2289
- arr .reshape (np_shape )
2288
+ print ("np_shape:" , np_shape )
2289
+ arr = arr .reshape (np_shape )
2290
+ print ("arr:" , arr )
2291
+
2290
2292
if rank == 1 :
2291
2293
s = slices [0 ]
2292
2294
dset [s ] = arr
@@ -2312,33 +2314,61 @@ def setDatasetValuesByUuid(self, obj_uuid, data, slices=None, format="json"):
2312
2314
"""
2313
2315
def setDatasetValuesByPointSelection (self , obj_uuid , data , points , format = "json" ):
2314
2316
dset = self .getDatasetObjByUuid (obj_uuid )
2317
+
2318
+ if format not in ("json" , "binary" ):
2319
+ msg = "only json and binary formats are supported"
2320
+ self .log .info (msg )
2321
+ raise IOError (errno .EINVAL , msg )
2322
+
2323
+ if format == "binary" and type (data ) is not bytes :
2324
+ msg = "data must be of type bytes for binary writing"
2325
+ self .log .info (msg )
2326
+ raise IOError (errno .EINVAL , msg )
2327
+
2328
+ if dset is None :
2329
+ msg = "Dataset: " + obj_uuid + " not found"
2330
+ self .log .info (msg )
2331
+ raise IOError (errno .ENXIO , msg )
2332
+
2333
+ dt = dset .dtype
2334
+ typeItem = getTypeItem (dt )
2335
+ itemSize = getItemSize (typeItem )
2336
+ if itemSize == "H5T_VARIABLE" and format == "binary" :
2337
+ msg = "Only JSON is supported for for this data type"
2338
+ self .log .info (msg )
2339
+ raise IOError (errno .EINVAL , msg )
2340
+
2315
2341
# need some special conversion for compound types --
2316
2342
# each element must be a tuple, but the JSON decoder
2317
2343
# gives us a list instead.
2318
- if len (dset .dtype ) > 1 and type (data ) in (list , tuple ):
2344
+ if format == "json" and len (dset .dtype ) > 1 and type (data ) in (list , tuple ):
2319
2345
converted_data = []
2320
2346
for i in range (len (data )):
2321
2347
converted_data .append (self .toTuple (data [i ]))
2322
2348
data = converted_data
2323
- if dset is None :
2324
- msg = "Dataset: " + obj_uuid + " not found"
2325
- self .log .info (msg )
2326
- raise IOError (errno .ENXIO , msg )
2349
+
2327
2350
rank = len (dset .shape )
2351
+
2352
+ if format == "json" :
2328
2353
2329
- try :
2330
- i = 0
2331
- for point in points :
2332
- if rank == 1 :
2333
- dset [[point ]] = data [i ]
2334
- else :
2335
- dset [tuple (point )] = data [i ]
2336
- i += 1
2337
- except ValueError :
2338
- # out of range error
2339
- msg = "setDatasetValuesByPointSelection, out of range error"
2340
- self .log .info (msg )
2341
- raise IOError (errno .EINVAL , msg )
2354
+ try :
2355
+ i = 0
2356
+ for point in points :
2357
+ if rank == 1 :
2358
+ dset [[point ]] = data [i ]
2359
+ else :
2360
+ dset [tuple (point )] = data [i ]
2361
+ i += 1
2362
+ except ValueError :
2363
+ # out of range error
2364
+ msg = "setDatasetValuesByPointSelection, out of range error"
2365
+ self .log .info (msg )
2366
+ raise IOError (errno .EINVAL , msg )
2367
+
2368
+ else :
2369
+ #binary
2370
+ arr = np .fromstring (data , dtype = dset .dtype )
2371
+ dset [points ] = arr # coordinate write
2342
2372
2343
2373
# update modified time
2344
2374
self .setModifiedTime (obj_uuid )
0 commit comments