diff options
Diffstat (limited to 'ricky/param')
| -rw-r--r-- | ricky/param/color.py | 2 | ||||
| -rw-r--r-- | ricky/param/multiselect.py | 86 | ||||
| -rw-r--r-- | ricky/param/numberrange.py | 2 | ||||
| -rw-r--r-- | ricky/param/param.py | 58 |
4 files changed, 81 insertions, 67 deletions
diff --git a/ricky/param/color.py b/ricky/param/color.py index 8980236..b331fb9 100644 --- a/ricky/param/color.py +++ b/ricky/param/color.py @@ -10,7 +10,7 @@ class Color(MultiSelect): @property def value(self): - return super(MultiSelect, self).get_value() + return super(MultiSelect, self).value_get() @value.setter def value(self, value): self._value = value diff --git a/ricky/param/multiselect.py b/ricky/param/multiselect.py index d7db80f..1db22f3 100644 --- a/ricky/param/multiselect.py +++ b/ricky/param/multiselect.py @@ -1,56 +1,60 @@ import random from ricky.param import Param + class MultiSelect(Param): def __init__(self, **kwargs): - self._options = [] - if 'options' in kwargs: self._options = kwargs['options'] or [] - super(MultiSelect, self).__init__(**kwargs) - if len(self._options): - self._validate_options() - self.default(self._choose_heaviest()) - + self._options = kwargs.get('options') or [] + super(MultiSelect, self).__init__(**kwargs) + if len(self._options): + self._validate_options() + """default value is the option with the heaviest weight""" + self.default(self._choose_heaviest()) def options(self): - return self._options + return self._options + def _validate_options(self): - try: - int(self._options[0]['weight']) - self._options[0]['value'] - except Exception as e: - raise ValueError + try: + int(self._options[0]['weight']) + self._options[0]['value'] + except Exception: + raise ValueError('Unable to validate %s\n:' % self.name) - def get_value(self): - return super(MultiSelect, self).get_value() - def set_value(self, value): - if not any([ value == i['value'] for i in self._options ]) and value != None: - raise ValueError - super(MultiSelect, self).set_value(value) - value = property(get_value, set_value) + def value_get(self): + return super(MultiSelect, self).value_get() + def value_set(self, value): + if not any([value == i['value'] for i in self._options]) and \ + value is not None: + raise ValueError + super(MultiSelect, self).value_set(value) + + value = property(value_get, value_set) def randomize(self): - weights_total = sum(map(lambda x: x["weight"], self.options())) - choice = random.randint(0, weights_total) - position = 0 - for elem in self.options(): - position += elem["weight"] - if position >= choice: - self.value = elem["value"] - break + weights_total = sum(map(lambda x: x["weight"], self.options())) + choice = random.randint(0, weights_total) + position = 0 + for elem in self.options(): + position += elem["weight"] + if position >= choice: + self.value = elem["value"] + break def _choose_heaviest(self): - heaviest_idx = 0 - heaviest_weight = 0 - idx = 0 - if (len(self.options())): - for elem in self.options(): - if elem["weight"] > heaviest_weight: - heaviest_weight = elem["weight"] - heaviest_idx = idx; - idx += 1 - return self.options()[heaviest_idx]["value"] - else: - self.randomize() + heaviest_idx = 0 + heaviest_weight = 0 + idx = 0 + if (len(self.options())): + for elem in self.options(): + if elem["weight"] > heaviest_weight: + heaviest_weight = elem["weight"] + heaviest_idx = idx + idx += 1 + return self.options()[heaviest_idx]["value"] + else: + self.randomize() + def heaviest(self): - self.value = self._choose_heaviest() + self.value = self._choose_heaviest() diff --git a/ricky/param/numberrange.py b/ricky/param/numberrange.py index 7e01a81..37b85e3 100644 --- a/ricky/param/numberrange.py +++ b/ricky/param/numberrange.py @@ -18,7 +18,7 @@ class NumberRange(MultiSelect): self.value = random.randint(self.range_min,self.range_max) @property def value(self): - return super(MultiSelect, self).get_value() + return super(MultiSelect, self).value_get() @value.setter def value(self, value): self._value = value diff --git a/ricky/param/param.py b/ricky/param/param.py index 05388f8..838da6b 100644 --- a/ricky/param/param.py +++ b/ricky/param/param.py @@ -1,38 +1,48 @@ import pprint +import sys class Param(object): -# def __init__(self, **kwargs): - def __init__(self, required=0, set_by_user=0, value=None, name=None, **kwargs): - self._value_default = None - self.name = name - self.required = required - self.is_ready = 0 - self.value = value - self.set_by_user = set_by_user + def __init__( + self, + required=0, + set_by_user=0, + value=None, + name=None, + **kwargs): + self._value_default = None + self.name = name + self.required = required + self.is_ready = 0 + self._value = value + self.set_by_user = set_by_user + def __str__(self): - return pprint.pformat(vars(self)) + return pprint.pformat(vars(self)) + + def value_get(self): + if self.set_by_user == 1: + return self._value + return self._value_default + + def value_set(self, value): + self._value = value + sys.stderr.write("trying to set %s: %s \n" % (self.name, value)) + if self._value: + self.is_ready = 1 + self.set_by_user = 1 - def get_value(self): - if self.set_by_user == 1: - return self._value - return self._value_default - def set_value(self, value): - self._value = value - if not self._value is None: - self.is_ready = 1 - self.set_by_user = 1 - value = property(get_value, set_value) + value = property(value_get, value_set) def default(self, value): - self._value_default = value + self._value_default = value @property def is_ready(self): - return self._is_ready or not self.required + return self._is_ready or not self.required + @is_ready.setter def is_ready(self, n): - self._is_ready = n - + self._is_ready = n def randomize(self): - pass + pass |
