diff --git a/src/python/OBis/integration_tests/integration_tests.py b/src/python/OBis/integration_tests/integration_tests.py index 8ac9012a8cfd56a60c31193f1e305ae3c724ecf2..4d9aaa390d78af71ff18c6626284ae2ccf52c70e 100644 --- a/src/python/OBis/integration_tests/integration_tests.py +++ b/src/python/OBis/integration_tests/integration_tests.py @@ -79,7 +79,7 @@ def test_obis(tmpdir): assert "Created data set {}.".format(settings['repository']['data_set_id']) in result result = cmd('git annex info big_file') assert 'file: big_file' in result - assert 'key: MD5-s1000000--879f4bba57ed37c9ec5e5aedf9864698' in result + assert 'key: SHA256E-s1000000--d29751f2649b32ff572b5e0a9f541ea660a50f94ff0beedfb0b692b924cc8025' in result assert 'present: true' in result data_set = o.get_dataset(settings['repository']['data_set_id']).data assert_matching(settings, data_set, tmpdir, 'obis_data/data1') @@ -273,15 +273,15 @@ def test_obis(tmpdir): with cd('data10'): cmd('touch file') cmd('obis object set id=/DEFAULT/DEFAULT') - # use MD5 form git annex by default + # use SHA256 form git annex by default result = cmd('obis commit -m \'commit-message\'') settings = get_settings() search_result = o.search_files(settings['repository']['data_set_id']) files = list(filter(lambda file: file['fileLength'] > 0, search_result['objects'])) assert len(files) == 5 for file in files: - assert file['checksumType'] == "MD5" - assert len(file['checksum']) == 32 + assert file['checksumType'] == "SHA256" + assert len(file['checksum']) == 64 # don't use git annex hash - use default CRC32 cmd('obis config set git_annex_hash_as_checksum=false') result = cmd('obis commit -m \'commit-message\'') @@ -294,6 +294,17 @@ def test_obis(tmpdir): assert file['checksum'] is None assert file['checksumCRC32'] != 0 + output_buffer = '=================== 19. Clearing settings ===================\n' + cmd('obis init data11') + with cd('data11'): + assert get_settings()['repository'] == {'id': None, 'external_dms_id': None, 'data_set_id': None} + cmd('obis repository set id=0, external_dms_id=1, data_set_id=2') + assert get_settings()['repository'] == {'id': '0', 'external_dms_id': '1', 'data_set_id': '2'} + cmd('obis repository clear external_dms_id, data_set_id') + assert get_settings()['repository'] == {'id': '0', 'external_dms_id': None, 'data_set_id': None} + cmd('obis repository clear') + assert get_settings()['repository'] == {'id': None, 'external_dms_id': None, 'data_set_id': None} + output_buffer = '=================== 16. User switch ===================\n' cmd('obis init data9') with cd('data9'): diff --git a/src/python/OBis/obis/scripts/cli.py b/src/python/OBis/obis/scripts/cli.py index 59c04bb9fc4ae342418f94f9cf9f040e15397f15..f851972656015d7650c86ced48f547f8f98d87f4 100644 --- a/src/python/OBis/obis/scripts/cli.py +++ b/src/python/OBis/obis/scripts/cli.py @@ -143,6 +143,10 @@ class SettingsGet(click.ParamType): self.fail(param=param, message='Settings must be in the format: key1, key2, ...') +class SettingsClear(SettingsGet): + pass + + class SettingsSet(click.ParamType): name = 'settings_set' @@ -200,7 +204,22 @@ def _join_settings_get(setting_lists): return joined -def config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop, value): +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: @@ -214,44 +233,60 @@ def config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop, config_dict = resolver.config_dict() if is_data_set_property: config_dict = config_dict['properties'] - if not prop: - config_str = json.dumps(config_dict, indent=4, sort_keys=True) - click.echo("{}".format(config_str)) - elif not value: - 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)) - else: + 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 _set(ctx, settings): +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'] resolver = ctx.obj['resolver'] 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) + + +def _set(ctx, settings): settings_dict = _join_settings_set(settings) for prop, value in settings_dict.items(): - config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop, value) + _access_settings(ctx, prop=prop, value=value, set=True) return CommandResult(returncode=0, output='') def _get(ctx, settings): - is_global = ctx.obj['is_global'] - data_mgmt = ctx.obj['data_mgmt'] - resolver = ctx.obj['resolver'] - is_data_set_property = False - if 'is_data_set_property' in ctx.obj: - is_data_set_property = ctx.obj['is_data_set_property'] settings_list = _join_settings_get(settings) if len(settings_list) == 0: settings_list = [None] for prop in settings_list: - config_internal(data_mgmt, resolver, is_global, is_data_set_property, prop, None) + _access_settings(ctx, prop=prop, get=True) + return CommandResult(returncode=0, output='') + + +def _clear(ctx, settings): + settings_list = _join_settings_get(settings) + if len(settings_list) == 0: + settings_list = [None] + for prop in settings_list: + _access_settings(ctx, prop=prop, clear=True) return CommandResult(returncode=0, output='') @@ -302,6 +337,13 @@ def repository_get(ctx, settings): return check_result("repository_get", run(lambda: _get(ctx, settings))) +@repository.command('clear') +@click.argument('settings', type=SettingsClear(), nargs=-1) +@click.pass_context +def repository_clear(ctx, settings): + return check_result("repository_clear", run(lambda: _clear(ctx, settings))) + + ## data_set: type, properties @@ -332,6 +374,13 @@ def data_set_get(ctx, settings): return check_result("data_set_get", run(lambda: _get(ctx, settings))) +@data_set.command('clear') +@click.argument('settings', type=SettingsClear(), nargs=-1) +@click.pass_context +def data_set_clear(ctx, settings): + return check_result("data_set_clear", run(lambda: _clear(ctx, settings))) + + ## object: object_id @@ -360,6 +409,13 @@ def object_get(ctx, settings): return check_result("object_get", run(lambda: _get(ctx, settings))) +@object.command('clear') +@click.argument('settings', type=SettingsClear(), nargs=-1) +@click.pass_context +def object_clear(ctx, settings): + return check_result("object_clear", run(lambda: _clear(ctx, settings))) + + ## collection: collection_id @@ -388,6 +444,13 @@ def collection_get(ctx, settings): return check_result("collection_get", run(lambda: _get(ctx, settings))) +@collection.command('clear') +@click.argument('settings', type=SettingsClear(), nargs=-1) +@click.pass_context +def collection_clear(ctx, settings): + return check_result("collection_clear", run(lambda: _clear(ctx, settings))) + + ## config: fileservice_url, git_annex_hash_as_checksum, hostname, openbis_url, user, verify_certificates @@ -416,6 +479,13 @@ def config_get(ctx, settings): return check_result("config_get", run(lambda: _get(ctx, settings))) +@config.command('clear') +@click.argument('settings', type=SettingsClear(), nargs=-1) +@click.pass_context +def config_clear(ctx, settings): + return check_result("config_clear", run(lambda: _clear(ctx, settings))) + + # repository commands: status, sync, commit, init, addref, removeref, init_analysis ## commit