diff --git a/test/test_option_consistency.py b/test/test_option_consistency.py index 35d140d..ff5c3e8 100644 --- a/test/test_option_consistency.py +++ b/test/test_option_consistency.py @@ -241,6 +241,13 @@ def test_consistency_not_equal_masterslave(): c.a = [1] raises(ValueError, "c.b = [1]") c.b = [2] + del(c.a) + c.a.append(1) + c.make_dict() + c.b[0] = 3 + c.a.append(2) + c.b[0] = 3 + raises(ValueError, "c.b[1] = 3") def test_consistency_not_equal_masterslaves_default(): diff --git a/tiramisu/option/baseoption.py b/tiramisu/option/baseoption.py index 6137b9a..55021b3 100644 --- a/tiramisu/option/baseoption.py +++ b/tiramisu/option/baseoption.py @@ -661,10 +661,16 @@ class Option(OnlyOption): if err: return err else: - if self.impl_is_unique() and value in multi: - return ValueError(_('invalid value "{}", this value is already' - ' in "{}"').format(value, - self.impl_get_display_name())) + if multi is not None and self.impl_is_unique() and value in multi: + if not self.impl_is_submulti() and len(multi) - 1 >= force_index: + lst = list(multi) + lst.pop(force_index) + else: + lst = multi + if value in lst: + return ValueError(_('invalid value "{}", this value is already' + ' in "{}"').format(value, + self.impl_get_display_name())) return do_validation(value, force_index, force_submulti_index) elif not isinstance(value, list): return ValueError(_('invalid value "{0}" for "{1}" which '