From 3ea2eece93438de061fecb29baa38821071aca65 Mon Sep 17 00:00:00 2001 From: Chandrasekhar Ramakrishnan <chandrasekhar.ramakrishnan@id.ethz.ch> Date: Thu, 2 Feb 2017 11:35:17 +0100 Subject: [PATCH] SSDM-4670: Implement structure for obis commands. --- src/python/OBis/obis/__init__.py | 1 + src/python/OBis/obis/conftest.py | 21 ++++++ src/python/OBis/obis/dm/__init__.py | 12 ++++ src/python/OBis/obis/dm/data_mgmt.py | 88 +++++++++++++++++++++++ src/python/OBis/obis/dm/data_mgmt_test.py | 17 +++++ 5 files changed, 139 insertions(+) create mode 100644 src/python/OBis/obis/conftest.py create mode 100644 src/python/OBis/obis/dm/__init__.py create mode 100644 src/python/OBis/obis/dm/data_mgmt.py create mode 100644 src/python/OBis/obis/dm/data_mgmt_test.py diff --git a/src/python/OBis/obis/__init__.py b/src/python/OBis/obis/__init__.py index ef4501d1cfe..3998a335320 100644 --- a/src/python/OBis/obis/__init__.py +++ b/src/python/OBis/obis/__init__.py @@ -1,3 +1,4 @@ __author__ = 'Chandrasekhar Ramakrishnan <chandrasekhar.ramakrishnan@id.ethz.ch>' __version__ = '0.1.0' +from .dm import * diff --git a/src/python/OBis/obis/conftest.py b/src/python/OBis/obis/conftest.py new file mode 100644 index 00000000000..62e900b6617 --- /dev/null +++ b/src/python/OBis/obis/conftest.py @@ -0,0 +1,21 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +conftest.py + +Global fixtures for tests. + +Created by Chandrasekhar Ramakrishnan on 2017-02-02. +Copyright (c) 2017 Chandrasekhar Ramakrishnan. All rights reserved. +""" + +import pytest +from . import dm + +pytest.fixture(scope="session") + + +def shared_obis(): + git_config = {'find_git': True} + return dm.DataMgmt(git_config=git_config) diff --git a/src/python/OBis/obis/dm/__init__.py b/src/python/OBis/obis/dm/__init__.py new file mode 100644 index 00000000000..a7bb27293c9 --- /dev/null +++ b/src/python/OBis/obis/dm/__init__.py @@ -0,0 +1,12 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +__init__.py + + +Created by Chandrasekhar Ramakrishnan on 2017-02-01. +Copyright (c) 2017 Chandrasekhar Ramakrishnan. All rights reserved. +""" + +from .data_mgmt import * diff --git a/src/python/OBis/obis/dm/data_mgmt.py b/src/python/OBis/obis/dm/data_mgmt.py new file mode 100644 index 00000000000..424f7f21898 --- /dev/null +++ b/src/python/OBis/obis/dm/data_mgmt.py @@ -0,0 +1,88 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +data_mgmt.py + +Module implementing data management operations. + +Created by Chandrasekhar Ramakrishnan on 2017-02-01. +Copyright (c) 2017 Chandrasekhar Ramakrishnan. All rights reserved. +""" + +import pybis +import abc + + +# noinspection PyPep8Naming +def DataMgmt(openbis_config={}, git_config={}): + """Factory method for DataMgmt instances""" + complete_openbis_config(openbis_config) + complete_git_config(git_config) + + openbis = pybis.Openbis(**openbis_config) + git_wrapper = GitWrapper(**git_config) + if git_wrapper.can_run(): + return GitDataMgmt(openbis, git_wrapper) + return NoGitDataMgmt(openbis, git_wrapper) + + +def complete_openbis_config(config): + """Add default values for empty entries in the config.""" + if not config.get('url'): + config['url'] = 'https://localhost:8443' + if not config.get('verify_certificates'): + config['verify_certificates'] = True + if not config.get('token'): + config['token'] = None + + +def complete_git_config(config): + """Add default values for empty entries in the config.""" + + find_git = config['find_git'] if config.get('find_git') else False + if find_git: + config['git_path'] = locate_path('git') + config['git_annex_path'] = locate_path('git-annex') + + +def locate_path(command): + return None + + +class AbstractDataMgmt(object): + __metaclass__ = abc.ABCMeta + """Abstract object that implements operations.""" + + def __init__(self, openbis, git_wrapper): + self.openbis = openbis + self.git_wrapper = git_wrapper + + def init_data(self, path): + return None + + +class NoGitDataMgmt(AbstractDataMgmt): + """DataMgmt operations when git is not available -- show error messages.""" + pass + + +class GitDataMgmt(AbstractDataMgmt): + """DataMgmt operations in normal state.""" + pass + + +class GitWrapper(object): + """A wrapper on commands to git.""" + + def __init__(self, git_path=None, git_annex_path=None): + self.git_path = git_path + self.git_annex_path = git_annex_path + + def can_run(self): + """Return true if the perquisites are satisfied to run""" + if self.git_path is None: + return False + if self.git_annex_path is None: + return False + return False diff --git a/src/python/OBis/obis/dm/data_mgmt_test.py b/src/python/OBis/obis/dm/data_mgmt_test.py new file mode 100644 index 00000000000..a7f093d378d --- /dev/null +++ b/src/python/OBis/obis/dm/data_mgmt_test.py @@ -0,0 +1,17 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +data_mgmt_test.py + + +Created by Chandrasekhar Ramakrishnan on 2017-02-02. +Copyright (c) 2017 Chandrasekhar Ramakrishnan. All rights reserved. +""" + +from . import data_mgmt + + +def test_no_git(tmpdir): + dm = data_mgmt.DataMgmt() + dm.init_data(str(tmpdir)) -- GitLab