Skip to content

Commit 919d06e

Browse files
committed
polishing
1 parent 8b1836c commit 919d06e

File tree

4 files changed

+68
-59
lines changed

4 files changed

+68
-59
lines changed

splitio/storage/__init__.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ class FlagSetsFilter(object):
321321
def __init__(self, flag_sets=[]):
322322
"""Constructor."""
323323
self.flag_sets = set(flag_sets)
324-
self.should_filter = any(flag_sets)
324+
self.should_filter = len(flag_sets) > 0
325325
self.sorted_flag_sets = sorted(flag_sets)
326326

327327
def set_exist(self, flag_set):
@@ -333,10 +333,8 @@ def set_exist(self, flag_set):
333333
"""
334334
if not self.should_filter:
335335
return True
336-
if not isinstance(flag_set, str) or flag_set == '':
337-
return False
338336

339-
return any(self.flag_sets.intersection(set([flag_set])))
337+
return len(self.flag_sets.intersection(set([flag_set]))) > 0
340338

341339
def intersect(self, flag_sets):
342340
"""
@@ -347,6 +345,4 @@ def intersect(self, flag_sets):
347345
"""
348346
if not self.should_filter:
349347
return True
350-
if not isinstance(flag_sets, set) or len(flag_sets) == 0:
351-
return False
352-
return any(self.flag_sets.intersection(flag_sets))
348+
return len(self.flag_sets.intersection(flag_sets)) > 0

splitio/storage/inmemmory.py

Lines changed: 41 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ def get_flag_set(self, flag_set):
4545
with self._lock:
4646
return self.sets_feature_flag_map.get(flag_set)
4747

48-
def add_flag_set(self, flag_set):
48+
def _add_flag_set(self, flag_set):
4949
"""
5050
Add new flag set to storage
5151
:param flag_set: set name
@@ -55,7 +55,7 @@ def add_flag_set(self, flag_set):
5555
if not self.flag_set_exist(flag_set):
5656
self.sets_feature_flag_map[flag_set] = set()
5757

58-
def remove_flag_set(self, flag_set):
58+
def _remove_flag_set(self, flag_set):
5959
"""
6060
Remove existing flag set from storage
6161
:param flag_set: set name
@@ -89,6 +89,22 @@ def remove_feature_flag_to_flag_set(self, flag_set, feature_flag):
8989
if self.flag_set_exist(flag_set):
9090
self.sets_feature_flag_map[flag_set].remove(feature_flag)
9191

92+
def update_flag_set(self, flag_sets, feature_flag_name, should_filter):
93+
if flag_sets is not None:
94+
for flag_set in flag_sets:
95+
if not self.flag_set_exist(flag_set):
96+
if should_filter:
97+
continue
98+
self._add_flag_set(flag_set)
99+
self.add_feature_flag_to_flag_set(flag_set, feature_flag_name)
100+
101+
def remove_flag_set(self, flag_sets, feature_flag_name, should_filter):
102+
if flag_sets is not None:
103+
for flag_set in flag_sets:
104+
self.remove_feature_flag_to_flag_set(flag_set, feature_flag_name)
105+
if self.flag_set_exist(flag_set) and len(self.get_flag_set(flag_set)) == 0 and not should_filter:
106+
self._remove_flag_set(flag_set)
107+
92108
class FlagSetsAsync(object):
93109
"""InMemory Flagsets storage."""
94110

@@ -119,7 +135,7 @@ async def get_flag_set(self, flag_set):
119135
async with self._lock:
120136
return self.sets_feature_flag_map.get(flag_set)
121137

122-
async def add_flag_set(self, flag_set):
138+
async def _add_flag_set(self, flag_set):
123139
"""
124140
Add new flag set to storage
125141
:param flag_set: set name
@@ -129,7 +145,7 @@ async def add_flag_set(self, flag_set):
129145
if not flag_set in self.sets_feature_flag_map.keys():
130146
self.sets_feature_flag_map[flag_set] = set()
131147

