Skip to content

Commit d783365

Browse files
committed
polishing
1 parent 9bd41e2 commit d783365

File tree

4 files changed

+125
-183
lines changed

4 files changed

+125
-183
lines changed

splitio/models/flag_sets.py

Lines changed: 0 additions & 124 deletions
This file was deleted.

splitio/storage/inmemmory.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,89 @@
1414

1515
_LOGGER = logging.getLogger(__name__)
1616

17+
class FlagSets(object):
18+
"""InMemory Flagsets storage."""
19+
20+
def __init__(self, flag_sets=[]):
21+
"""Constructor."""
22+
self._lock = threading.RLock()
23+
self.sets_feature_flag_map = {}
24+
for flag_set in flag_sets:
25+
self.sets_feature_flag_map[flag_set] = set()
26+
27+
def flag_set_exist(self, flag_set):
28+
"""
29+
Check if a flagset exist in stored flagset
30+
31+
:param flag_set: set name
32+
:type flag_set: str
33+
34+
:rtype: bool
35+
"""
36+
with self._lock:
37+
return flag_set in self.sets_feature_flag_map.keys()
38+
39+
def get_flag_set(self, flag_set):
40+
"""
41+
fetch feature flags stored in a flag set
42+
43+
:param flag_set: set name
44+
:type flag_set: str
45+
46+
:rtype: list(str)
47+
"""
48+
with self._lock:
49+
return self.sets_feature_flag_map.get(flag_set)
50+
51+
def add_flag_set(self, flag_set):
52+
"""
53+
Add new flag set to storage
54+
55+
:param flag_set: set name
56+
:type flag_set: str
57+
"""
58+
with self._lock:
59+
if not self.flag_set_exist(flag_set):
60+
self.sets_feature_flag_map[flag_set] = set()
61+
62+
def remove_flag_set(self, flag_set):
63+
"""
64+
Remove existing flag set from storage
65+
66+
:param flag_set: set name
67+
:type flag_set: str
68+
"""
69+
with self._lock:
70+
if self.flag_set_exist(flag_set):
71+
del self.sets_feature_flag_map[flag_set]
72+
73+
def add_feature_flag_to_flag_set(self, flag_set, feature_flag):
74+
"""
75+
Add a feature flag to existing flag set
76+
77+
:param flag_set: set name
78+
:type flag_set: str
79+
:param feature_flag: feature flag name
80+
:type feature_flag: str
81+
"""
82+
with self._lock:
83+
if self.flag_set_exist(flag_set):
84+
self.sets_feature_flag_map[flag_set].add(feature_flag)
85+
86+
def remove_feature_flag_to_flag_set(self, flag_set, feature_flag):
87+
"""
88+
Remove a feature flag from existing flag set
89+
90+
:param flag_set: set name
91+
:type flag_set: str
92+
:param feature_flag: feature flag name
93+
:type feature_flag: str
94+
"""
95+
with self._lock:
96+
if self.flag_set_exist(flag_set):
97+
self.sets_feature_flag_map[flag_set].remove(feature_flag)
98+
99+
17100
class InMemorySplitStorage(SplitStorage):
18101
"""InMemory implementation of a feature flag storage."""
19102

tests/models/test_flag_sets.py

Lines changed: 0 additions & 59 deletions
This file was deleted.

tests/storage/test_flag_sets.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,49 @@
11
from splitio.storage import FlagSetsFilter
2+
from splitio.storage.inmemmory import FlagSets
23

34
class FlagSetsFilterTests(object):
45
"""Flag sets filter storage tests."""
6+
def test_without_initial_set(self):
7+
flag_set = FlagSets()
8+
assert flag_set.sets_feature_flag_map == {}
9+
10+
flag_set.add_flag_set('set1')
11+
assert flag_set.get_flag_set('set1') == set({})
12+
assert flag_set.flag_set_exist('set1') == True
13+
assert flag_set.flag_set_exist('set2') == False
14+
15+
flag_set.add_feature_flag_to_flag_set('set1', 'split1')
16+
assert flag_set.get_flag_set('set1') == {'split1'}
17+
flag_set.add_feature_flag_to_flag_set('set1', 'split2')
18+
assert flag_set.get_flag_set('set1') == {'split1', 'split2'}
19+
flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
20+
assert flag_set.get_flag_set('set1') == {'split2'}
21+
flag_set.remove_flag_set('set2')
22+
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
23+
flag_set.remove_flag_set('set1')
24+
assert flag_set.sets_feature_flag_map == {}
25+
assert flag_set.flag_set_exist('set1') == False
26+
27+
def test_with_initial_set(self):
28+
flag_set = FlagSets(['set1', 'set2'])
29+
assert flag_set.sets_feature_flag_map == {'set1': set(), 'set2': set()}
30+
31+
flag_set.add_flag_set('set1')
32+
assert flag_set.get_flag_set('set1') == set({})
33+
assert flag_set.flag_set_exist('set1') == True
34+
assert flag_set.flag_set_exist('set2') == True
35+
36+
flag_set.add_feature_flag_to_flag_set('set1', 'split1')
37+
assert flag_set.get_flag_set('set1') == {'split1'}
38+
flag_set.add_feature_flag_to_flag_set('set1', 'split2')
39+
assert flag_set.get_flag_set('set1') == {'split1', 'split2'}
40+
flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
41+
assert flag_set.get_flag_set('set1') == {'split2'}
42+
flag_set.remove_flag_set('set2')
43+
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
44+
flag_set.remove_flag_set('set1')
45+
assert flag_set.sets_feature_flag_map == {}
46+
assert flag_set.flag_set_exist('set1') == False
547

648
def test_flag_set_filter(self):
749
flag_set_filter = FlagSetsFilter()

0 commit comments

Comments
 (0)