def add_data_product_version_to_collection(self, data_product_id='', data_product_collection_id='', version_name='', version_description=''): dp_collection_obj =self.clients.resource_registry.read(data_product_collection_id) #retrieve the stream definition for both the new data product to add to this collection and the base data product for this collection new_data_product_obj = self.clients.resource_registry.read(data_product_id) new_data_product_streams, _ = self.clients.resource_registry.find_objects(subject=data_product_id, predicate=PRED.hasStream, object_type=RT.Stream, id_only=True) validate_is_not_none(new_data_product_streams, 'The data product to add to the collection must have an associated stream') new_data_product_streamdefs, _ = self.clients.resource_registry.find_objects(subject=new_data_product_streams[0], predicate=PRED.hasStreamDefinition, object_type=RT.StreamDefinition, id_only=True) base_data_product_id = dp_collection_obj.version_list[0].data_product_id base_data_product_obj = self.clients.resource_registry.read(base_data_product_id) base_data_product_streams, _ = self.clients.resource_registry.find_objects(subject=base_data_product_id, predicate=PRED.hasStream, object_type=RT.Stream, id_only=True) validate_is_not_none(base_data_product_streams, 'The base data product in the collection must have an associated stream') base_data_product_streamdefs, _ = self.clients.resource_registry.find_objects(subject=base_data_product_streams[0], predicate=PRED.hasStreamDefinition, object_type=RT.StreamDefinition, id_only=True) if not self.clients.pubsub_management.compare_stream_definition(stream_definition1_id=new_data_product_streamdefs[0], stream_definition2_id=base_data_product_streamdefs[0]): raise BadRequest("All Data Products in a collection must have equivelent stream definitions.") #todo: validate that the spatial/temporal domain match the base data product dpv = DataProductVersion() dpv.name = version_name dpv.description = version_description dpv.data_product_id = data_product_id dp_collection_obj.version_list.append(dpv) self.clients.resource_registry.update(dp_collection_obj) self.clients.resource_registry.create_association( subject=data_product_collection_id, predicate=PRED.hasVersion, object=data_product_id) return
def create_data_product_collection(self, data_product_id='', collection_name='', collection_description=''): """Define a set of an existing data products that represent an improvement in the quality or understanding of the information. """ validate_is_not_none(data_product_id, 'A data product identifier must be passed to create a data product version') dpv = DataProductVersion() dpv.name = 'base' dpv.description = 'the base version on which subsequent versions are built' dpv.data_product_id = data_product_id dp_collection_obj = IonObject(RT.DataProductCollection, name=collection_name, description=collection_description, version_list=[dpv]) data_product_collection_id, rev = self.clients.resource_registry.create(dp_collection_obj) self.clients.resource_registry.create_association( subject=data_product_collection_id, predicate=PRED.hasVersion, object=data_product_id) return data_product_collection_id