132-
async def remove_flag_set(self, flag_set):
148+
async def _remove_flag_set(self, flag_set):
133149
"""
134150
Remove existing flag set from storage
135151
:param flag_set: set name
@@ -163,6 +179,23 @@ async def remove_feature_flag_to_flag_set(self, flag_set, feature_flag):
163179
if flag_set in self.sets_feature_flag_map.keys():
164180
self.sets_feature_flag_map[flag_set].remove(feature_flag)
165181

182+
async def update_flag_set(self, flag_sets, feature_flag_name, should_filter):
183+
if flag_sets is not None:
184+
for flag_set in flag_sets:
185+
if not await self.flag_set_exist(flag_set):
186+
if should_filter:
187+
continue
188+
await self._add_flag_set(flag_set)
189+
await self.add_feature_flag_to_flag_set(flag_set, feature_flag_name)
190+
191+
async def remove_flag_set(self, flag_sets, feature_flag_name, should_filter):
192+
if flag_sets is not None:
193+
for flag_set in flag_sets:
194+
await self.remove_feature_flag_to_flag_set(flag_set, feature_flag_name)
195+
if await self.flag_set_exist(flag_set) and len(await self.get_flag_set(flag_set)) == 0 and not should_filter:
196+
await self._remove_flag_set(flag_set)
197+
198+
166199
class InMemorySplitStorageBase(SplitStorage):
167200
"""InMemory implementation of a feature flag storage base."""
168201

@@ -342,13 +375,7 @@ def _put(self, feature_flag):
342375
self._decrease_traffic_type_count(self._feature_flags[feature_flag.name].traffic_type_name)
343376
self._feature_flags[feature_flag.name] = feature_flag
344377
self._increase_traffic_type_count(feature_flag.traffic_type_name)
345-
if feature_flag.sets is not None:
346-
for flag_set in feature_flag.sets:
347-
if not self.flag_set.flag_set_exist(flag_set):
348-
if self.flag_set_filter.should_filter:
349-
continue
350-
self.flag_set.add_flag_set(flag_set)
351-
self.flag_set.add_feature_flag_to_flag_set(flag_set, feature_flag.name)
378+
self.flag_set.update_flag_set(feature_flag.sets, feature_flag.name, self.flag_set_filter.should_filter)
352379

353380
def _remove(self, feature_flag_name):
354381
"""
@@ -377,11 +404,7 @@ def _remove_from_flag_sets(self, feature_flag):
377404
:param feature_flag: feature flag object
378405
:type feature_flag: splitio.models.splits.Split
379406
"""
380-
if feature_flag.sets is not None:
381-
for flag_set in feature_flag.sets:
382-
self.flag_set.remove_feature_flag_to_flag_set(flag_set, feature_flag.name)
383-
if self.is_flag_set_exist(flag_set) and len(self.flag_set.get_flag_set(flag_set)) == 0 and not self.flag_set_filter.should_filter:
384-
self.flag_set.remove_flag_set(flag_set)
407+
self.flag_set.remove_flag_set(feature_flag.sets, feature_flag.name, self.flag_set_filter.should_filter)
385408

386409
def get_feature_flags_by_sets(self, sets):
387410
"""
@@ -557,13 +580,7 @@ async def _put(self, feature_flag):
557580
self._decrease_traffic_type_count(self._feature_flags[feature_flag.name].traffic_type_name)
558581
self._feature_flags[feature_flag.name] = feature_flag
559582
self._increase_traffic_type_count(feature_flag.traffic_type_name)
560-
if feature_flag.sets is not None:
561-
for flag_set in feature_flag.sets:
562-
if not await self.flag_set.flag_set_exist(flag_set):
563-
if self.flag_set_filter.should_filter:
564-
continue
565-
await self.flag_set.add_flag_set(flag_set)
566-
await self.flag_set.add_feature_flag_to_flag_set(flag_set, feature_flag.name)
583+
await self.flag_set.update_flag_set(feature_flag.sets, feature_flag.name, self.flag_set_filter.should_filter)
567584

568585
async def _remove(self, feature_flag_name):
569586
"""
@@ -592,11 +609,7 @@ async def _remove_from_flag_sets(self, feature_flag):
592609
:param feature_flag: feature flag object
593610
:type feature_flag: splitio.models.splits.Split
594611
"""
595-
if feature_flag.sets is not None:
596-
for flag_set in feature_flag.sets:
597-
await self.flag_set.remove_feature_flag_to_flag_set(flag_set, feature_flag.name)
598-
if await self.is_flag_set_exist(flag_set) and len(await self.flag_set.get_flag_set(flag_set)) == 0 and not self.flag_set_filter.should_filter:
599-
await self.flag_set.remove_flag_set(flag_set)
612+
await self.flag_set.remove_flag_set(feature_flag.sets, feature_flag.name, self.flag_set_filter.should_filter)
600613

