@@ -633,7 +633,10 @@ def get_variation(
633
633
634
634
user_context = OptimizelyUserContext (self , self .logger , user_id , attributes , False )
635
635
user_profile_tracker = user_profile .UserProfileTracker (user_id , self .user_profile_service , self .logger )
636
- variation , _ = self .decision_service .get_variation (project_config , experiment , user_context , user_profile_tracker )
636
+ variation , _ = self .decision_service .get_variation (project_config ,
637
+ experiment ,
638
+ user_context ,
639
+ user_profile_tracker )
637
640
if variation :
638
641
variation_key = variation .key
639
642
@@ -1123,16 +1126,16 @@ def _decide(
1123
1126
1124
1127
if OptimizelyDecideOption .ENABLED_FLAGS_ONLY in decide_options :
1125
1128
decide_options .remove (OptimizelyDecideOption .ENABLED_FLAGS_ONLY )
1126
-
1129
+
1127
1130
decision = self ._decide_for_keys (
1128
1131
user_context ,
1129
1132
[key ],
1130
1133
decide_options ,
1131
1134
True
1132
1135
)[key ]
1133
-
1136
+
1134
1137
return decision
1135
-
1138
+
1136
1139
def _create_optimizely_decision (
1137
1140
self ,
1138
1141
user_context : OptimizelyUserContext ,
@@ -1147,23 +1150,26 @@ def _create_optimizely_decision(
1147
1150
if flag_decision .variation is not None :
1148
1151
if flag_decision .variation .featureEnabled :
1149
1152
feature_enabled = True
1150
-
1153
+
1151
1154
self .logger .info (f'Feature { flag_key } is enabled for user { user_id } { feature_enabled } "' )
1152
-
1155
+
1153
1156
# Create Optimizely Decision Result.
1154
1157
attributes = user_context .get_user_attributes ()
1155
1158
rule_key = flag_decision .experiment .key if flag_decision .experiment else None
1156
1159
all_variables = {}
1157
1160
decision_source = flag_decision .source
1158
1161
decision_event_dispatched = False
1159
-
1162
+
1160
1163
feature_flag = project_config .feature_key_map .get (flag_key )
1161
1164
1162
1165
# Send impression event if Decision came from a feature
1163
1166
# test and decide options doesn't include disableDecisionEvent
1164
1167
if OptimizelyDecideOption .DISABLE_DECISION_EVENT not in decide_options :
1165
1168
if decision_source == DecisionSources .FEATURE_TEST or project_config .send_flag_decisions :
1166
- self ._send_impression_event (project_config , flag_decision .experiment , flag_decision .variation , flag_key , rule_key or '' ,
1169
+ self ._send_impression_event (project_config ,
1170
+ flag_decision .experiment ,
1171
+ flag_decision .variation ,
1172
+ flag_key , rule_key or '' ,
1167
1173
str (decision_source ), feature_enabled ,
1168
1174
user_id , attributes )
1169
1175
@@ -1189,7 +1195,11 @@ def _create_optimizely_decision(
1189
1195
all_variables [variable_key ] = actual_value
1190
1196
1191
1197
should_include_reasons = OptimizelyDecideOption .INCLUDE_REASONS in decide_options
1192
- variation_key = flag_decision .variation .key if flag_decision is not None and flag_decision .variation is not None else None
1198
+ variation_key = (
1199
+ flag_decision .variation .key
1200
+ if flag_decision is not None and flag_decision .variation is not None
1201
+ else None
1202
+ )
1193
1203
# Send notification
1194
1204
self .notification_center .send_notifications (
1195
1205
enums .NotificationTypes .DECISION ,
@@ -1212,7 +1222,6 @@ def _create_optimizely_decision(
1212
1222
rule_key = rule_key , flag_key = flag_key ,
1213
1223
user_context = user_context , reasons = decision_reasons if should_include_reasons else []
1214
1224
)
1215
-
1216
1225
1217
1226
def _decide_all (
1218
1227
self ,
@@ -1282,7 +1291,7 @@ def _decide_for_keys(
1282
1291
self .logger .debug ('Provided decide options is not an array. Using default decide options.' )
1283
1292
merged_decide_options = self .default_decide_options
1284
1293
1285
- enabled_flags_only = OptimizelyDecideOption .ENABLED_FLAGS_ONLY in merged_decide_options
1294
+ # enabled_flags_only = OptimizelyDecideOption.ENABLED_FLAGS_ONLY in merged_decide_options
1286
1295
1287
1296
decisions : dict [str , OptimizelyDecision ] = {}
1288
1297
valid_keys = []
@@ -1292,11 +1301,11 @@ def _decide_for_keys(
1292
1301
# if enabled_flags_only and not decision.enabled:
1293
1302
# continue
1294
1303
# decisions[key] = decision
1295
-
1304
+
1296
1305
project_config = self .config_manager .get_config ()
1297
1306
flags_without_forced_decision : list [entities .FeatureFlag ] = []
1298
1307
flag_decisions : dict [str , Decision ] = {}
1299
-
1308
+
1300
1309
if project_config is None :
1301
1310
return decisions
1302
1311
for key in keys :
@@ -1307,39 +1316,34 @@ def _decide_for_keys(
1307
1316
valid_keys .append (key )
1308
1317
decision_reasons : list [str ] = []
1309
1318
decision_reasons_dict [key ] = decision_reasons
1310
-
1319
+
1311
1320
optimizely_decision_context = OptimizelyUserContext .OptimizelyDecisionContext (flag_key = key , rule_key = None )
1312
1321
forced_decision_response = self .decision_service .validated_forced_decision (project_config ,
1313
1322
optimizely_decision_context ,
1314
1323
user_context )
1315
1324
variation , decision_reasons = forced_decision_response
1316
1325
decision_reasons_dict [key ] += decision_reasons
1317
-
1326
+
1318
1327
if variation :
1319
1328
decision = Decision (None , variation , enums .DecisionSources .FEATURE_TEST )
1320
1329
flag_decisions [key ] = decision
1321
1330
else :
1322
- # Regular decision
1323
- # decision, decision_reasons = self.decision_service.get_variation_for_feature(project_config,
1324
- # feature_flag,
1325
- # user_context, decide_options)
1326
1331
flags_without_forced_decision .append (feature_flag )
1327
1332
1328
-
1329
1333
decision_list = self .decision_service .get_variations_for_feature_list (
1330
1334
project_config ,
1331
1335
flags_without_forced_decision ,
1332
1336
user_context ,
1333
1337
merged_decide_options
1334
1338
)
1335
-
1339
+
1336
1340
for i in range (0 , len (flags_without_forced_decision )):
1337
1341
decision = decision_list [i ][0 ]
1338
1342
reasons = decision_list [i ][1 ]
1339
1343
flag_key = flags_without_forced_decision [i ].key
1340
1344
flag_decisions [flag_key ] = decision
1341
1345
decision_reasons_dict [flag_key ] += reasons
1342
-
1346
+
1343
1347
print (decision_reasons_dict )
1344
1348
for key in valid_keys :
1345
1349
flag_decision = flag_decisions [key ]
@@ -1352,10 +1356,11 @@ def _decide_for_keys(
1352
1356
merged_decide_options ,
1353
1357
project_config
1354
1358
)
1355
-
1356
- if (OptimizelyDecideOption .ENABLED_FLAGS_ONLY not in merged_decide_options ) or (optimizely_decision .enabled ):
1359
+ enabled_flags_only_missing = OptimizelyDecideOption .ENABLED_FLAGS_ONLY not in merged_decide_options
1360
+ is_enabled = optimizely_decision .enabled
1361
+ if enabled_flags_only_missing or is_enabled :
1357
1362
decisions [key ] = optimizely_decision
1358
-
1363
+
1359
1364
return decisions
1360
1365
1361
1366
def _setup_odp (self , sdk_key : Optional [str ]) -> None :
0 commit comments