summaryrefslogtreecommitdiffstats
path: root/ipapython
diff options
context:
space:
mode:
Diffstat (limited to 'ipapython')
-rw-r--r--ipapython/install/core.py31
1 files changed, 19 insertions, 12 deletions
diff --git a/ipapython/install/core.py b/ipapython/install/core.py
index 8e3ba5802..2f62b8568 100644
--- a/ipapython/install/core.py
+++ b/ipapython/install/core.py
@@ -118,16 +118,6 @@ class KnobBase(PropertyBase):
def __init__(self, outer):
self.outer = outer
- def __set__(self, obj, value):
- try:
- self.validate(value)
- except KnobValueError:
- raise
- except ValueError as e:
- raise KnobValueError(self.__outer_name__, str(e))
-
- super(KnobBase, self).__set__(obj, value)
-
def validate(self, value):
pass
@@ -253,8 +243,25 @@ class Configurable(six.with_metaclass(abc.ABCMeta, object)):
except KeyError:
pass
else:
- prop = prop_cls(self)
- prop.__set__(self, value)
+ setattr(self, name, value)
+
+ for owner_cls, name in cls.knobs():
+ if name.startswith('_'):
+ continue
+ if not isinstance(self, owner_cls):
+ continue
+ value = getattr(self, name, None)
+ if value is None:
+ continue
+
+ prop_cls = getattr(owner_cls, name)
+ prop = prop_cls(self)
+ try:
+ prop.validate(value)
+ except KnobValueError:
+ raise
+ except ValueError as e:
+ raise KnobValueError(name, str(e))
if kwargs:
extra = sorted(kwargs)