601614
async def get_feature_flags_by_sets(self, sets):
602615
"""

tests/storage/test_flag_sets.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ def test_without_initial_set(self):
99
flag_set = FlagSets()
1010
assert flag_set.sets_feature_flag_map == {}
1111

12-
flag_set.add_flag_set('set1')
12+
flag_set._add_flag_set('set1')
1313
assert flag_set.get_flag_set('set1') == set({})
1414
assert flag_set.flag_set_exist('set1') == True
1515
assert flag_set.flag_set_exist('set2') == False
@@ -20,17 +20,17 @@ def test_without_initial_set(self):
2020
assert flag_set.get_flag_set('set1') == {'split1', 'split2'}
2121
flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
2222
assert flag_set.get_flag_set('set1') == {'split2'}
23-
flag_set.remove_flag_set('set2')
23+
flag_set._remove_flag_set('set2')
2424
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
25-
flag_set.remove_flag_set('set1')
25+
flag_set._remove_flag_set('set1')
2626
assert flag_set.sets_feature_flag_map == {}
2727
assert flag_set.flag_set_exist('set1') == False
2828

2929
def test_with_initial_set(self):
3030
flag_set = FlagSets(['set1', 'set2'])
3131
assert flag_set.sets_feature_flag_map == {'set1': set(), 'set2': set()}
3232

33-
flag_set.add_flag_set('set1')
33+
flag_set._add_flag_set('set1')
3434
assert flag_set.get_flag_set('set1') == set({})
3535
assert flag_set.flag_set_exist('set1') == True
3636
assert flag_set.flag_set_exist('set2') == True
@@ -41,9 +41,9 @@ def test_with_initial_set(self):
4141
assert flag_set.get_flag_set('set1') == {'split1', 'split2'}
4242
flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
4343
assert flag_set.get_flag_set('set1') == {'split2'}
44-
flag_set.remove_flag_set('set2')
44+
flag_set._remove_flag_set('set2')
4545
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
46-
flag_set.remove_flag_set('set1')
46+
flag_set._remove_flag_set('set1')
4747
assert flag_set.sets_feature_flag_map == {}
4848
assert flag_set.flag_set_exist('set1') == False
4949

@@ -52,7 +52,7 @@ async def test_without_initial_set_async(self):
5252
flag_set = FlagSetsAsync()
5353
assert flag_set.sets_feature_flag_map == {}
5454

55-
await flag_set.add_flag_set('set1')
55+
await flag_set._add_flag_set('set1')
5656
assert await flag_set.get_flag_set('set1') == set({})
5757
assert await flag_set.flag_set_exist('set1') == True
5858
assert await flag_set.flag_set_exist('set2') == False
@@ -63,9 +63,9 @@ async def test_without_initial_set_async(self):
6363
assert await flag_set.get_flag_set('set1') == {'split1', 'split2'}
6464
await flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
6565
assert await flag_set.get_flag_set('set1') == {'split2'}
66-
await flag_set.remove_flag_set('set2')
66+
await flag_set._remove_flag_set('set2')
6767
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
68-
await flag_set.remove_flag_set('set1')
68+
await flag_set._remove_flag_set('set1')
6969
assert flag_set.sets_feature_flag_map == {}
7070
assert await flag_set.flag_set_exist('set1') == False
7171

@@ -74,7 +74,7 @@ async def test_with_initial_set_async(self):
7474
flag_set = FlagSetsAsync(['set1', 'set2'])
7575
assert flag_set.sets_feature_flag_map == {'set1': set(), 'set2': set()}
7676

77-
await flag_set.add_flag_set('set1')
77+
await flag_set._add_flag_set('set1')
7878
assert await flag_set.get_flag_set('set1') == set({})
7979
assert await flag_set.flag_set_exist('set1') == True
8080
assert await flag_set.flag_set_exist('set2') == True
@@ -85,9 +85,9 @@ async def test_with_initial_set_async(self):
8585
assert await flag_set.get_flag_set('set1') == {'split1', 'split2'}
8686
await flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
8787
assert await flag_set.get_flag_set('set1') == {'split2'}
88-
await flag_set.remove_flag_set('set2')
88+
await flag_set._remove_flag_set('set2')
8989
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
90-
await flag_set.remove_flag_set('set1')
90+
await flag_set._remove_flag_set('set1')
9191
assert flag_set.sets_feature_flag_map == {}
9292
assert await flag_set.flag_set_exist('set1') == False
9393

tests/storage/test_inmemory_storage.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ def test_without_initial_set(self):
1919
flag_set = FlagSets()
2020
assert flag_set.sets_feature_flag_map == {}
2121

22-
flag_set.add_flag_set('set1')
22+
flag_set._add_flag_set('set1')
2323
assert flag_set.get_flag_set('set1') == set({})
2424
assert flag_set.flag_set_exist('set1') == True
2525
assert flag_set.flag_set_exist('set2') == False
@@ -30,17 +30,17 @@ def test_without_initial_set(self):
3030
assert flag_set.get_flag_set('set1') == {'split1', 'split2'}
3131
flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
3232
assert flag_set.get_flag_set('set1') == {'split2'}
33-
flag_set.remove_flag_set('set2')
33+
flag_set._remove_flag_set('set2')
3434
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
35-
flag_set.remove_flag_set('set1')
35+
flag_set._remove_flag_set('set1')
3636
assert flag_set.sets_feature_flag_map == {}
3737
assert flag_set.flag_set_exist('set1') == False
3838

3939
def test_with_initial_set(self):
4040
flag_set = FlagSets(['set1', 'set2'])
4141
assert flag_set.sets_feature_flag_map == {'set1': set(), 'set2': set()}
4242

43-
flag_set.add_flag_set('set1')
43+
flag_set._add_flag_set('set1')
4444
assert flag_set.get_flag_set('set1') == set({})
4545
assert flag_set.flag_set_exist('set1') == True
4646
assert flag_set.flag_set_exist('set2') == True
@@ -51,9 +51,9 @@ def test_with_initial_set(self):
5151
assert flag_set.get_flag_set('set1') == {'split1', 'split2'}
5252
flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
5353
assert flag_set.get_flag_set('set1') == {'split2'}
54-
flag_set.remove_flag_set('set2')
54+
flag_set._remove_flag_set('set2')
5555
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
56-
flag_set.remove_flag_set('set1')
56+
flag_set._remove_flag_set('set1')
5757
assert flag_set.sets_feature_flag_map == {}
5858
assert flag_set.flag_set_exist('set1') == False
5959

@@ -64,7 +64,7 @@ async def test_without_initial_set(self):
6464
flag_set = FlagSetsAsync()
6565
assert flag_set.sets_feature_flag_map == {}
6666

67-
await flag_set.add_flag_set('set1')
67+
await flag_set._add_flag_set('set1')
6868
assert await flag_set.get_flag_set('set1') == set({})
6969
assert await flag_set.flag_set_exist('set1') == True
7070
assert await flag_set.flag_set_exist('set2') == False
@@ -75,9 +75,9 @@ async def test_without_initial_set(self):
7575
assert await flag_set.get_flag_set('set1') == {'split1', 'split2'}
7676
await flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
7777
assert await flag_set.get_flag_set('set1') == {'split2'}
78-
await flag_set.remove_flag_set('set2')
78+
await flag_set._remove_flag_set('set2')
7979
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
80-
await flag_set.remove_flag_set('set1')
80+
await flag_set._remove_flag_set('set1')
8181
assert flag_set.sets_feature_flag_map == {}
8282
assert await flag_set.flag_set_exist('set1') == False
8383

@@ -86,7 +86,7 @@ async def test_with_initial_set(self):
8686
flag_set = FlagSetsAsync(['set1', 'set2'])
8787
assert flag_set.sets_feature_flag_map == {'set1': set(), 'set2': set()}
8888

89-
await flag_set.add_flag_set('set1')
89+
await flag_set._add_flag_set('set1')
9090
assert await flag_set.get_flag_set('set1') == set({})
9191
assert await flag_set.flag_set_exist('set1') == True
9292
assert await flag_set.flag_set_exist('set2') == True
@@ -97,9 +97,9 @@ async def test_with_initial_set(self):
9797
assert await flag_set.get_flag_set('set1') == {'split1', 'split2'}
9898
await flag_set.remove_feature_flag_to_flag_set('set1', 'split1')
9999
assert await flag_set.get_flag_set('set1') == {'split2'}
100-
await flag_set.remove_flag_set('set2')
100+
await flag_set._remove_flag_set('set2')
101101
assert flag_set.sets_feature_flag_map == {'set1': set({'split2'})}
102-
await flag_set.remove_flag_set('set1')
102+
await flag_set._remove_flag_set('set1')
103103
assert flag_set.sets_feature_flag_map == {}
104104
assert await flag_set.flag_set_exist('set1') == False
105105

0 commit comments

Comments
 (0)