From eb48504170b2dff966bccc8ecbeacc78b3ae4d79 Mon Sep 17 00:00:00 2001
From: Yves Noirjean <ynoir@public-docking-bs-1764.ethz.ch>
Date: Thu, 12 Oct 2017 17:21:43 +0200
Subject: [PATCH] obis: fixed creation of external dms - no exception in server
 log anymore

---
 src/python/OBis/obis/dm/data_mgmt.py | 46 +++++++++++++---------------
 1 file changed, 21 insertions(+), 25 deletions(-)

diff --git a/src/python/OBis/obis/dm/data_mgmt.py b/src/python/OBis/obis/dm/data_mgmt.py
index fc276db8afc..e9afebc7f26 100644
--- a/src/python/OBis/obis/dm/data_mgmt.py
+++ b/src/python/OBis/obis/dm/data_mgmt.py
@@ -221,6 +221,11 @@ class GitDataMgmt(AbstractDataMgmt):
                 self.config_resolver.set_value_for_parameter(key, value, 'local')
 
 
+    def get_data_set_id(self, path):
+        with cd(path):
+            return self.config_resolver.config_dict().get('data_set_id')
+
+
     def init_data(self, path, desc=None, create=True, apply_config=False):
         if not os.path.exists(path) and create:
             os.mkdir(path)
@@ -252,9 +257,9 @@ class GitDataMgmt(AbstractDataMgmt):
     def commit(self, msg, auto_add=True, sync=True, path=None):
         if path is not None:
             with cd(path):
-                self._commit(msg, auto_add, sync);
+                return self._commit(msg, auto_add, sync);
         else:
-            self._commit(msg, auto_add, sync);
+            return self._commit(msg, auto_add, sync);
 
 
     def _commit(self, msg, auto_add=True, sync=True):
@@ -447,18 +452,11 @@ class OpenbisSync(object):
             return CommandResult(returncode=-1, output=msg)
         return CommandResult(returncode=0, output='')
 
-    def get_external_data_management_system(self):
-        external_dms_id = self.external_dms_id()
-        if external_dms_id is None:
-            return None
-        external_dms = self.openbis.get_external_data_management_system(external_dms_id.upper())
-        return external_dms
-
     def generate_external_data_management_system_code(self, user, hostname, edms_path):
         path_hash = hashlib.sha1(edms_path.encode("utf-8")).hexdigest()[0:8]
         return "{}-{}-{}".format(user, hostname, path_hash).upper()
 
-    def create_external_data_management_system(self):
+    def get_or_create_external_data_management_system(self):
         external_dms_id = self.external_dms_id()
         user = self.user()
         hostname = socket.gethostname()
@@ -470,16 +468,15 @@ class OpenbisSync(object):
         if external_dms_id is None:
             external_dms_id = self.generate_external_data_management_system_code(user, hostname, edms_path)
         try:
-            edms = self.openbis.create_external_data_management_system(external_dms_id, external_dms_id,
-                                                                       "{}:/{}".format(hostname, edms_path))
-            return CommandResult(returncode=0, output=""), edms
+            external_dms = self.openbis.get_external_data_management_system(external_dms_id.upper())
         except ValueError as e:
-            # The EDMS might already be in the system. Try to get it.
+            # external dms does not exist - create it
             try:
-                edms = self.openbis.get_external_data_management_system(external_dms_id)
-                return CommandResult(returncode=0, output=""), edms
-            except ValueError:
-                return CommandResult(returncode=-1, output=str(e)), None
+                external_dms = self.openbis.create_external_data_management_system(external_dms_id, external_dms_id,
+                                                                    "{}:/{}".format(hostname, edms_path))
+            except ValueError as e:
+                return CommandResult(returncode=-1, output=str(e))
+        return CommandResult(returncode=0, output=external_dms)
 
     def create_data_set_code(self):
         try:
@@ -532,13 +529,12 @@ class OpenbisSync(object):
 
     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:
-            result, external_dms = self.create_external_data_management_system()
-            if result.failure():
-                return result
-            self.config_resolver.set_value_for_parameter('external_dms_id', external_dms.code, 'local')
-        return CommandResult(returncode=0, output=external_dms)
+        result = self.get_or_create_external_data_management_system()
+        if result.failure():
+            return result
+        external_dms = result.output
+        self.config_resolver.set_value_for_parameter('external_dms_id', external_dms.code, 'local')
+        return result
 
     def run(self):
         # TODO Write mementos in case openBIS is unreachable
-- 
GitLab