Skip to content
Snippets Groups Projects
Commit af686216 authored by yvesn's avatar yvesn
Browse files

SSDM-7140: introduced DataMgmtRunner make cli code more manageable

parent a1af9b3a
No related branches found
No related tags found
No related merge requests found
...@@ -21,11 +21,9 @@ from ..dm.command_result import CommandResult ...@@ -21,11 +21,9 @@ from ..dm.command_result import CommandResult
from ..dm.command_result import CommandException from ..dm.command_result import CommandException
from ..dm.utils import cd from ..dm.utils import cd
from ..dm.command_log import CommandLog from ..dm.command_log import CommandLog
from .data_mgmt_runner import DataMgmtRunner
from .click_util import click_echo
def click_echo(message): from .config_util import set_property
timestamp = datetime.now().strftime("%H:%M:%S")
click.echo("{} {}".format(timestamp, message))
def click_progress(progress_data): def click_progress(progress_data):
...@@ -46,26 +44,6 @@ def add_params(params): ...@@ -46,26 +44,6 @@ def add_params(params):
return _add_params return _add_params
def shared_data_mgmt(context={}, halt_on_error_log=True):
git_config = {'find_git': True}
openbis_config = {}
if context.get('verify_certificates') is not None:
openbis_config['verify_certificates'] = context['verify_certificates']
log = CommandLog()
if halt_on_error_log and log.any_log_exists():
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 check_result(command, result):
if result.failure():
click_echo("Could not {}:\n{}".format(command, result.output))
elif len(result.output) > 0:
click_echo(result.output)
return result.returncode
def run(ctx, function): def run(ctx, function):
try: try:
return function() return function()
...@@ -90,53 +68,25 @@ def cli(ctx, quiet, skip_verification, debug): ...@@ -90,53 +68,25 @@ def cli(ctx, quiet, skip_verification, debug):
ctx.obj['debug'] = debug ctx.obj['debug'] = debug
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="")
def init_data_impl(ctx, object_id, collection_id, repository, desc): def init_data_impl(ctx, object_id, collection_id, repository, desc):
"""Shared implementation for the init_data command.""" """Shared implementation for the init_data command."""
if repository is None: if repository is None:
repository = "." repository = "."
click_echo("init_data {}".format(repository)) click_echo("init_data {}".format(repository))
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
data_mgmt = runner.shared_data_mgmt(ctx.obj)
desc = desc if desc != "" else None desc = desc if desc != "" else None
result = run(ctx, lambda: data_mgmt.init_data(repository, desc, create=True)) result = run(ctx, lambda: data_mgmt.init_data(repository, desc, create=True))
init_handle_cleanup(result, object_id, collection_id, repository, data_mgmt) runner.init_handle_cleanup(result, object_id, collection_id, repository, data_mgmt)
def init_analysis_impl(ctx, parent, object_id, collection_id, repository, description): def init_analysis_impl(ctx, parent, object_id, collection_id, repository, description):
click_echo("init_analysis {}".format(repository)) click_echo("init_analysis {}".format(repository))
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
data_mgmt = runner.shared_data_mgmt(ctx.obj)
description = description if description != "" else None description = description if description != "" else None
result = run(ctx, lambda: data_mgmt.init_analysis(repository, parent, description, create=True)) result = run(ctx, lambda: data_mgmt.init_analysis(repository, parent, description, create=True))
init_handle_cleanup(result, object_id, collection_id, repository, data_mgmt) runner.init_handle_cleanup(result, object_id, collection_id, repository, data_mgmt)
def init_handle_cleanup(result, object_id, collection_id, repository, data_mgmt):
if (not object_id and not collection_id) or result.failure():
return check_result("init_data", result)
with dm.cd(repository):
if object_id:
resolver = data_mgmt.object
return check_result("init_data", set_property(data_mgmt, resolver, 'id', object_id, False, False))
if collection_id:
resolver = data_mgmt.collection
return check_result("init_data", set_property(data_mgmt, resolver, 'id', collection_id, False, False))
# settings commands # settings commands
...@@ -257,15 +207,15 @@ def config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop=N ...@@ -257,15 +207,15 @@ def config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop=N
config_str = json.dumps(little_dict, indent=4, sort_keys=True) config_str = json.dumps(little_dict, indent=4, sort_keys=True)
click.echo("{}".format(config_str)) click.echo("{}".format(config_str))
elif set == True: elif set == True:
return check_result("config", set_property(data_mgmt, resolver, prop, value, is_global, is_data_set_property)) return DataMgmtRunner().check_result("config", set_property(data_mgmt, resolver, prop, value, is_global, is_data_set_property))
elif clear == True: elif clear == True:
if prop is None: if prop is None:
returncode = 0 returncode = 0
for prop in config_dict.keys(): for prop in config_dict.keys():
returncode += check_result("config", set_property(data_mgmt, resolver, prop, None, is_global, is_data_set_property)) returncode += DataMgmtRunner().check_result("config", set_property(data_mgmt, resolver, prop, None, is_global, is_data_set_property))
return returncode return returncode
else: else:
return check_result("config", set_property(data_mgmt, resolver, prop, None, is_global, is_data_set_property)) return DataMgmtRunner().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): def _access_settings(ctx, prop=None, value=None, set=False, get=False, clear=False):
...@@ -317,7 +267,8 @@ def settings(ctx, is_global): ...@@ -317,7 +267,8 @@ def settings(ctx, is_global):
@settings.command('get') @settings.command('get')
@click.pass_context @click.pass_context
def settings_get(ctx): def settings_get(ctx):
data_mgmt = shared_data_mgmt(ctx.obj, halt_on_error_log=False) runner = DataMgmtRunner()
data_mgmt = runner.shared_data_mgmt(ctx.obj, halt_on_error_log=False)
settings = data_mgmt.settings_resolver.config_dict() settings = data_mgmt.settings_resolver.config_dict()
settings_str = json.dumps(settings, indent=4, sort_keys=True) settings_str = json.dumps(settings, indent=4, sort_keys=True)
click.echo("{}".format(settings_str)) click.echo("{}".format(settings_str))
...@@ -331,8 +282,9 @@ def settings_get(ctx): ...@@ -331,8 +282,9 @@ def settings_get(ctx):
def repository(ctx, is_global): def repository(ctx, is_global):
""" Get/set settings related to the repository. """ Get/set settings related to the repository.
""" """
runner = DataMgmtRunner()
ctx.obj['is_global'] = is_global ctx.obj['is_global'] = is_global
ctx.obj['data_mgmt'] = shared_data_mgmt(ctx.obj, halt_on_error_log=False) ctx.obj['data_mgmt'] = runner.shared_data_mgmt(ctx.obj, halt_on_error_log=False)
ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.repository ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.repository
...@@ -340,21 +292,24 @@ def repository(ctx, is_global): ...@@ -340,21 +292,24 @@ def repository(ctx, is_global):
@click.argument('settings', type=SettingsSet(), nargs=-1) @click.argument('settings', type=SettingsSet(), nargs=-1)
@click.pass_context @click.pass_context
def repository_set(ctx, settings): def repository_set(ctx, settings):
return check_result("repository_set", run(ctx, lambda: _set(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("repository_set", run(ctx, lambda: _set(ctx, settings)))
@repository.command('get') @repository.command('get')
@click.argument('settings', type=SettingsGet(), nargs=-1) @click.argument('settings', type=SettingsGet(), nargs=-1)
@click.pass_context @click.pass_context
def repository_get(ctx, settings): def repository_get(ctx, settings):
return check_result("repository_get", run(ctx, lambda: _get(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("repository_get", run(ctx, lambda: _get(ctx, settings)))
@repository.command('clear') @repository.command('clear')
@click.argument('settings', type=SettingsClear(), nargs=-1) @click.argument('settings', type=SettingsClear(), nargs=-1)
@click.pass_context @click.pass_context
def repository_clear(ctx, settings): def repository_clear(ctx, settings):
return check_result("repository_clear", run(ctx, lambda: _clear(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("repository_clear", run(ctx, lambda: _clear(ctx, settings)))
## data_set: type, properties ## data_set: type, properties
...@@ -367,9 +322,10 @@ def repository_clear(ctx, settings): ...@@ -367,9 +322,10 @@ def repository_clear(ctx, settings):
def data_set(ctx, is_global, is_data_set_property): def data_set(ctx, is_global, is_data_set_property):
""" Get/set settings related to the data set. """ Get/set settings related to the data set.
""" """
runner = DataMgmtRunner()
ctx.obj['is_global'] = is_global ctx.obj['is_global'] = is_global
ctx.obj['is_data_set_property'] = is_data_set_property ctx.obj['is_data_set_property'] = is_data_set_property
ctx.obj['data_mgmt'] = shared_data_mgmt(ctx.obj, halt_on_error_log=False) ctx.obj['data_mgmt'] = runner.shared_data_mgmt(ctx.obj, halt_on_error_log=False)
ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.data_set ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.data_set
...@@ -377,21 +333,24 @@ def data_set(ctx, is_global, is_data_set_property): ...@@ -377,21 +333,24 @@ def data_set(ctx, is_global, is_data_set_property):
@click.argument('settings', type=SettingsSet(), nargs=-1) @click.argument('settings', type=SettingsSet(), nargs=-1)
@click.pass_context @click.pass_context
def data_set_set(ctx, settings): def data_set_set(ctx, settings):
return check_result("data_set_set", run(ctx, lambda: _set(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("data_set_set", run(ctx, lambda: _set(ctx, settings)))
@data_set.command('get') @data_set.command('get')
@click.argument('settings', type=SettingsGet(), nargs=-1) @click.argument('settings', type=SettingsGet(), nargs=-1)
@click.pass_context @click.pass_context
def data_set_get(ctx, settings): def data_set_get(ctx, settings):
return check_result("data_set_get", run(ctx, lambda: _get(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("data_set_get", run(ctx, lambda: _get(ctx, settings)))
@data_set.command('clear') @data_set.command('clear')
@click.argument('settings', type=SettingsClear(), nargs=-1) @click.argument('settings', type=SettingsClear(), nargs=-1)
@click.pass_context @click.pass_context
def data_set_clear(ctx, settings): def data_set_clear(ctx, settings):
return check_result("data_set_clear", run(ctx, lambda: _clear(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("data_set_clear", run(ctx, lambda: _clear(ctx, settings)))
## object: object_id ## object: object_id
...@@ -403,8 +362,9 @@ def data_set_clear(ctx, settings): ...@@ -403,8 +362,9 @@ def data_set_clear(ctx, settings):
def object(ctx, is_global): def object(ctx, is_global):
""" Get/set settings related to the object. """ Get/set settings related to the object.
""" """
runner = DataMgmtRunner()
ctx.obj['is_global'] = is_global ctx.obj['is_global'] = is_global
ctx.obj['data_mgmt'] = shared_data_mgmt(ctx.obj, halt_on_error_log=False) ctx.obj['data_mgmt'] = runner.shared_data_mgmt(ctx.obj, halt_on_error_log=False)
ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.object ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.object
...@@ -412,21 +372,24 @@ def object(ctx, is_global): ...@@ -412,21 +372,24 @@ def object(ctx, is_global):
@click.argument('settings', type=SettingsSet(), nargs=-1) @click.argument('settings', type=SettingsSet(), nargs=-1)
@click.pass_context @click.pass_context
def object_set(ctx, settings): def object_set(ctx, settings):
return check_result("object_set", run(ctx, lambda: _set(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("object_set", run(ctx, lambda: _set(ctx, settings)))
@object.command('get') @object.command('get')
@click.argument('settings', type=SettingsGet(), nargs=-1) @click.argument('settings', type=SettingsGet(), nargs=-1)
@click.pass_context @click.pass_context
def object_get(ctx, settings): def object_get(ctx, settings):
return check_result("object_get", run(ctx, lambda: _get(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("object_get", run(ctx, lambda: _get(ctx, settings)))
@object.command('clear') @object.command('clear')
@click.argument('settings', type=SettingsClear(), nargs=-1) @click.argument('settings', type=SettingsClear(), nargs=-1)
@click.pass_context @click.pass_context
def object_clear(ctx, settings): def object_clear(ctx, settings):
return check_result("object_clear", run(ctx, lambda: _clear(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("object_clear", run(ctx, lambda: _clear(ctx, settings)))
## collection: collection_id ## collection: collection_id
...@@ -438,8 +401,9 @@ def object_clear(ctx, settings): ...@@ -438,8 +401,9 @@ def object_clear(ctx, settings):
def collection(ctx, is_global): def collection(ctx, is_global):
""" Get/set settings related to the collection. """ Get/set settings related to the collection.
""" """
runner = DataMgmtRunner()
ctx.obj['is_global'] = is_global ctx.obj['is_global'] = is_global
ctx.obj['data_mgmt'] = shared_data_mgmt(ctx.obj, halt_on_error_log=False) ctx.obj['data_mgmt'] = runner.shared_data_mgmt(ctx.obj, halt_on_error_log=False)
ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.collection ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.collection
...@@ -447,21 +411,24 @@ def collection(ctx, is_global): ...@@ -447,21 +411,24 @@ def collection(ctx, is_global):
@click.argument('settings', type=SettingsSet(), nargs=-1) @click.argument('settings', type=SettingsSet(), nargs=-1)
@click.pass_context @click.pass_context
def collection_set(ctx, settings): def collection_set(ctx, settings):
return check_result("collection_set", run(ctx, lambda: _set(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("collection_set", run(ctx, lambda: _set(ctx, settings)))
@collection.command('get') @collection.command('get')
@click.argument('settings', type=SettingsGet(), nargs=-1) @click.argument('settings', type=SettingsGet(), nargs=-1)
@click.pass_context @click.pass_context
def collection_get(ctx, settings): def collection_get(ctx, settings):
return check_result("collection_get", run(ctx, lambda: _get(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("collection_get", run(ctx, lambda: _get(ctx, settings)))
@collection.command('clear') @collection.command('clear')
@click.argument('settings', type=SettingsClear(), nargs=-1) @click.argument('settings', type=SettingsClear(), nargs=-1)
@click.pass_context @click.pass_context
def collection_clear(ctx, settings): def collection_clear(ctx, settings):
return check_result("collection_clear", run(ctx, lambda: _clear(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("collection_clear", run(ctx, lambda: _clear(ctx, settings)))
## config: fileservice_url, git_annex_hash_as_checksum, hostname, openbis_url, user, verify_certificates ## config: fileservice_url, git_annex_hash_as_checksum, hostname, openbis_url, user, verify_certificates
...@@ -473,8 +440,9 @@ def collection_clear(ctx, settings): ...@@ -473,8 +440,9 @@ def collection_clear(ctx, settings):
def config(ctx, is_global): def config(ctx, is_global):
""" Get/set configurations. """ Get/set configurations.
""" """
runner = DataMgmtRunner()
ctx.obj['is_global'] = is_global ctx.obj['is_global'] = is_global
ctx.obj['data_mgmt'] = shared_data_mgmt(ctx.obj, halt_on_error_log=False) ctx.obj['data_mgmt'] = runner.shared_data_mgmt(ctx.obj, halt_on_error_log=False)
ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.config ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver.config
...@@ -482,21 +450,24 @@ def config(ctx, is_global): ...@@ -482,21 +450,24 @@ def config(ctx, is_global):
@click.argument('settings', type=SettingsSet(), nargs=-1) @click.argument('settings', type=SettingsSet(), nargs=-1)
@click.pass_context @click.pass_context
def config_set(ctx, settings): def config_set(ctx, settings):
return check_result("config_set", run(ctx, lambda: _set(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("config_set", run(ctx, lambda: _set(ctx, settings)))
@config.command('get') @config.command('get')
@click.argument('settings', type=SettingsGet(), nargs=-1) @click.argument('settings', type=SettingsGet(), nargs=-1)
@click.pass_context @click.pass_context
def config_get(ctx, settings): def config_get(ctx, settings):
return check_result("config_get", run(ctx, lambda: _get(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("config_get", run(ctx, lambda: _get(ctx, settings)))
@config.command('clear') @config.command('clear')
@click.argument('settings', type=SettingsClear(), nargs=-1) @click.argument('settings', type=SettingsClear(), nargs=-1)
@click.pass_context @click.pass_context
def config_clear(ctx, settings): def config_clear(ctx, settings):
return check_result("config_clear", run(ctx, lambda: _clear(ctx, settings))) runner = DataMgmtRunner()
return runner.check_result("config_clear", run(ctx, lambda: _clear(ctx, settings)))
# repository commands: status, sync, commit, init, addref, removeref, init_analysis # repository commands: status, sync, commit, init, addref, removeref, init_analysis
...@@ -511,8 +482,9 @@ _commit_params = [ ...@@ -511,8 +482,9 @@ _commit_params = [
] ]
def _repository_commit(ctx, msg, auto_add, ignore_missing_parent): def _repository_commit(ctx, msg, auto_add, ignore_missing_parent):
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
return check_result("commit", run(ctx, lambda: data_mgmt.commit(msg, auto_add, ignore_missing_parent))) data_mgmt = runner.shared_data_mgmt(ctx.obj)
return runner.check_result("commit", run(ctx, lambda: data_mgmt.commit(msg, auto_add, ignore_missing_parent)))
@repository.command("commit", short_help="Commit the repository to git and inform openBIS.") @repository.command("commit", short_help="Commit the repository to git and inform openBIS.")
@click.pass_context @click.pass_context
...@@ -576,7 +548,8 @@ _status_params = [ ...@@ -576,7 +548,8 @@ _status_params = [
] ]
def _repository_status(ctx): def _repository_status(ctx):
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
data_mgmt = runner.shared_data_mgmt(ctx.obj)
result = run(ctx, data_mgmt.status) result = run(ctx, data_mgmt.status)
click.echo(result.output) click.echo(result.output)
...@@ -603,8 +576,9 @@ _sync_params = [ ...@@ -603,8 +576,9 @@ _sync_params = [
] ]
def _repository_sync(ctx, ignore_missing_parent): def _repository_sync(ctx, ignore_missing_parent):
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
return check_result("sync", run(ctx, lambda: data_mgmt.sync(ignore_missing_parent))) data_mgmt = runner.shared_data_mgmt(ctx.obj)
return runner.check_result("sync", run(ctx, lambda: data_mgmt.sync(ignore_missing_parent)))
@repository.command("sync", short_help="Sync the repository with openBIS.") @repository.command("sync", short_help="Sync the repository with openBIS.")
@click.pass_context @click.pass_context
...@@ -628,8 +602,9 @@ _addref_params = [ ...@@ -628,8 +602,9 @@ _addref_params = [
] ]
def _repository_addref(ctx): def _repository_addref(ctx):
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
return check_result("addref", run(ctx, data_mgmt.addref)) data_mgmt = runner.shared_data_mgmt(ctx.obj)
return runner.check_result("addref", run(ctx, data_mgmt.addref))
@repository.command("addref", short_help="Add the given repository as a reference to openBIS.") @repository.command("addref", short_help="Add the given repository as a reference to openBIS.")
@click.pass_context @click.pass_context
...@@ -654,8 +629,9 @@ _removeref_params = [ ...@@ -654,8 +629,9 @@ _removeref_params = [
] ]
def _repository_removeref(ctx, data_set_id=None): def _repository_removeref(ctx, data_set_id=None):
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
return check_result("removeref", run(ctx, lambda: data_mgmt.removeref(data_set_id=data_set_id))) data_mgmt = runner.shared_data_mgmt(ctx.obj)
return runner.check_result("removeref", run(ctx, lambda: data_mgmt.removeref(data_set_id=data_set_id)))
@repository.command("removeref", short_help="Remove the reference to the given repository from openBIS.") @repository.command("removeref", short_help="Remove the reference to the given repository from openBIS.")
@click.pass_context @click.pass_context
...@@ -696,8 +672,9 @@ _download_params = [ ...@@ -696,8 +672,9 @@ _download_params = [
@add_params(_download_params) @add_params(_download_params)
@click.pass_context @click.pass_context
def data_set_download(ctx, content_copy_index, file, data_set_id, skip_integrity_check): def data_set_download(ctx, content_copy_index, file, data_set_id, skip_integrity_check):
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
return check_result("download", run(ctx, lambda: data_mgmt.download(data_set_id, content_copy_index, file, skip_integrity_check))) data_mgmt = runner.shared_data_mgmt(ctx.obj)
return runner.check_result("download", run(ctx, lambda: data_mgmt.download(data_set_id, content_copy_index, file, skip_integrity_check)))
@cli.command(short_help="Download files of a linked data set.") @cli.command(short_help="Download files of a linked data set.")
@add_params(_download_params) @add_params(_download_params)
...@@ -718,8 +695,9 @@ _clone_move_params = [ ...@@ -718,8 +695,9 @@ _clone_move_params = [
@click.pass_context @click.pass_context
@add_params(_clone_move_params) @add_params(_clone_move_params)
def data_set_clone(ctx, ssh_user, content_copy_index, data_set_id, skip_integrity_check): def data_set_clone(ctx, ssh_user, content_copy_index, data_set_id, skip_integrity_check):
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
return check_result("clone", run(ctx, lambda: data_mgmt.clone(data_set_id, ssh_user, content_copy_index, skip_integrity_check))) data_mgmt = runner.shared_data_mgmt(ctx.obj)
return runner.check_result("clone", run(ctx, lambda: data_mgmt.clone(data_set_id, ssh_user, content_copy_index, skip_integrity_check)))
@cli.command(short_help="Clone the repository found in the given data set id.") @cli.command(short_help="Clone the repository found in the given data set id.")
@click.pass_context @click.pass_context
...@@ -734,8 +712,9 @@ def clone(ctx, ssh_user, content_copy_index, data_set_id, skip_integrity_check): ...@@ -734,8 +712,9 @@ def clone(ctx, ssh_user, content_copy_index, data_set_id, skip_integrity_check):
@click.pass_context @click.pass_context
@add_params(_clone_move_params) @add_params(_clone_move_params)
def data_set_move(ctx, ssh_user, content_copy_index, data_set_id, skip_integrity_check): def data_set_move(ctx, ssh_user, content_copy_index, data_set_id, skip_integrity_check):
data_mgmt = shared_data_mgmt(ctx.obj) runner = DataMgmtRunner()
return check_result("move", run(ctx, lambda: data_mgmt.move(data_set_id, ssh_user, content_copy_index, skip_integrity_check))) data_mgmt = runner.shared_data_mgmt(ctx.obj)
return runner.check_result("move", run(ctx, lambda: data_mgmt.move(data_set_id, ssh_user, content_copy_index, skip_integrity_check)))
@cli.command(short_help="Move the repository found in the given data set id.") @cli.command(short_help="Move the repository found in the given data set id.")
@click.pass_context @click.pass_context
......
import click
from datetime import datetime
def click_echo(message):
timestamp = datetime.now().strftime("%H:%M:%S")
click.echo("{} {}".format(timestamp, message))
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="")
import click
import json
import sys
from datetime import datetime
from .. import dm
from ..dm.utils import cd
from ..dm.command_result import CommandResult
from ..dm.command_result import CommandException
from ..dm.command_log import CommandLog
from .click_util import click_echo
from .config_util import set_property
class DataMgmtRunner(object):
def run(self, ctx, function):
try:
return function()
except CommandException as e:
return e.command_result
except Exception as e:
if ctx.obj['debug'] == True:
raise e
return CommandResult(returncode=-1, output="Error: " + str(e))
def shared_data_mgmt(self, context={}, halt_on_error_log=True):
git_config = {'find_git': True}
openbis_config = {}
if context.get('verify_certificates') is not None:
openbis_config['verify_certificates'] = context['verify_certificates']
log = CommandLog()
if halt_on_error_log and log.any_log_exists():
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 check_result(self, command, result):
if result.failure():
click_echo("Could not {}:\n{}".format(command, result.output))
elif len(result.output) > 0:
click_echo(result.output)
return result.returncode
def init_handle_cleanup(self, result, object_id, collection_id, repository, data_mgmt):
if (not object_id and not collection_id) or result.failure():
return self.check_result("init_data", result)
with dm.cd(repository):
if object_id:
resolver = data_mgmt.object
return self.check_result("init_data", set_property(data_mgmt, resolver, 'id', object_id, False, False))
if collection_id:
resolver = data_mgmt.collection
return self.check_result("init_data", set_property(data_mgmt, resolver, 'id', collection_id, False, False))
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