def _updateDataset_(self, parent, dataset_name, numpy_array, attributes, **kwargs): """ Update a dataset in the data file. If the dataset does not exist, it is created. Returns a pointer to the dataset. """ dataset_key = safeDataKey(dataset_name) if dataset_key not in parent.keys(): errmsg = "'%s' dataset is not in current data file." raise IOError, errmsg % dataset_name if len(numpy_array.shape) == 3: parent[dataset_key][:, :, :] = numpy_array[:, :, :] elif len(numpy_array.shape) == 2: parent[dataset_key][:, :] = numpy_array[:, :] elif len(numpy_array.shape) == 1: parent[dataset_key][:] = numpy_array[:] dataset = parent[dataset_key] for attr_name, attr_value in attributes.items(): try: dataset.attrs[safeDataKey(attr_name)] = safevalue(attr_value) except Exception as e: errmsg = "Could not set attribute '%s' to '%s' for dataset '%s'" ds_name = dataset.name if ds_name.startswith('/'): ds_name = ds_name[1:] errmsg = errmsg % (attr_name, str(attr_value), ds_name) e.args = (errmsg, ) + e.args raise return dataset
def __init__(self, name, access_key=None, **kwargs): self.name = safeDataKey(name) if access_key is None: self.access_key = self.name else: self.access_key = safeDataKey(access_key) for var_name in kwargs.keys(): setattr(self, var_name, kwargs[var_name])
def walkToObject(root_object, object_key): if isinstance(object_key, basestring): path = [safeDataKey(key) for key in object_key.split('.')] else: path = [safeDataKey(key) for key in object_key] try: _object = root_object[path[0]] except KeyError: raise KeyError, WALK_ERRMSG % (fullObjectPath(root_object), path[0]) if len(path) == 1: return _object else: return walkToObject(_object, path[1:])
def _getObjectAttribute_(self, _object, attr_name): """ Returns a the value of a single attribute of an object """ try: return _object.attrs[safeDataKey(attr_name)] except Exception as e: obj_name = fullObjectPath(_object) if obj_name.startswith('/'): obj_name = obj_name[1:] errmsg = "ERROR retrieving attribute '%s' from object '%s'" e.args = (errmsg % (attr_name, obj_name), ) + e.args raise e
def _setObjectAttribute_(self, _object, attr_name, attr_value): """ Returns a dictionary of attr_name/attr_value pairs for all setable attributes of the dataset indicates by dataset_key. """ try: _object.attrs[safeDataKey(attr_name)] = safestring(attr_value) except Exception as e: errmsg = "Could not set attribute '%s' to '%s' for object '%s'" obj_name = fullObjectPath(_object) if obj_name.startswith('/'): obj_name = obj_name[1:] errmsg = errmsg % (attr_name, str(attr_value), obj_name) e.args = (errmsg, ) + e.args
def _deleteObjectAttribute_(self, _object, attr_name): """ Deletes an attribute of an object. """ try: del _object.attrs[safeDataKey(attr_name)] except Exception as e: errmsg = "Could not delete attribute '%s' of object '%s'" obj_name = fullObjectPath(_object) if obj_name.startswith('/'): obj_name = obj_name[1:] errmsg = errmsg % (attr_name, obj_name) e.args = (errmsg, ) + e.args raise
def _getObject_(self, parent, object_key): """ Returns the object indicated by object_key. """ try: return parent[safeDataKey(object_key)] except KeyError as e: errmsg = "HDF5 file does not have a data object named '%s'" e.args = (errmsg % object_key, ) + e.args raise e except Exception as e: errmsg = "Error during attempt to access data object named '%s'" e.args = (errmsg % object_key, ) + e.args raise e
def _createGroup_(self, parent, group_name, **kwargs): """ Creates a new group in the parent and returns a pointer to it. Raises IOError exception if the group already exists. """ group_key = safeDataKey(group_name) if group_key in parent.keys(): errmsg = "'%s' group already exists in %s" raise IOError, errmsg % (group_name, fullObjectPath(parent)) group = parent.create_group(group_name) if kwargs: for attr_name, attr_value in kwargs.items(): self._setObjectAttribute_(group, attr_name, attr_value) return group
def _createDataset_(self, parent, dataset_name, numpy_array, attributes, **kwargs): """ Creates a new dataset in the data file and returns a pointer to it. Raises IOError exception if the dataset already exists. """ dataset_key = safeDataKey(dataset_name) if dataset_key in parent.keys(): errmsg = "'%s' dataset already exists in current data file." raise IOError, errmsg % dataset_name create_args = {} for arg_name in kwargs: create_args[safe_name(arg_name)] = kwargs[arg_name] if 'maxshape' in create_args: if 'dtype' not in create_args: raise IOError, "'dtype' is required for extendable datasets." if len(numpy_array) != len(create_args['maxshape']): errmg = '3rd argument must be the initial shape of the array.' raise IOError, errmsg initial_shape = numpy_array dataset = parent.create_dataset(dataset_key, initial_shape, **create_args) else: if 'dtype' not in create_args\ and numpy_array.dtype == N.dtype(object): create_args['dtype'] = h5py.new_vlen(str) dataset = parent.create_dataset(dataset_key, data=numpy_array, **create_args) for attr_name, attr_value in attributes.items(): if attr_name != 'dtype' and attr_value is not None: dataset.attrs[safeDataKey(attr_name)] = safevalue(attr_value) return dataset
def getIndexedStations(self, metadata='all', criteria=None, sort_by=None): manager = self.getFileManager('index', mode='r') dataset_names = self._parseMetadata(metadata, manager) _criteria = self._validCriteria(criteria, dataset_names) datasets = manager.getDataWhere(dataset_names, _criteria) manager.closeFile() stations = [] for stn_indx in range(len(datasets[0])): station = {} for indx in range(len(dataset_names)): station[safeDataKey(dataset_names[indx])] =\ safevalue(datasets[indx][stn_indx]) stations.append(station) if sort_by is not None: stations = self._sortStations(stations, sort_by) return stations
def _deleteObject_(self, parent, object_key): """ deletes the object indicated by object_key. """ key = safeDataKey(object_key) if key in parent.keys(): del parent[key]