def _set_calibration_for_data_product(self, dp_obj, dev_cfg): from ion.util.direct_coverage_utils import DirectCoverageAccess from coverage_model import SparseConstantType log.debug("Setting calibration for data product '%s'", dp_obj.name) dataset_ids, _ = self.rr.find_objects(dp_obj, PRED.hasDataset, id_only=True) publisher = EventPublisher(OT.InformationContentModifiedEvent) if not dataset_ids: data_product_management = DataProductManagementServiceProcessClient(process=self) log.debug(" Creating dataset for data product %s", dp_obj.name) data_product_management.create_dataset_for_data_product(dp_obj._id) dataset_ids, _ = self.rr.find_objects(dp_obj, PRED.hasDataset, id_only=True) if not dataset_ids: raise NotFound('No datasets were found for this data product, ensure that it was created') for dataset_id in dataset_ids: # Synchronize with ingestion with DirectCoverageAccess() as dca: cov = dca.get_editable_coverage(dataset_id) # Iterate over the calibrations for cal_name, contents in dev_cfg.iteritems(): if cal_name in cov.list_parameters() and isinstance(cov.get_parameter_context(cal_name).param_type, SparseConstantType): value = float(contents['value']) log.info(' Updating Calibrations for %s in %s', cal_name, dataset_id) cov.set_parameter_values(cal_name, value) else: log.warn(" Calibration %s not found in dataset", cal_name) publisher.publish_event(origin=dataset_id, description="Calibrations Updated") publisher.close() log.info("Calibration set for data product '%s' in %s coverages", dp_obj.name, len(dataset_ids))