From 6f5d471db19abca10c43c3c0b0907eebd268e221 Mon Sep 17 00:00:00 2001 From: Emmanuel Garette Date: Tue, 4 Feb 2014 21:40:07 +0100 Subject: [PATCH] if option with requires has a property, calculated properties are store in storage --- test/test_requires.py | 22 ++++++++++++++++++++++ tiramisu/setting.py | 10 +++++----- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/test/test_requires.py b/test/test_requires.py index 4cf9372..ff9c2a6 100644 --- a/test/test_requires.py +++ b/test/test_requires.py @@ -24,6 +24,28 @@ def test_requires(): except PropertiesOptionError as err: props = err.proptype assert props == ['disabled'] + c.activate_service = True + c.ip_address_service + + +def test_requires_with_requires(): + a = BoolOption('activate_service', '', True) + b = IPOption('ip_address_service', '', + requires=[{'option': a, 'expected': False, 'action': 'disabled'}]) + od = OptionDescription('service', '', [a, b]) + c = Config(od) + c.read_write() + c.cfgimpl_get_settings()[b].append('test') + c.ip_address_service + c.activate_service = False + props = [] + try: + c.ip_address_service + except PropertiesOptionError as err: + props = err.proptype + assert props == ['disabled'] + c.activate_service = True + c.ip_address_service def test_requires_invalid(): diff --git a/tiramisu/setting.py b/tiramisu/setting.py index 99347f1..4092ae6 100644 --- a/tiramisu/setting.py +++ b/tiramisu/setting.py @@ -361,7 +361,7 @@ class Settings(object): def _getproperties(self, opt=None, path=None, is_apply_req=True): if opt is None: - props = self._p_.getproperties(path, default_properties) + props = copy(self._p_.getproperties(path, default_properties)) else: if path is None: raise ValueError(_('if opt is not None, path should not be' @@ -372,8 +372,8 @@ class Settings(object): ntime = int(time()) is_cached, props = self._p_.getcache(path, ntime) if is_cached: - return props - props = self._p_.getproperties(path, opt._properties) + return copy(props) + props = copy(self._p_.getproperties(path, opt._properties)) if is_apply_req: props |= self.apply_requires(opt, path) if 'cache' in self: @@ -435,8 +435,8 @@ class Settings(object): (typically with the `frozen` property) """ # opt properties - properties = copy(self._getproperties(opt_or_descr, path)) - self_properties = copy(self._getproperties()) + properties = self._getproperties(opt_or_descr, path) + self_properties = self._getproperties() # remove opt permissive # permissive affect option's permission with or without permissive # global property