diff options
| author | pepperpepperpepper <pepper@scannerjammer.com> | 2015-09-30 00:56:49 -0700 |
|---|---|---|
| committer | pepperpepperpepper <pepper@scannerjammer.com> | 2015-09-30 00:56:49 -0700 |
| commit | 5521785e6c52dd4603699d057d62a5797844fd13 (patch) | |
| tree | 3516ba416147ebd00104f3f5fc666371432af0ae /ricky/param/multiselect.py | |
| parent | 20a896ed6a8d54c3e59baa33ce3fce7a26343c20 (diff) | |
huge rename
Diffstat (limited to 'ricky/param/multiselect.py')
| -rw-r--r-- | ricky/param/multiselect.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/ricky/param/multiselect.py b/ricky/param/multiselect.py new file mode 100644 index 0000000..d7db80f --- /dev/null +++ b/ricky/param/multiselect.py @@ -0,0 +1,56 @@ +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()) + + + def options(self): + return self._options + def _validate_options(self): + try: + int(self._options[0]['weight']) + self._options[0]['value'] + except Exception as e: + raise ValueError + + 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 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 + + 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() + def heaviest(self): + self.value = self._choose_heaviest() |
