Esempio n. 1
0
    def get_asset_data(self, asset_id='', data_format='', data_filter=None):
        asset_obj = self._validate_resource_id("asset_id", asset_id,
                                               RT.Instrument)
        dataset_objs, _ = self.rr.find_objects(asset_id,
                                               PRED.hasDataset,
                                               RT.Dataset,
                                               id_only=False)
        if not dataset_objs:
            raise BadRequest("Could not find dataset")
        dataset_obj = dataset_objs[0]

        from ion.data.persist.hdf5_dataset import DatasetHDF5Persistence
        persistence = DatasetHDF5Persistence(dataset_obj._id,
                                             dataset_obj.schema_definition,
                                             "hdf5")
        data_filter1 = dict(transpose_time=True,
                            time_format="unix_millis",
                            max_rows=1000)
        data_filter1.update(data_filter or {})

        data_info = dict(dataset_id=dataset_obj._id,
                         ts_generated=get_ion_ts(),
                         data={},
                         info={},
                         num_rows=0)

        if data_filter1.get("get_info", None) is True:
            data_info["variables"] = [
                var_info["name"]
                for var_info in dataset_obj.schema_definition["variables"]
            ]
            data_info["schema"] = dataset_obj.schema_definition
            res_info = persistence.get_data_info(data_filter1)
            data_info["info"].update(res_info)

        if data_filter1.get("include_data", True):
            raw_data = persistence.get_data(data_filter=data_filter1)
            data_info["data"] = raw_data
            data_info["num_rows"] = len(
                raw_data.values()[0]) if raw_data else 0

        return data_info
Esempio n. 2
0
    def download_asset_data(self,
                            asset_id='',
                            data_format='',
                            data_filter=None):
        asset_obj = self._validate_resource_id("asset_id", asset_id,
                                               RT.Instrument)
        dataset_objs, _ = self.rr.find_objects(asset_id,
                                               PRED.hasDataset,
                                               RT.Dataset,
                                               id_only=False)
        if not dataset_objs:
            raise BadRequest("Could not find dataset")
        dataset_obj = dataset_objs[0]

        if data_format and data_format != "hdf5":
            raise BadRequest("Unsupported download data format")

        from ion.data.persist.hdf5_dataset import DatasetHDF5Persistence
        persistence = DatasetHDF5Persistence(dataset_obj._id,
                                             dataset_obj.schema_definition,
                                             "hdf5")
        data_filter1 = dict(transpose_time=True,
                            time_format="unix_millis",
                            max_rows=100000,
                            start_time=get_ion_ts_millis() - 86400000)
        data_filter1.update(data_filter or {})
        temp_filename = persistence.get_data_copy(data_filter=data_filter1)

        resp_hdrs = {
            "Content-Disposition":
            'attachment; filename="ds_%s.hdf5"' % asset_obj._id
        }

        mr = MediaResponse(media_mimetype="application/octet-stream",
                           body=temp_filename,
                           internal_encoding="filename",
                           response_headers=resp_hdrs)

        return mr