66from splitio .models .grammar .condition import ConditionType
77from splitio .models .grammar .matchers .misc import DependencyMatcher
88from splitio .models .grammar .matchers .keys import UserDefinedSegmentMatcher
9- from splitio .models .grammar .matchers .rule_based_segment import RuleBasedSegmentMatcher
109from splitio .optional .loaders import asyncio
1110
1211CONTROL = 'control'
13- EvaluationContext = namedtuple ('EvaluationContext' , ['flags' , 'segment_memberships' , 'segment_rbs_memberships' , 'segment_rbs_conditions' ])
12+ EvaluationContext = namedtuple ('EvaluationContext' , ['flags' , 'segment_memberships' ])
1413
1514_LOGGER = logging .getLogger (__name__ )
1615
@@ -99,10 +98,9 @@ def _treatment_for_flag(self, flag, key, bucketing, attributes, ctx):
9998
10099class EvaluationDataFactory :
101100
102- def __init__ (self , split_storage , segment_storage , rbs_segment_storage ):
101+ def __init__ (self , split_storage , segment_storage ):
103102 self ._flag_storage = split_storage
104103 self ._segment_storage = segment_storage
105- self ._rbs_segment_storage = rbs_segment_storage
106104
107105 def context_for (self , key , feature_names ):
108106 """
@@ -116,50 +114,28 @@ def context_for(self, key, feature_names):
116114 pending = set (feature_names )
117115 splits = {}
118116 pending_memberships = set ()
119- pending_rbs_memberships = set ()
120117 while pending :
121118 fetched = self ._flag_storage .fetch_many (list (pending ))
122119 features = filter_missing (fetched )
123120 splits .update (features )
124121 pending = set ()
125122 for feature in features .values ():
126- cf , cs , crbs = get_dependencies (feature )
123+ cf , cs = get_dependencies (feature )
127124 pending .update (filter (lambda f : f not in splits , cf ))
128125 pending_memberships .update (cs )
129- pending_rbs_memberships .update (crbs )
130-
131- rbs_segment_memberships = {}
132- rbs_segment_conditions = {}
133- key_membership = False
134- segment_memberhsip = False
135- for rbs_segment in pending_rbs_memberships :
136- key_membership = key in self ._rbs_segment_storage .get (rbs_segment ).excluded .get_excluded_keys ()
137- segment_memberhsip = False
138- for segment_name in self ._rbs_segment_storage .get (rbs_segment ).excluded .get_excluded_segments ():
139- if self ._segment_storage .segment_contains (segment_name , key ):
140- segment_memberhsip = True
141- break
142-
143- rbs_segment_memberships .update ({rbs_segment : segment_memberhsip or key_membership })
144- if not (segment_memberhsip or key_membership ):
145- rbs_segment_conditions .update ({rbs_segment : [condition for condition in self ._rbs_segment_storage .get (rbs_segment ).conditions ]})
146-
147- return EvaluationContext (
148- splits ,
149- { segment : self ._segment_storage .segment_contains (segment , key )
150- for segment in pending_memberships
151- },
152- rbs_segment_memberships ,
153- rbs_segment_conditions
154- )
126+
127+ return EvaluationContext (splits , {
128+ segment : self ._segment_storage .segment_contains (segment , key )
129+ for segment in pending_memberships
130+ })
131+
155132
156133class AsyncEvaluationDataFactory :
157134
158- def __init__ (self , split_storage , segment_storage , rbs_segment_storage ):
135+ def __init__ (self , split_storage , segment_storage ):
159136 self ._flag_storage = split_storage
160137 self ._segment_storage = segment_storage
161- self ._rbs_segment_storage = rbs_segment_storage
162-
138+
163139 async def context_for (self , key , feature_names ):
164140 """
165141 Recursively iterate & fetch all data required to evaluate these flags.
@@ -172,47 +148,23 @@ async def context_for(self, key, feature_names):
172148 pending = set (feature_names )
173149 splits = {}
174150 pending_memberships = set ()
175- pending_rbs_memberships = set ()
176151 while pending :
177152 fetched = await self ._flag_storage .fetch_many (list (pending ))
178153 features = filter_missing (fetched )
179154 splits .update (features )
180155 pending = set ()
181156 for feature in features .values ():
182- cf , cs , crbs = get_dependencies (feature )
157+ cf , cs = get_dependencies (feature )
183158 pending .update (filter (lambda f : f not in splits , cf ))
184159 pending_memberships .update (cs )
185- pending_rbs_memberships .update (crbs )
186-
160+
187161 segment_names = list (pending_memberships )
188162 segment_memberships = await asyncio .gather (* [
189163 self ._segment_storage .segment_contains (segment , key )
190164 for segment in segment_names
191165 ])
192166
193- rbs_segment_memberships = {}
194- rbs_segment_conditions = {}
195- key_membership = False
196- segment_memberhsip = False
197- for rbs_segment in pending_rbs_memberships :
198- rbs_segment_obj = await self ._rbs_segment_storage .get (rbs_segment )
199- key_membership = key in rbs_segment_obj .excluded .get_excluded_keys ()
200- segment_memberhsip = False
201- for segment_name in rbs_segment_obj .excluded .get_excluded_segments ():
202- if await self ._segment_storage .segment_contains (segment_name , key ):
203- segment_memberhsip = True
204- break
205-
206- rbs_segment_memberships .update ({rbs_segment : segment_memberhsip or key_membership })
207- if not (segment_memberhsip or key_membership ):
208- rbs_segment_conditions .update ({rbs_segment : [condition for condition in rbs_segment_obj .conditions ]})
209-
210- return EvaluationContext (
211- splits ,
212- dict (zip (segment_names , segment_memberships )),
213- rbs_segment_memberships ,
214- rbs_segment_conditions
215- )
167+ return EvaluationContext (splits , dict (zip (segment_names , segment_memberships )))
216168
217169
218170def get_dependencies (feature ):
@@ -221,17 +173,14 @@ def get_dependencies(feature):
221173 """
222174 feature_names = []
223175 segment_names = []
224- rbs_segment_names = []
225176 for condition in feature .conditions :
226177 for matcher in condition .matchers :
227- if isinstance (matcher ,RuleBasedSegmentMatcher ):
228- rbs_segment_names .append (matcher ._rbs_segment_name )
229178 if isinstance (matcher ,UserDefinedSegmentMatcher ):
230179 segment_names .append (matcher ._segment_name )
231180 elif isinstance (matcher , DependencyMatcher ):
232181 feature_names .append (matcher ._split_name )
233182
234- return feature_names , segment_names , rbs_segment_names
183+ return feature_names , segment_names
235184
236185def filter_missing (features ):
237186 return {k : v for (k , v ) in features .items () if v is not None }
0 commit comments