summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xexample.py3
-rw-r--r--ricky/imgrid/__init__.py8
-rw-r--r--ricky/imgrid/params.py143
-rw-r--r--ricky/param/constrainednumber.py20
4 files changed, 72 insertions, 102 deletions
diff --git a/example.py b/example.py
index ee4228d..d099bad 100755
--- a/example.py
+++ b/example.py
@@ -1,9 +1,10 @@
#!/usr/bin/python2.7
from ricky.imgradient import ImGradient
from ricky.imbreak import ImBreak
+from ricky.imgrid import ImGrid
-api = ImBreak()
+api = ImGrid()
params = api.params_init()
print params
params.randomize()
diff --git a/ricky/imgrid/__init__.py b/ricky/imgrid/__init__.py
index 3b0b128..e977115 100644
--- a/ricky/imgrid/__init__.py
+++ b/ricky/imgrid/__init__.py
@@ -1,12 +1,14 @@
from ricky.im import Im
-from ricky.imgrid.params import ImGridParams
+from ricky.imgrid.params import Params
from ricky.config import IMGRID_URL
+
class ImGrid(Im):
def __init__(self):
self.url = IMGRID_URL
+
def params_init(self):
- new_params = ImGridParams()
- #new_params = self.get_from_server()
+ new_params = Params()
+ # new_params = self.get_from_server()
new_params.api = self
return new_params
diff --git a/ricky/imgrid/params.py b/ricky/imgrid/params.py
index fc54f25..01f1ff7 100644
--- a/ricky/imgrid/params.py
+++ b/ricky/imgrid/params.py
@@ -1,5 +1,4 @@
-import random
-from ricky.params import Params
+from ricky.params import Params as _Params
from ricky.param.username import Username
from ricky.param.imageurl import ImageUrl
from ricky.param.enum import Enum
@@ -22,73 +21,7 @@ _FILETYPE_OPTIONS = [
]
-class Param_Zoom(ConstrainedNumber):
- def __init__(self, **kwargs):
- super(Param_Zoom, self).__init__(**kwargs)
- self.exclusion_range = kwargs['exclusion_range']
-
- def test_value(self):
- return not (
- (self.value > self.exclusion_range[0]) and
- (self.value < self.exclusion_range[1])
- )
-
- def randomize(self):
- weights_total = sum(
- map(lambda x: x["weight"], self.probabilities())
- ) + 10
- choice = random.randint(0, weights_total)
- position = 0
- for elem in self.probabilities():
- position += elem["weight"]
- if position >= choice:
- self.value = elem["value"]
- return
- max_tries = 10000
- while(max_tries):
- self.value = round(
- random.uniform(self.range_max, self.range_min), 2
- )
- if self.test_value:
- return
- max_tries -= 1
- raise ValueError
-
- @property
- def value(self):
- return super(Enum, self).value_get()
-
- @value.setter
- def value(self, value):
- self._value = value
- if self._value is not None:
- self.is_ready = 1
- self.set_by_user = 1
-
-
-class Param_Opacity(ConstrainedNumber):
- def __init__(self, **kwargs):
- super(Param_Opacity, self).__init__(**kwargs)
-
- def randomize(self):
- weights_total = sum(
- map(
- lambda x: x["weight"], self.probabilities()
- ) + self.range_max - self.range_min
- )
- choice = random.randint(0, weights_total)
- position = 0
- for elem in self.probabilities():
- position += elem["weight"]
- if position >= choice:
- self.value = elem["value"]
- return
- self.value = round(
- random.uniform(self.range_min, self.range_max), 2
- )
-
-
-class ImGridParams(Params):
+class Params(_Params):
def __init__(self):
self._params = (
Username(name="username", required=False),
@@ -109,42 +42,80 @@ class ImGridParams(Params):
Color(name="planebgcolor", required=False),
Color(name="bgcolor", required=False),
Color(name="linecolor", required=False),
- ConstrainedNumber(name="swing", required=False, min=-170, max=170),
- ConstrainedNumber(name="tilt", required=False, min=-170, max=170),
- ConstrainedNumber(name="roll", required=False, min=-170, max=170),
- ConstrainedNumber(name="width", required=False, min=100, max=800),
- ConstrainedNumber(name="height", required=False, min=100, max=800),
+ ConstrainedNumber(
+ name="swing",
+ required=False,
+ enforce_int=True,
+ min=-170,
+ max=170),
+ ConstrainedNumber(
+ name="tilt",
+ required=False,
+ enforce_int=True,
+ min=-170,
+ max=170),
+ ConstrainedNumber(
+ name="roll",
+ required=False,
+ enforce_int=True,
+ min=-170,
+ max=170),
+ ConstrainedNumber(
+ name="width",
+ required=False,
+ enforce_int=True,
+ min=100,
+ max=800),
+ ConstrainedNumber(
+ name="height",
+ required=False,
+ enforce_int=True,
+ min=100,
+ max=800),
ConstrainedNumber(
name="linethickness",
required=False,
+ enforce_int=True,
min=1,
max=30
),
- ConstrainedNumber(name="opacity", required=False, min=0, max=1),
- ConstrainedNumber(name="spacing", required=False, min=2, max=100),
+ ConstrainedNumber(
+ name="opacity", required=False, min=0, max=1, prec=2),
+ ConstrainedNumber(
+ name="spacing",
+ enforce_int=True,
+ required=False,
+ min=2,
+ max=100),
Bool(name="vlines", required=False),
Bool(name="hlines", required=False),
Bool(name="trim", required=False),
Bool(name="shadow", required=False),
- Param_Zoom(
+ ConstrainedNumber(
name="zoom",
required=False,
min=-12,
max=12,
- exclusion_range=[-1.1, 1.1]
+ forbidden_range_min=-1.1,
+ forbidden_range_max=1.1,
+ prec=1
)
)
- def test_values(self):
+ def _test_values(self):
return not any([
- (self.param('spacing').value > self.param('width').value),
- (self.param('spacing').value > self.param('height').value),
- (self.param('linethickness').value > self.param('width').value),
- (self.param('linethickness').value > self.param('height').value),
+ (self.__getitem__('spacing').value >
+ self.__getitem__('width').value),
+ (self.__getitem__('spacing').value >
+ self.__getitem__('height').value),
+ (self.__getitem__('linethickness').value >
+ self.__getitem__('width').value),
+ (self.__getitem__('linethickness').value >
+ self.__getitem__('height').value),
])
def randomize(self):
- p = self.params
+ p = self._params
for el in p:
if el in ['spacing', 'linethickness']:
continue
@@ -152,8 +123,8 @@ class ImGridParams(Params):
for name in ['spacing', 'linethickness']:
max_tries = 10000
while(max_tries):
- self.param(name).randomize()
- if self.test_values():
+ self.__getitem__(name).randomize()
+ if self._test_values():
return
max_tries -= 1
raise ValueError
diff --git a/ricky/param/constrainednumber.py b/ricky/param/constrainednumber.py
index 3cf009e..3563d22 100644
--- a/ricky/param/constrainednumber.py
+++ b/ricky/param/constrainednumber.py
@@ -39,16 +39,12 @@ class ConstrainedNumber(Param):
"Value %s is forbidden" % value
)
if (self.forbidden_range_max or self.forbidden_range_max == 0) and \
- self.forbidden_range_max >= value:
+ (self.forbidden_range_min or self.forbidden_range_min == 0) and \
+ self.forbidden_range_min <= value and \
+ self.forbidden_range_max >= value:
raise ValueError(
- "In forbidden range: Value %s is below %s" %
- (value, self.forbidden_range_max)
- )
- if (self.forbidden_range_min or self.forbidden_range_min == 0) and \
- self.forbidden_range_min <= value:
- raise ValueError(
- "In forbidden range: Value %s is above %s" %
- (value, self.forbidden_range_min)
+ "In forbidden range: Value %s is above %s and below %s" %
+ (value, self.forbidden_range_min, self.forbidden_range_max)
)
if self.enforce_int and type(value) != int:
raise ValueError(
@@ -77,15 +73,15 @@ class ConstrainedNumber(Param):
value = int(value)
self.value = value
- def randomize(self):
- tries = 0
+ def randomize(self, tries=0):
tries_max = 30
try:
self._generate_random()
except ValueError:
tries += 1
+ print "TRIES:%s\n" % tries
if tries < tries_max:
- self._generate_random()
+ self.randomize(tries=tries)
else:
raise ValueError(
"Unable to set random value on %s in %s tries"