diff --git a/src/python/OBis/obis/dm/config.py b/src/python/OBis/obis/dm/config.py index 8912000b7caf637ecadd3846b69e7a7c9cbf5030..8ae82b284d35711eced67d68e8ff6fae85d18058 100644 --- a/src/python/OBis/obis/dm/config.py +++ b/src/python/OBis/obis/dm/config.py @@ -309,14 +309,13 @@ class ConfigResolver(object): class SettingsResolver(object): """ This class functions as a wrapper since we have multiple config resolvers. """ - + # TODO make sure all methods work with this and individual resolvers def __init__(self, location_resolver=None): self.repository_resolver = ConfigResolver(location_resolver=location_resolver, env=RepositoryEnv(), config_file='repository.json') self.data_set_resolver = ConfigResolver(location_resolver=location_resolver, env=DataSetEnv(), config_file='data_set.json') self.object_resolver = ConfigResolver(location_resolver=location_resolver, env=ObjectEnv(), config_file='object.json') self.collection_resolver = ConfigResolver(location_resolver=location_resolver, env=CollectionEnv(), config_file='collection.json') self.config_resolver = ConfigResolver(location_resolver=location_resolver, env=ConfigEnv()) - # TODO remove self.resolvers and all methods self.resolvers = [] self.resolvers.append(self.repository_resolver) self.resolvers.append(self.data_set_resolver) diff --git a/src/python/OBis/obis/scripts/cli.py b/src/python/OBis/obis/scripts/cli.py index 2762c9fa08e267ab71117a6b9a158a286706372b..d60aa66f2475585e8cf7b527852ec0606c075c0c 100644 --- a/src/python/OBis/obis/scripts/cli.py +++ b/src/python/OBis/obis/scripts/cli.py @@ -161,6 +161,7 @@ class SettingsSet(click.ParamType): def convert(self, value, param, ctx): try: + value = self._encode_json(value) settings = {} split = list(filter(lambda term: len(term) > 0, value.split(','))) for setting in split: @@ -169,11 +170,30 @@ class SettingsSet(click.ParamType): self._fail(param) key = setting_split[0] value = setting_split[1] - settings[key] = value + settings[key] = self._decode_json(value) return settings except: self._fail(param) + def _encode_json(self, value): + encoded = '' + SEEK = 0 + ENCODE = 1 + mode = SEEK + for char in value: + if char == '{': + mode = ENCODE + elif char == '}': + mode = SEEK + if mode == SEEK: + encoded += char + elif mode == ENCODE: + encoded += char.replace(',', '|') + return encoded + + def _decode_json(self, value): + return value.replace('|', ',') + def _fail(self, param): self.fail(param=param, message='Settings must be in the format: key1=value1, key2=value2, ...') @@ -251,14 +271,20 @@ def _get(ctx, settings): @click.pass_context def settings(ctx, is_global): ctx.obj['is_global'] = is_global - ctx.obj['data_mgmt'] = shared_data_mgmt(ctx.obj) - ctx.obj['resolver'] = ctx.obj['data_mgmt'].settings_resolver @settings.command('get') @click.pass_context def settings_get(ctx): - _get(ctx, []) + data_mgmt = shared_data_mgmt(ctx.obj) + settings = {} + for resolver in data_mgmt.settings_resolver.resolvers: + if ctx.obj['is_global']: + resolver.set_location_search_order(['global']) + key = resolver.config_file.split('.')[0] + settings[key] = resolver.config_dict() + settings_str = json.dumps(settings, indent=4, sort_keys=True) + click.echo("{}".format(settings_str)) ## repository: repository_id, external_dms_id, data_set_id