Skip to content
Snippets Groups Projects
Commit cf03f145 authored by Chandrasekhar Ramakrishnan's avatar Chandrasekhar Ramakrishnan
Browse files

SSDM-4670: Changed obis commit protocol to first request a data set perm id...

SSDM-4670: Changed obis commit protocol to first request a data set perm id and update (and commit) the local cache before registering the data set with the server.
parent 7a050375
No related branches found
No related tags found
No related merge requests found
......@@ -416,7 +416,14 @@ class OpenbisSync(object):
# TODO If the error is edms already exists, retrieve it.
return CommandResult(returncode=-1, output=str(e)), None
def create_data_set(self, external_dms):
def create_data_set_code(self):
try:
data_set_code = self.openbis.create_perm_id()
return CommandResult(returncode=0, output=""), data_set_code
except ValueError as e:
return CommandResult(returncode=-1, output=str(e)), None
def create_data_set(self, data_set_code, external_dms):
# TODO If there already is a data set, then make the new data set a child of the original
data_set_type = self.data_set_type()
result = self.git_wrapper.git_top_level_path()
......@@ -430,11 +437,16 @@ class OpenbisSync(object):
object_id = self.object_id()
try:
data_set = self.openbis.new_git_data_set(data_set_type, top_level_path, commit_id, external_dms.code,
object_id)
object_id, data_set_code=data_set_code)
return CommandResult(returncode=0, output=""), data_set
except ValueError as e:
return CommandResult(returncode=-1, output=str(e)), None
def commit_metadata_updates(self):
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.
......@@ -455,10 +467,16 @@ class OpenbisSync(object):
self.config_resolver.set_value_for_parameter('external_dms_id', external_dms.code, 'local')
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()
# create a data set, using the existing data set as a parent, if there is one
result, data_set = self.create_data_set(external_dms)
result, data_set = self.create_data_set(data_set_code, 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="")
......@@ -9,13 +9,22 @@ Created by Chandrasekhar Ramakrishnan on 2017-02-02.
Copyright (c) 2017 Chandrasekhar Ramakrishnan. All rights reserved.
"""
import os
import random
import shutil
from datetime import datetime
from . import data_mgmt
from unittest.mock import Mock, MagicMock
from pybis.pybis import ExternalDMS, DataSet
def generate_perm_id():
sequence = random.randrange(9999)
ts = datetime.now().strftime("%Y%m%d%H%M%S%f")
return "{}-{:04d}".format(ts, sequence)
def shared_dm():
git_config = {'find_git': True}
dm = data_mgmt.DataMgmt(git_config=git_config)
......@@ -70,6 +79,12 @@ def test_data_use_case(tmpdir):
prepare_registration_expectations(dm)
set_registration_configuration(dm)
raw_status = git_status()
status = dm.status()
assert raw_status.returncode == status.returncode
assert raw_status.output == status.output
assert len(status.output) > 0
result = dm.commit("Added data.")
assert result.returncode == 0
......@@ -94,11 +109,8 @@ def test_data_use_case(tmpdir):
stat = os.stat("text-data.txt")
assert stat.st_nlink == 1
raw_status = git_status()
status = dm.status()
assert raw_status.returncode == status.returncode
assert raw_status.output == status.output
print(status.output)
assert len(status.output) == 0
def set_registration_configuration(dm):
......@@ -120,6 +132,7 @@ def prepare_registration_expectations(dm):
"parents": [], "children": [], "samples": [], 'tags': [],
'physicalData': None})
dm.openbis.new_git_data_set = MagicMock(return_value=data_set)
dm.openbis.create_perm_id = MagicMock(return_value=generate_perm_id())
def copy_test_data(tmpdir):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment