summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPepper <pepper@scannerjammer.com>2015-03-05 04:35:02 -0500
committerPepper <pepper@scannerjammer.com>2015-03-05 04:35:02 -0500
commite7d397472c7f6f6ba7b911ae8afff9bcb6a56b92 (patch)
treeed4e7c9f107f9227eccfec9ccb6f21d1b851845f
parent6b00d986288c735e0dba400a3ac02e4809279de2 (diff)
working better now
-rw-r--r--Pb_Api/ImPattern/Params.py2
-rw-r--r--Pb_Api/Param/Image_Url.py2
-rw-r--r--Pb_Api/Param/MultiSelect.py41
-rw-r--r--Pb_Api/Param/String.py4
-rw-r--r--Pb_Api/Param/Username.py6
-rw-r--r--Pb_Api/Param/__init__.py57
-rw-r--r--Pb_Api/Params.py51
-rw-r--r--test2.py10
8 files changed, 104 insertions, 69 deletions
diff --git a/Pb_Api/ImPattern/Params.py b/Pb_Api/ImPattern/Params.py
index c308ed1..c01fd4d 100644
--- a/Pb_Api/ImPattern/Params.py
+++ b/Pb_Api/ImPattern/Params.py
@@ -14,5 +14,5 @@ class ImPattern_Params(Pb_Api_Params):
self.params = [
Pb_Api_Param_Username(name="username", required=1),
Pb_Api_Param_Image_Url(name="image_url", required=1),
-# Pb_Api_Param_MultiSelect(name="pattern_url", required=1, options=pattern_url_options)
+ Pb_Api_Param_MultiSelect(name="pattern_url", required=1, options=pattern_url_options)
]
diff --git a/Pb_Api/Param/Image_Url.py b/Pb_Api/Param/Image_Url.py
index f5e91b9..bd22513 100644
--- a/Pb_Api/Param/Image_Url.py
+++ b/Pb_Api/Param/Image_Url.py
@@ -4,4 +4,4 @@ from Pb_Api.Param.String import Pb_Api_Param_String
class Pb_Api_Param_Image_Url(Pb_Api_Param_String):
def __init__(self, *args, **kwargs):
super(Pb_Api_Param_Image_Url, self).__init__(*args, **kwargs)
- self.value(TEST_URL, default=1)
+ self.default(TEST_URL)
diff --git a/Pb_Api/Param/MultiSelect.py b/Pb_Api/Param/MultiSelect.py
index 4ddf11e..2c8c32c 100644
--- a/Pb_Api/Param/MultiSelect.py
+++ b/Pb_Api/Param/MultiSelect.py
@@ -1,17 +1,40 @@
+import random
from Pb_Api.Param import Pb_Api_Param
class Pb_Api_Param_MultiSelect(Pb_Api_Param):
def __init__(self, *args, **kwargs):
- super(Pb_Api_Param_MultiSelect, self).__init__(*args, **kwargs)
self._options = kwargs['options']
+ super(Pb_Api_Param_MultiSelect, self).__init__(*args, **kwargs)
def options(self):
return self._options
- def value(self, *args):
- if len(args) > 1:
- valid = False
- for i in self.options():
- if args[0] == i['value']: valid = True
- if not valid : raise ValueError
- super(Pb_Api_Param_MultiSelect, self).value(args[0])
+
+ @property
+ def value(self):
+ return super(Pb_Api_Param_MultiSelect, self).get_value()
+ @value.setter
+ def value(self, value):
+ valid = False
+ for i in self.options():
+ if value == i['value']: valid = True
+ if value is None: valid = True
+ if not valid : raise ValueError
+ super(Pb_Api_Param_MultiSelect, self).set_value(value)
def randomize(self):
- pass
+ 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 heaviest(self, param):
+ heaviest_idx = 0
+ heaviest_weight = 0
+ idx = 0
+ for elem in self.options():
+ if elem["weight"] > heaviest_weight:
+ heaviest_weight = elem["weight"]
+ heaviest_idx = idx;
+ idx += 1
+ self.value = self.options()[heaviest_idx]["value"]
diff --git a/Pb_Api/Param/String.py b/Pb_Api/Param/String.py
index a1161a8..3c186f4 100644
--- a/Pb_Api/Param/String.py
+++ b/Pb_Api/Param/String.py
@@ -1,4 +1,4 @@
from Pb_Api.Param import Pb_Api_Param
class Pb_Api_Param_String(Pb_Api_Param):
- def __init__(self, *args, **kwargs):
- super(Pb_Api_Param_String, self).__init__(*args, **kwargs)
+ def __init__(self, **kwargs):
+ super(Pb_Api_Param_String, self).__init__(**kwargs)
diff --git a/Pb_Api/Param/Username.py b/Pb_Api/Param/Username.py
index 3b691e8..5bd3237 100644
--- a/Pb_Api/Param/Username.py
+++ b/Pb_Api/Param/Username.py
@@ -2,6 +2,6 @@ from config import USERNAME
from Pb_Api.Param.String import Pb_Api_Param_String
class Pb_Api_Param_Username(Pb_Api_Param_String):
- def __init__(self, *args, **kwargs):
- super(Pb_Api_Param_Username, self).__init__(*args, **kwargs)
- self.value(USERNAME, default=1)
+ def __init__(self, **kwargs):
+ super(Pb_Api_Param_Username, self).__init__(**kwargs)
+ self.default(USERNAME)
diff --git a/Pb_Api/Param/__init__.py b/Pb_Api/Param/__init__.py
index 62d05ea..362a3f7 100644
--- a/Pb_Api/Param/__init__.py
+++ b/Pb_Api/Param/__init__.py
@@ -1,25 +1,38 @@
-class Pb_Api_Param(object):
- def __init__(self, *args, **kwargs):
- self._name = kwargs['name']
- self._value = kwargs['value']
- def name(self):
- return self._name
- def required(self):
- return self._required
+import pprint
- def is_default(self, a=0):
- if a: self._is_default = 1
- return self._is_default
+class Pb_Api_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 #should I try that?
+ self.value = value
+ self.set_by_user = set_by_user
+ def __str__(self):
+ return pprint.pformat(vars(self))
- def value(self, *args, **kwargs):
- if len(args) >= 1:
- self._value = args[0]
- if 'default' in kwargs:
- self.is_default(1)
- self.is_ready(1)
- return self._value
+ 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 #like that? yeah also need method for setting default value
+ value = property(get_value, set_value)
- def is_ready(self, *args):
- if len(args) >= 1:
- self._is_ready = args[0]
- return self._is_ready or not self.required()
+ def default(self, value):
+ self._value_default = value
+
+ @property
+ def is_ready(self):
+ return self._is_ready or not self.required
+ @is_ready.setter
+ def is_ready(self, n):
+ self._is_ready = n
+
+
+ def randomize(self):
+ pass
diff --git a/Pb_Api/Params.py b/Pb_Api/Params.py
index b96a9af..fff0696 100644
--- a/Pb_Api/Params.py
+++ b/Pb_Api/Params.py
@@ -1,41 +1,34 @@
+import pprint
class Pb_Api_Params(object):
- def _weighted_choice(self, param):
- weights_total = sum(map(lambda x: x["weight"], param))
- choice = random.randint(0, weights_total)
- position = 0
- for elem in param:
- position += elem["weight"]
- if position >= choice:
- return elem["value"]
- def _default_choice(self, param):
- heaviest_idx = 0
- heaviest_weight = 0
- idx = 0
- for elem in param:
- if elem["weight"] > heaviest_weight:
- heaviest_weight = elem["weight"]
- heaviest_idx = idx;
- idx += 1
- return param[heaviest_idx]["value"]
+ #so how do we need to change these?
+ def param(self, name):
+ for p in self.params:
+ if p.name == name:
+ return p
+ return None
+
+ def __str__(self):
+ return pprint.pformat({ "params": map(lambda x: vars(x), self.params) })
+
+#do we need to add a simple __iter__ attribute to that class so that map will work, or is it already
+#iterating? it is already
+
+
+
def randomize(self):
for el in self.params:
- if el.manually_set:
+ if el.set_by_user:
continue
el.randomize()
+
+
def is_ready(self):
- for p in self.params():
+ for p in self.params:
if not p.is_ready():
return 0
return 1
- def params(self):
- return self._params
- def param(self, name):
- for p in self.params():
- if p.name() == name:
- return p
- return None
def as_hash(self):
result = {}
- for p in self.params():
- result[p.name()] = p.value()
+ for p in self.params:
+ result[p.name] = p.value
return result
diff --git a/test2.py b/test2.py
index 7562b21..42a9cfb 100644
--- a/test2.py
+++ b/test2.py
@@ -4,5 +4,11 @@ import pprint
p = Pb_Api_ImPattern()
params = p.params()
-#params.param("image_url").value("http://hello")
-#pprint.pprint(params.as_hash())
+params.param("image_url").value = "http://hello"
+print params
+params.randomize()
+pprint.pprint(params.as_hash())
+# well something like this how do you feel about it? seems right? yep looks good, need to go over ranomization and defaults a bit, but core is ready to use lets just look at randomization for a second? sure
+# works, but i think need to reconsider default somehow, it should be something like set_by_user to make sure user set that, and not automated default, or something like that. why is it better to use set by user? well default doesn't say much about value, and in intialization we say that values passed is default, which is not really true. to find difference ( and make randomize() code clearer) it should be somehting like if not el.set_by_user: el.randomize()
+# yeahh ok
+# well like this, but need to check randomization, keep selecting 1.png weird