1010
1111SplitView = namedtuple (
1212 'SplitView' ,
13- ['name' , 'traffic_type' , 'killed' , 'treatments' , 'change_number' , 'configs' , 'default_treatment' , 'sets' , 'impressions_disabled' ]
13+ ['name' , 'traffic_type' , 'killed' , 'treatments' , 'change_number' , 'configs' , 'default_treatment' , 'sets' , 'impressions_disabled' , 'prerequisites' ]
1414)
1515
1616_DEFAULT_CONDITIONS_TEMPLATE = {
4040 "label" : "targeting rule type unsupported by sdk"
4141}
4242
43+ class Prerequisites (object ):
44+ """Prerequisites."""
45+ def __init__ (self , feature_flag_name , treatments ):
46+ self ._feature_flag_name = feature_flag_name
47+ self ._treatments = treatments
48+
49+ @property
50+ def feature_flag_name (self ):
51+ """Return featur eflag name."""
52+ return self ._feature_flag_name
4353
54+ @property
55+ def treatments (self ):
56+ """Return treatments."""
57+ return self ._treatments
58+
59+ def to_json (self ):
60+ to_return = []
61+ for feature_flag_name in self ._feature_flag_name :
62+ to_return .append ({"n" : feature_flag_name , "ts" : [treatment for treatment in self ._treatments ]})
63+
64+ return to_return
4465
4566class Status (Enum ):
4667 """Split status."""
@@ -74,7 +95,8 @@ def __init__( # pylint: disable=too-many-arguments
7495 traffic_allocation_seed = None ,
7596 configurations = None ,
7697 sets = None ,
77- impressions_disabled = None
98+ impressions_disabled = None ,
99+ prerequisites = None
78100 ):
79101 """
80102 Class constructor.
@@ -99,6 +121,8 @@ def __init__( # pylint: disable=too-many-arguments
99121 :type sets: list
100122 :pram impressions_disabled: track impressions flag
101123 :type impressions_disabled: boolean
124+ :pram prerequisites: prerequisites
125+ :type prerequisites: List of Preqreuisites
102126 """
103127 self ._name = name
104128 self ._seed = seed
@@ -129,6 +153,7 @@ def __init__( # pylint: disable=too-many-arguments
129153 self ._configurations = configurations
130154 self ._sets = set (sets ) if sets is not None else set ()
131155 self ._impressions_disabled = impressions_disabled if impressions_disabled is not None else False
156+ self ._prerequisites = prerequisites if prerequisites is not None else []
132157
133158 @property
134159 def name (self ):
@@ -194,6 +219,11 @@ def sets(self):
194219 def impressions_disabled (self ):
195220 """Return impressions_disabled of the split."""
196221 return self ._impressions_disabled
222+
223+ @property
224+ def prerequisites (self ):
225+ """Return prerequisites of the split."""
226+ return self ._prerequisites
197227
198228 def get_configurations_for (self , treatment ):
199229 """Return the mapping of treatments to configurations."""
@@ -224,7 +254,8 @@ def to_json(self):
224254 'conditions' : [c .to_json () for c in self .conditions ],
225255 'configurations' : self ._configurations ,
226256 'sets' : list (self ._sets ),
227- 'impressionsDisabled' : self ._impressions_disabled
257+ 'impressionsDisabled' : self ._impressions_disabled ,
258+ 'prerequisites' : [prerequisite .to_json () for prerequisite in self ._prerequisites ]
228259 }
229260
230261 def to_split_view (self ):
@@ -243,7 +274,8 @@ def to_split_view(self):
243274 self ._configurations if self ._configurations is not None else {},
244275 self ._default_treatment ,
245276 list (self ._sets ) if self ._sets is not None else [],
246- self ._impressions_disabled
277+ self ._impressions_disabled ,
278+ self ._prerequisites
247279 )
248280
249281 def local_kill (self , default_treatment , change_number ):
@@ -300,5 +332,13 @@ def from_raw(raw_split):
300332 traffic_allocation_seed = raw_split .get ('trafficAllocationSeed' ),
301333 configurations = raw_split .get ('configurations' ),
302334 sets = set (raw_split .get ('sets' )) if raw_split .get ('sets' ) is not None else [],
303- impressions_disabled = raw_split .get ('impressionsDisabled' ) if raw_split .get ('impressionsDisabled' ) is not None else False
335+ impressions_disabled = raw_split .get ('impressionsDisabled' ) if raw_split .get ('impressionsDisabled' ) is not None else False ,
336+ prerequisites = from_raw_prerequisites (raw_split .get ('prerequisites' )) if raw_split .get ('prerequisites' ) is not None else []
304337 )
338+
339+ def from_raw_prerequisites (raw_prerequisites ):
340+ to_return = []
341+ for prerequisite in raw_prerequisites :
342+ to_return .append (Prerequisites (prerequisite ['n' ], prerequisite ['ts' ]))
343+
344+ return to_return
0 commit comments