Example #1
0
 def _create_or_update(self, mn_client, cn_client, data_object):
     """ Either update the specified pid if it already exists or create a new one.
     """
     if not data_object:
         raise Exception("data object cannot be null")
     if not data_object.pid:
         raise Exception("data object must have a pid")
     if not data_object.fname:
         raise Exception("data object must have a file to write")
     if not data_object.meta:
         raise Exception("data object must have system metadata")
     curr_sysmeta = utils.get_sysmeta_by_pid(data_object.pid, True, cn_client, mn_client)
     # Create
     if not curr_sysmeta:
         with open(utils.expand_path(data_object.fname), "r") as f:
             try:
                 return mn_client.create(data_object.pid, f, data_object.meta)
             except DataONEException as e:
                 raise Exception("Unable to create Science Object on Member Node\n{0}".format(e.friendly_format()))
     # Update
     else:
         data_object.meta.serialVersion = curr_sysmeta.serialVersion + 1
         with open(utils.expand_path(data_object.fname), "r") as f:
             try:
                 return mn_client.update(data_object.pid, f, data_object.pid, data_object.meta)
             except DataONEException as e:
                 raise Exception("Unable to update Science Object on Member Node\n{0}".format(e.friendly_format()))
     # Nothing good happened.
     return None
Example #2
0
 def _create_object(self, item, mn_client=None, **kwargs):
     """ Create an object in DataONE. """
     path = utils.expand_path(item.fname)
     # cli_util.assert_file_exists(path)
     assert os.path.exists(path)
     if "format_id" in kwargs:
         del kwargs["format_id"]
     sysmeta = utils.create_sysmeta_from_path(item.pid, path, format_id=item.format_id, **kwargs)
     if mn_client is None:
         mn_client = utils.get_d1_mn_client()
     with open(path, "r") as f:
         try:
             result = mn_client.create(item.pid, f, sysmeta)
             print 'Created object "%s"' % item.pid
             return result
         except DataONEException as e:
             raise Exception("Unable to create Science Object on Member Node\n{0}".format(e.friendly_format()))