Skip to content

Commit e9d0a7c

Browse files
committed
added storage helper
1 parent 82b2777 commit e9d0a7c

File tree

1 file changed

+99
-0
lines changed

1 file changed

+99
-0
lines changed

splitio/util/storage_helper.py

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
"""Storage Helper."""
2+
import logging
3+
4+
from splitio.models import splits
5+
6+
_LOGGER = logging.getLogger(__name__)
7+
8+
def update_feature_flag_storage(feature_flag_storage, feature_flags, change_number):
9+
"""
10+
Update feature flag storage from given list of feature flags while checking the flag set logic
11+
12+
:param feature_flag_storage: Feature flag storage instance
13+
:type feature_flag_storage: splitio.storage.inmemory.InMemorySplitStorage
14+
:param feature_flag: Feature flag instance to validate.
15+
:type feature_flag: splitio.models.splits.Split
16+
:param: last change number
17+
:type: int
18+
19+
:return: segments list from feature flags list
20+
:rtype: list(str)
21+
"""
22+
segment_list = set()
23+
to_add = []
24+
to_delete = []
25+
for feature_flag in feature_flags:
26+
if feature_flag_storage.flag_set_filter.intersect(feature_flag.sets) and feature_flag.status == splits.Status.ACTIVE:
27+
to_add.append(feature_flag)
28+
segment_list.update(set(feature_flag.get_segment_names()))
29+
else:
30+
if feature_flag_storage.get(feature_flag.name) is not None:
31+
to_delete.append(feature_flag.name)
32+
33+
feature_flag_storage.update(to_add, to_delete, change_number)
34+
return segment_list
35+
36+
async def update_feature_flag_storage_async(feature_flag_storage, feature_flags, change_number):
37+
"""
38+
Update feature flag storage from given list of feature flags while checking the flag set logic
39+
40+
:param feature_flag_storage: Feature flag storage instance
41+
:type feature_flag_storage: splitio.storage.inmemory.InMemorySplitStorage
42+
:param feature_flag: Feature flag instance to validate.
43+
:type feature_flag: splitio.models.splits.Split
44+
:param: last change number
45+
:type: int
46+
47+
:return: segments list from feature flags list
48+
:rtype: list(str)
49+
"""
50+
segment_list = set()
51+
to_add = []
52+
to_delete = []
53+
for feature_flag in feature_flags:
54+
if feature_flag_storage.flag_set_filter.intersect(feature_flag.sets) and feature_flag.status == splits.Status.ACTIVE:
55+
to_add.append(feature_flag)
56+
segment_list.update(set(feature_flag.get_segment_names()))
57+
else:
58+
if await feature_flag_storage.get(feature_flag.name) is not None:
59+
to_delete.append(feature_flag.name)
60+
61+
await feature_flag_storage.update(to_add, to_delete, change_number)
62+
return segment_list
63+
64+
def get_valid_flag_sets(flag_sets, flag_set_filter):
65+
"""
66+
Check each flag set in given array, return it if exist in a given config flag set array, if config array is empty return all
67+
68+
:param flag_sets: Flag sets array
69+
:type flag_sets: list(str)
70+
:param config_flag_sets: Config flag sets array
71+
:type config_flag_sets: list(str)
72+
73+
:return: array of flag sets
74+
:rtype: list(str)
75+
"""
76+
sets_to_fetch = []
77+
for flag_set in flag_sets:
78+
if not flag_set_filter.set_exist(flag_set) and flag_set_filter.should_filter:
79+
_LOGGER.warning("Flag set %s is not part of the configured flag set list, ignoring the request." % (flag_set))
80+
continue
81+
sets_to_fetch.append(flag_set)
82+
83+
return sets_to_fetch
84+
85+
def combine_valid_flag_sets(result_sets):
86+
"""
87+
Check each flag set in given array of sets, combine all flag sets in one unique set
88+
89+
:param result_sets: Flag sets set
90+
:type flag_sets: list(set)
91+
92+
:return: flag sets set
93+
:rtype: set
94+
"""
95+
to_return = set()
96+
for result_set in result_sets:
97+
if isinstance(result_set, set) and len(result_set) > 0:
98+
to_return.update(result_set)
99+
return to_return

0 commit comments

Comments
 (0)