From f00f0498f95462c905b916d4752d7d71ad4b3c7e Mon Sep 17 00:00:00 2001 From: Yves Noirjean <yves.noirjean@id.ethz.ch> Date: Tue, 27 Mar 2018 12:06:42 +0200 Subject: [PATCH] obis: more convenient way to set data set properties --- .../14_config_data_set_properties_1.sh | 6 ++++++ .../14_config_data_set_properties_2.sh | 6 ++++++ .../integration_tests/integration_tests.py | 9 ++++++++- src/python/OBis/obis/dm/config.py | 18 ++++++------------ src/python/OBis/obis/scripts/cli.py | 11 +++++++---- 5 files changed, 33 insertions(+), 17 deletions(-) create mode 100755 src/python/OBis/integration_tests/14_config_data_set_properties_1.sh create mode 100755 src/python/OBis/integration_tests/14_config_data_set_properties_2.sh diff --git a/src/python/OBis/integration_tests/14_config_data_set_properties_1.sh b/src/python/OBis/integration_tests/14_config_data_set_properties_1.sh new file mode 100755 index 00000000000..fca02931ed0 --- /dev/null +++ b/src/python/OBis/integration_tests/14_config_data_set_properties_1.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +cd $1/obis_data +obis init data8 && cd data8 +obis config -p a 0 + diff --git a/src/python/OBis/integration_tests/14_config_data_set_properties_2.sh b/src/python/OBis/integration_tests/14_config_data_set_properties_2.sh new file mode 100755 index 00000000000..02cfccc8ac7 --- /dev/null +++ b/src/python/OBis/integration_tests/14_config_data_set_properties_2.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +cd $1/obis_data/data8 +obis config data_set_properties '{ "a": "0", "b": "1", "c": "2"}' +obis config -p c 3 + diff --git a/src/python/OBis/integration_tests/integration_tests.py b/src/python/OBis/integration_tests/integration_tests.py index f134ba5a8e9..0640be5f1a4 100644 --- a/src/python/OBis/integration_tests/integration_tests.py +++ b/src/python/OBis/integration_tests/integration_tests.py @@ -60,7 +60,6 @@ def test_obis(tmpdir): data_set = o.get_dataset(config['data_set_id']).data assert_matching(config, data_set, tmpdir, 'obis_data/data1') - # 3. Second commit config_before = json.loads(run('./00_get_config.sh', tmpdir + '/obis_data/data1')) result = run('./03_second_commit_1_commit.sh', tmpdir) @@ -189,3 +188,11 @@ def test_obis(tmpdir): assert_matching(config, data_set, tmpdir, 'obis_data/data7') result = run('./13_sync_2_only_sync.sh', tmpdir) assert 'Nothing to sync' in result + + # 14. Configure data set properties + result = run('./14_config_data_set_properties_1.sh', tmpdir) + config = json.loads(run('./00_get_config.sh', tmpdir + '/obis_data/data8')) + assert config['data_set_properties'] == { 'a': '0' } + result = run('./14_config_data_set_properties_2.sh', tmpdir) + config = json.loads(run('./00_get_config.sh', tmpdir + '/obis_data/data8')) + assert config['data_set_properties'] == { 'a': '0', 'b': '1', 'c': '3' } diff --git a/src/python/OBis/obis/dm/config.py b/src/python/OBis/obis/dm/config.py index 019aeaf924e..a10eb8e6c7e 100644 --- a/src/python/OBis/obis/dm/config.py +++ b/src/python/OBis/obis/dm/config.py @@ -216,20 +216,13 @@ class ConfigResolverImpl(object): if not param.is_json: raise ValueError('Can not set json value for non-json parameter: ' + json_param_name) - import pdb; pdb.set_trace() - # TODO - json_value = json.loads(self.value_for_parameter(param, loc)) + json_value = self.value_for_parameter(param, loc) + if json_value is None: + json_value = {} json_value[name] = value - location_config_dict = self.set_cache_value_for_parameter(param, value, loc) - location_path = param.location_path(loc) - location = self.env.location_at_path(location_path) - location_dir_path = self.location_resolver.resolve_location(location) - if not os.path.exists(location_dir_path): - os.makedirs(location_dir_path) - config_path = os.path.join(location_dir_path, self.config_file) - with open(config_path, "w") as f: - json.dump(location_config_dict, f, sort_keys=True) + self.set_value_for_parameter(json_param_name, json_value, loc) + def value_for_parameter(self, param, loc): config = self.location_cache[loc] @@ -289,6 +282,7 @@ class ConfigResolver(object): for resolver in self.resolvers: if name in resolver.env.params: return resolver.set_value_for_parameter(name, value, loc) + raise ValueError('Config does not exist: ' + name) def set_value_for_json_parameter(self, json_param_name, name, value, loc): for resolver in self.resolvers: diff --git a/src/python/OBis/obis/scripts/cli.py b/src/python/OBis/obis/scripts/cli.py index 31f73483f4a..3340facdeaf 100644 --- a/src/python/OBis/obis/scripts/cli.py +++ b/src/python/OBis/obis/scripts/cli.py @@ -138,10 +138,13 @@ def set_property(data_mgmt, prop, value, is_global, is_data_set_property): """Helper function to implement the property setting semantics.""" loc = 'global' if is_global else 'local' resolver = data_mgmt.config_resolver - if is_data_set_property: - resolver.set_value_for_json_parameter('data_set_properties', prop, value, loc) - else: - resolver.set_value_for_parameter(prop, value, loc) + try: + if is_data_set_property: + resolver.set_value_for_json_parameter('data_set_properties', prop, value, loc) + else: + resolver.set_value_for_parameter(prop, value, loc) + except ValueError as e: + return CommandResult(returncode=-1, output="Error: " + str(e)) if not is_global: return data_mgmt.commit_metadata_updates(prop) else: -- GitLab