def get_parameters(self, data_product_id=''): # The set of Parameter objects describing each variable in this data product ret = IonObject(OT.ComputedListValue) ret.value = [] try: stream_id = self._get_stream_id(data_product_id) if not stream_id: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "There is no Stream associated with this DataProduct" else: stream_def_ids, _ = self.clients.resource_registry.find_objects(subject=stream_id, predicate=PRED.hasStreamDefinition, id_only=True) if not stream_def_ids: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "There is no StreamDefinition associated with this DataProduct" else: param_dict_ids, _ = self.clients.resource_registry.find_objects(subject=stream_def_ids[0], predicate=PRED.hasParameterDictionary, id_only=True) if not param_dict_ids: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "There is no ParameterDictionary associated with this DataProduct" else: ret.status = ComputedValueAvailability.PROVIDED ret.value = self.clients.dataset_management.read_parameter_contexts(param_dict_ids[0]) except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "FIXME: this message should say why the calculation couldn't be done" except Exception as e: raise e return ret
def get_data_ingestion_datetime(self, data_product_id=''): # Returns a temporal bounds object of the earliest/most recent values ingested into in the data product ret = IonObject(OT.ComputedStringValue) ret.value = "" ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "FIXME. also, should datetime be stored as a string?" return ret
def get_data_datetime(self, data_product_id=''): # Returns a temporal bounds object of the span of data product life span (may exist without getting a granule) ret = IonObject(OT.ComputedStringValue) ret.value = "" ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "FIXME. also, should datetime be stored as a string?" return ret
def get_data_contents_updated(self, data_product_id=''): # the datetime when the contents of the data were last modified in any way. # This is distinct from modifications to the data product attributes ret = IonObject(OT.ComputedStringValue) ret.value = "" ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "FIXME. also, should datetime be stored as a string?" return ret
def get_data_url(self, data_product_id=''): # The unique pointer to this set of data ret = IonObject(OT.ComputedStringValue) ret.value = "" ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "FIXME." return ret
def get_last_granule(self, data_product_id=''): # Provides information for users who have in the past acquired this data product, but for which that acquisition was terminated ret = IonObject(OT.ComputedDictValue) ret.value = {} try: dataset_ids, _ = self.clients.resource_registry.find_objects(subject=data_product_id, predicate=PRED.hasDataset, id_only=True) if not dataset_ids: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "No dataset associated with this data product" else: replay_granule = self.clients.data_retriever.retrieve_last_data_points(dataset_ids[0], number_of_points=1) #replay_granule = self.clients.data_retriever.retrieve_last_granule(dataset_ids[0]) rdt = RecordDictionaryTool.load_from_granule(replay_granule) ret.value = {k : rdt[k].tolist() for k,v in rdt.iteritems()} ret.status = ComputedValueAvailability.PROVIDED except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "FIXME: this message should say why the calculation couldn't be done" except Exception as e: raise e return ret
def get_active_user_subscriptions(self, data_product_id=''): # The UserSubscription objects for this data product ret = IonObject(OT.ComputedListValue) ret.value = [] try: ret.value = self.clients.user_notification.get_subscriptions(resource_id=data_product_id, include_nonactive=True) ret.status = ComputedValueAvailability.PROVIDED except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "Product subscription infromation not provided by UserNotificationService" except Exception as e: raise e return ret
def get_data_datetime(self, data_product_id=''): # Returns a temporal bounds object of the span of data product life span (may exist without getting a granule) ret = IonObject(OT.ComputedListValue) ret.value = [] ret.status = ComputedValueAvailability.NOTAVAILABLE try: dataset_id = self._get_dataset_id(data_product_id) bounds = self.clients.dataset_management.dataset_bounds(dataset_id) if 'time' in bounds and len(bounds['time']) == 2 : log.debug("get_data_datetime bounds['time']: %s" % str(dataset_id)) timeStart = IonTime(bounds['time'][0] - IonTime.JAN_1970) timeEnd = IonTime(bounds['time'][1] - IonTime.JAN_1970) ret.value = [str(timeStart), str(timeEnd)] ret.status = ComputedValueAvailability.PROVIDED except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "Dataset for this Data Product could not be located" except Exception as e: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "Could not calculate time range for this data product" return ret
def get_past_user_subscriptions(self, data_product_id=''): # Provides information for users who have in the past acquired this data product, but for which that acquisition was terminated ret = IonObject(OT.ComputedListValue) ret.value = [] try: ret.status = ComputedValueAvailability.PROVIDED raise NotFound #todo: ret.value = ??? except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "FIXME: this message should say why the calculation couldn't be done" except Exception as e: raise e return ret
def get_active_user_subscriptions(self, data_product_id=''): # The UserSubscription objects for this data product ret = IonObject(OT.ComputedListValue) ret.value = [] try: ret.status = ComputedValueAvailability.PROVIDED raise NotFound #todo: ret.value = ??? except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "FIXME: this message should say why the calculation couldn't be done" except Exception as e: raise e return ret
def get_number_active_subscriptions(self, data_product_id=''): # The number of current subscriptions to the data # Returns the storage size occupied by the data content of the resource, in bytes. ret = IonObject(OT.ComputedIntValue) ret.value = 0 try: ret.status = ComputedValueAvailability.PROVIDED raise NotFound #todo: ret.value = ??? except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "FIXME: this message should say why the calculation couldn't be done" except Exception as e: raise e return ret
def get_provenance(self, data_product_id=''): # Provides an audit trail for modifications to the original data ret = IonObject(OT.ComputedDictValue) try: ret.value = self.get_data_product_provenance(data_product_id) ret.status = ComputedValueAvailability.PROVIDED except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "Error in DataProuctMgmtService:get_data_product_provenance" except Exception as e: raise e return ret
def get_stored_data_size(self, data_product_id=''): # Returns the storage size occupied by the data content of the resource, in bytes. ret = IonObject(OT.ComputedIntValue) ret.value = 0 try: dataset_id = self._get_dataset_id(data_product_id) size_in_bytes = self.clients.dataset_management.dataset_size(dataset_id, in_bytes=True) ret.status = ComputedValueAvailability.PROVIDED ret.value = size_in_bytes except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "Dataset for this Data Product could not be located" except Exception as e: raise e return ret
def get_product_download_size_estimated(self, data_product_id=''): # Returns the size of the full data product if downloaded/presented in a given presentation form ret = IonObject(OT.ComputedIntValue) ret.value = 0 try: dataset_id = self._get_dataset_id(data_product_id) size_in_bytes = self.clients.dataset_management.dataset_size(dataset_id, in_bytes=False) ret.status = ComputedValueAvailability.PROVIDED ret.value = size_in_bytes except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "Dataset for this Data Product could not be located" except Exception as e: raise e return ret
def get_data_url(self, data_product_id=''): # The unique pointer to this set of data ret = IonObject(OT.ComputedStringValue) ret.value = "" erddap_host = CFG.get_safe('server.erddap.host','localhost') errdap_port = CFG.get_safe('server.erddap.port','8080') try: dataset_id = self._get_dataset_id(data_product_id) ret.value = string.join( ["http://", erddap_host, ":", str(errdap_port),"/erddap/griddap/", str(dataset_id), "_0.html"],'') ret.status = ComputedValueAvailability.PROVIDED log.debug("get_data_url: data_url: %s", ret.value) except NotFound: ret.status = ComputedValueAvailability.NOTAVAILABLE ret.reason = "Dataset for this Data Product could not be located" return ret