diff --git a/src/python/OBis/obis/dm/data_mgmt.py b/src/python/OBis/obis/dm/data_mgmt.py index 7308cc39315ab1fd61c80e81eafe98bd0a0f4c6c..e5d25c68856ea60f08ec7f586973a100565470e4 100644 --- a/src/python/OBis/obis/dm/data_mgmt.py +++ b/src/python/OBis/obis/dm/data_mgmt.py @@ -420,6 +420,7 @@ class OpenbisSync(object): return CommandResult(returncode=0, output=""), edms except ValueError as e: # TODO If the error is edms already exists, retrieve it. + # edms = self.openbis.get_external_data_management_system(external_dms_id) return CommandResult(returncode=-1, output=str(e)), None def create_data_set_code(self): @@ -450,22 +451,25 @@ class OpenbisSync(object): except ValueError as e: return CommandResult(returncode=-1, output=str(e)), None - def commit_metadata_updates(self): + def commit_metadata_updates(self, msg_fragment=None): folder = self.config_resolver.local_public_config_folder_path() self.git_wrapper.git_add(folder) - self.git_wrapper.git_commit("OBIS: Update openBIS metadata cache.") - - def run(self): - # TODO Write mementos in case openBIS is unreachable - # - write a file to the .git/obis folder containing the commit id. Filename includes a timestamp so they can be sorted. + if msg_fragment is None: + msg = "OBIS: Update openBIS metadata cache." + else: + msg = "OBIS: {}".format(msg_fragment) + self.git_wrapper.git_commit(msg) + def prepare_run(self): result = self.check_configuration() if result.failure(): return result result = self.login() if result.failure(): return result + return CommandResult(returncode=0, output="") + def prepare_external_dms(self): # If there is no external data management system, create one. external_dms = self.get_external_data_management_system() if external_dms is None: @@ -474,17 +478,63 @@ class OpenbisSync(object): return result self.config_resolver.set_value_for_parameter('external_dms_id', external_dms.code, 'local') + return CommandResult(returncode=0, output=external_dms) + + def run_workaround(self): + # Do not create the data set code, since it is ignored due to a bug. + + result = self.prepare_run() + if result.failure(): + return result + + result = self.prepare_external_dms() + if result.failure(): + return result + external_dms = result.output + + self.commit_metadata_updates() + + # create a data set, using the existing data set as a parent, if there is one + result, data_set = self.create_data_set(None, external_dms) + if result.failure(): + return result + + self.config_resolver.set_value_for_parameter('data_set_id', data_set.code, 'local') + + return CommandResult(returncode=0, output="") + + def run_correct(self): + # These are the correct semantics -- get a data set code, register the data set, but + # a bug prevents this from working at the moment + + # TODO Write mementos in case openBIS is unreachable + # - write a file to the .git/obis folder containing the commit id. Filename includes a timestamp so they can be sorted. + + result = self.prepare_run() + if result.failure(): + return result + + result = self.prepare_external_dms() + if result.failure(): + return result + external_dms = result.output result, data_set_code = self.create_data_set_code() if result.failure(): return result - self.config_resolver.set_value_for_parameter('data_set_id', data_set_code, 'local') self.commit_metadata_updates() + self.config_resolver.set_value_for_parameter('data_set_id', data_set_code, 'local') + self.commit_metadata_updates("Update data set code.") + # create a data set, using the existing data set as a parent, if there is one result, data_set = self.create_data_set(data_set_code, external_dms) if result.failure(): + # TODO Revert the last commit to revert the data set id. return result return CommandResult(returncode=0, output="") + + def run(self): + return self.run_correct() diff --git a/src/python/OBis/obis/dm/data_mgmt_test.py b/src/python/OBis/obis/dm/data_mgmt_test.py index bfc21a9b490dccfad9ea096f697641b7e6337db1..5be49fd3ede63bdf50c4b4133bcb9af50f3b4f2a 100644 --- a/src/python/OBis/obis/dm/data_mgmt_test.py +++ b/src/python/OBis/obis/dm/data_mgmt_test.py @@ -144,6 +144,8 @@ def test_child_data_set(tmpdir): check_new_data_set_expectations(dm, tmp_dir_path, commit_id, ANY, child_ds_code, parent_ds_code, properties) +# TODO Test that if the data set registration fails, the data_set_id is reverted + def set_registration_configuration(dm, properties=None): resolver = dm.config_resolver resolver.set_value_for_parameter('openbis_url', "https://localhost:8443", 'local')