Esempio n. 1
0
    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
Esempio n. 2
0
 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])
Esempio n. 3
0
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:])
Esempio n. 4
0
 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
Esempio n. 5
0
 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
Esempio n. 6
0
 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
Esempio n. 7
0
 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
Esempio n. 8
0
    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
Esempio n. 9
0
    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
Esempio n. 11
0
 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]