gargoyle
gargoyle copied to clipboard
Conditions continually appended to Switch value
It's highly possible that I'm just using gargoyle wrong, but I'm experiencing surprising behavior.
In one of my project's apps, I've created a gargoyle.py
file:
from __future__ import absolute_import
from gargoyle import gargoyle
gargoyle['foo'].add_condition(
condition_set='gargoyle.builtins.UserConditionSet(auth.user)',
field_name='percent',
condition='0-50'
)
My understanding is that this will make the foo
switch active for 50% of users. This seems to work. The value in the database after I run my local server is:
{
"auth.user": {
"percent": [
[
"i",
"0-50"
]
]
}
}
But now, if I restart my server, the condition is duplicated:
{
"auth.user": {
"percent": [
[
"i",
"0-50"
],
[
"i",
"0-50"
]
]
}
}
I've traced this to Switch.add_condition
:
if condition not in self.value[namespace][field_name]:
self.value[namespace][field_name].append((exclude and EXCLUDE or INCLUDE, condition))
Here it's checking if condition
which is '0-50'
is "in" a list of tuples, which will always return false. Obviously this is solvable by adding commit=False
to Switch.add_condition
. However, it makes me worry that I'm missing something fundamental.
Also curious if there is documentation for switches somewhere that I'm just missing. http://gargoyle.readthedocs.org/en/latest/ref/conditions.html is empty.