From c4b3ea680c7f77d1056e2ac28b1f76b6e161796f Mon Sep 17 00:00:00 2001 From: Yves Noirjean <yves.noirjean@id.ethz.ch> Date: Fri, 7 Sep 2018 10:24:00 +0200 Subject: [PATCH] SSDM-7140: refactoring --- obis/src/python/obis/dm/data_mgmt.py | 79 ++++++++++++++++++- obis/src/python/obis/scripts/cli.py | 57 +------------ obis/src/python/obis/scripts/click_util.py | 9 ++- obis/src/python/obis/scripts/config_util.py | 19 ----- .../python/obis/scripts/data_mgmt_runner.py | 5 +- 5 files changed, 88 insertions(+), 81 deletions(-) delete mode 100644 obis/src/python/obis/scripts/config_util.py diff --git a/obis/src/python/obis/dm/data_mgmt.py b/obis/src/python/obis/dm/data_mgmt.py index 5c54b14b3ad..75a08e38acd 100644 --- a/obis/src/python/obis/dm/data_mgmt.py +++ b/obis/src/python/obis/dm/data_mgmt.py @@ -10,6 +10,7 @@ Created by Chandrasekhar Ramakrishnan on 2017-02-01. Copyright (c) 2017 Chandrasekhar Ramakrishnan. All rights reserved. """ import abc +import json import os import shutil import traceback @@ -33,6 +34,7 @@ from .utils import complete_git_config from .utils import complete_openbis_config from .utils import cd from ..scripts import cli +from ..scripts.click_util import click_echo, check_result # noinspection PyPep8Naming @@ -315,7 +317,7 @@ class GitDataMgmt(AbstractDataMgmt): return CommandResult(returncode=-1, output="Not within a repository and no parent set.") # set data_set_id to analysis repository so it will be used as parent when committing with cd(path): - cli.set_property(self, self.settings_resolver.repository, "data_set_id", parent_data_set_id, False, False) + self.set_property(self.settings_resolver.repository, "data_set_id", parent_data_set_id, False, False) return result @@ -332,9 +334,9 @@ class GitDataMgmt(AbstractDataMgmt): def commit(self, msg, auto_add=True, ignore_missing_parent=False, sync=True, path=None): if path is not None: with cd(path): - return self._commit(msg, auto_add, ignore_missing_parent, sync); + return self._commit(msg, auto_add, ignore_missing_parent, sync) else: - return self._commit(msg, auto_add, ignore_missing_parent, sync); + return self._commit(msg, auto_add, ignore_missing_parent, sync) @with_restore @@ -415,3 +417,74 @@ class GitDataMgmt(AbstractDataMgmt): def download(self, data_set_id, content_copy_index, file, skip_integrity_check): cmd = Download(self, data_set_id, content_copy_index, file, skip_integrity_check) return cmd.run() + + # + # settings + # + + def config(self, resolver, is_global, is_data_set_property, prop=None, value=None, set=False, get=False, clear=False): + if set == True: + assert get == False + assert clear == False + assert prop is not None + assert value is not None + elif get == True: + assert set == False + assert clear == False + assert value is None + elif clear == True: + assert get == False + assert set == False + assert value is None + + assert set == True or get == True or clear == True + if is_global: + resolver.set_location_search_order(['global']) + else: + top_level_path = self.git_wrapper.git_top_level_path() + if top_level_path.success(): + resolver.set_resolver_location_roots('data_set', top_level_path.output) + resolver.set_location_search_order(['local']) + else: + resolver.set_location_search_order(['global']) + + config_dict = resolver.config_dict() + if is_data_set_property: + config_dict = config_dict['properties'] + if get == True: + if prop is None: + config_str = json.dumps(config_dict, indent=4, sort_keys=True) + click_echo("{}".format(config_str), with_timestamp=False) + else: + if not prop in config_dict: + raise ValueError("Unknown setting {} for {}.".format(prop, resolver.categoty)) + little_dict = {prop: config_dict[prop]} + config_str = json.dumps(little_dict, indent=4, sort_keys=True) + click_echo("{}".format(config_str), with_timestamp=False) + elif set == True: + return check_result("config", self.set_property(resolver, prop, value, is_global, is_data_set_property)) + elif clear == True: + if prop is None: + returncode = 0 + for prop in config_dict.keys(): + returncode += check_result("config", self.set_property(resolver, prop, None, is_global, is_data_set_property)) + return returncode + else: + return check_result("config", self.set_property(resolver, prop, None, is_global, is_data_set_property)) + + def set_property(self, resolver, prop, value, is_global, is_data_set_property=False): + """Helper function to implement the property setting semantics.""" + loc = 'global' if is_global else 'local' + try: + if is_data_set_property: + resolver.set_value_for_json_parameter('properties', prop, value, loc, apply_rules=True) + else: + resolver.set_value_for_parameter(prop, value, loc, apply_rules=True) + except ValueError as e: + if self.debug == True: + raise e + return CommandResult(returncode=-1, output="Error: " + str(e)) + if not is_global: + return self.commit_metadata_updates(prop) + else: + return CommandResult(returncode=0, output="") diff --git a/obis/src/python/obis/scripts/cli.py b/obis/src/python/obis/scripts/cli.py index 4e3568f3f48..e889c6977c5 100644 --- a/obis/src/python/obis/scripts/cli.py +++ b/obis/src/python/obis/scripts/cli.py @@ -16,14 +16,12 @@ from datetime import datetime import click -from .. import dm from ..dm.command_result import CommandResult from ..dm.command_result import CommandException from ..dm.utils import cd from ..dm.command_log import CommandLog from .data_mgmt_runner import DataMgmtRunner from .click_util import click_echo, check_result -from .config_util import set_property def click_progress(progress_data): @@ -152,57 +150,6 @@ def _join_settings_get(setting_lists): return joined -def config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop=None, value=None, set=False, get=False, clear=False): - if set == True: - assert get == False - assert clear == False - assert prop is not None - assert value is not None - elif get == True: - assert set == False - assert clear == False - assert value is None - elif clear == True: - assert get == False - assert set == False - assert value is None - - assert set == True or get == True or clear == True - if is_global: - resolver.set_location_search_order(['global']) - else: - top_level_path = data_mgmt.git_wrapper.git_top_level_path() - if top_level_path.success(): - resolver.set_resolver_location_roots('data_set', top_level_path.output) - resolver.set_location_search_order(['local']) - else: - resolver.set_location_search_order(['global']) - - config_dict = resolver.config_dict() - if is_data_set_property: - config_dict = config_dict['properties'] - if get == True: - if prop is None: - config_str = json.dumps(config_dict, indent=4, sort_keys=True) - click.echo("{}".format(config_str)) - else: - if not prop in config_dict: - raise ValueError("Unknown setting {} for {}.".format(prop, resolver.categoty)) - little_dict = {prop: config_dict[prop]} - config_str = json.dumps(little_dict, indent=4, sort_keys=True) - click.echo("{}".format(config_str)) - elif set == True: - return check_result("config", set_property(data_mgmt, resolver, prop, value, is_global, is_data_set_property)) - elif clear == True: - if prop is None: - returncode = 0 - for prop in config_dict.keys(): - returncode += check_result("config", set_property(data_mgmt, resolver, prop, None, is_global, is_data_set_property)) - return returncode - else: - return check_result("config", set_property(data_mgmt, resolver, prop, None, is_global, is_data_set_property)) - - def _access_settings(ctx, prop=None, value=None, set=False, get=False, clear=False): is_global = ctx.obj['is_global'] data_mgmt = ctx.obj['data_mgmt'] @@ -210,7 +157,7 @@ def _access_settings(ctx, prop=None, value=None, set=False, get=False, clear=Fal is_data_set_property = False if 'is_data_set_property' in ctx.obj: is_data_set_property = ctx.obj['is_data_set_property'] - config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop=prop, value=value, set=set, get=get, clear=clear) + data_mgmt.config(resolver, is_global, is_data_set_property, prop=prop, value=value, set=set, get=get, clear=clear) def _set(ctx, settings): @@ -253,7 +200,7 @@ def settings(ctx, is_global): @click.pass_context def settings_get(ctx): runner = DataMgmtRunner(ctx, halt_on_error_log=False) - settings = runner.dm.settings_resolver.config_dict() + settings = runner.get_settings() settings_str = json.dumps(settings, indent=4, sort_keys=True) click.echo("{}".format(settings_str)) diff --git a/obis/src/python/obis/scripts/click_util.py b/obis/src/python/obis/scripts/click_util.py index 5ac2e7b3de1..d54984ae424 100644 --- a/obis/src/python/obis/scripts/click_util.py +++ b/obis/src/python/obis/scripts/click_util.py @@ -1,9 +1,12 @@ import click from datetime import datetime -def click_echo(message): - timestamp = datetime.now().strftime("%H:%M:%S") - click.echo("{} {}".format(timestamp, message)) +def click_echo(message, with_timestamp=True): + if with_timestamp: + timestamp = datetime.now().strftime("%H:%M:%S") + click.echo("{} {}".format(timestamp, message)) + else: + click.echo(message) def check_result(command, result): if result.failure(): diff --git a/obis/src/python/obis/scripts/config_util.py b/obis/src/python/obis/scripts/config_util.py deleted file mode 100644 index beef878e91f..00000000000 --- a/obis/src/python/obis/scripts/config_util.py +++ /dev/null @@ -1,19 +0,0 @@ -from ..dm.command_result import CommandResult - - -def set_property(data_mgmt, resolver, prop, value, is_global, is_data_set_property=False): - """Helper function to implement the property setting semantics.""" - loc = 'global' if is_global else 'local' - try: - if is_data_set_property: - resolver.set_value_for_json_parameter('properties', prop, value, loc, apply_rules=True) - else: - resolver.set_value_for_parameter(prop, value, loc, apply_rules=True) - except ValueError as e: - if data_mgmt.debug == True: - raise e - return CommandResult(returncode=-1, output="Error: " + str(e)) - if not is_global: - return data_mgmt.commit_metadata_updates(prop) - else: - return CommandResult(returncode=0, output="") diff --git a/obis/src/python/obis/scripts/data_mgmt_runner.py b/obis/src/python/obis/scripts/data_mgmt_runner.py index 8b49f8984ba..f2be2842408 100644 --- a/obis/src/python/obis/scripts/data_mgmt_runner.py +++ b/obis/src/python/obis/scripts/data_mgmt_runner.py @@ -10,7 +10,6 @@ from ..dm.command_result import CommandResult from ..dm.command_result import CommandException from ..dm.command_log import CommandLog from .click_util import click_echo, check_result -from .config_util import set_property class DataMgmtRunner(object): @@ -48,3 +47,7 @@ class DataMgmtRunner(object): click_echo("Error: A previous command did not finish. Please check the log ({}) and remove it when you want to continue using obis".format(log.folder_path)) sys.exit(-1) return dm.DataMgmt(openbis_config=openbis_config, git_config=git_config, log=log, debug=context['debug']) + + + def get_settings(self): + return self.dm.settings_resolver.config_dict() -- GitLab