(
target_identity: "Identity", source_identity: "Identity"
)
| 1079 | |
| 1080 | @staticmethod |
| 1081 | def copy_identity_feature_states( |
| 1082 | target_identity: "Identity", source_identity: "Identity" |
| 1083 | ) -> None: |
| 1084 | target_feature_states: dict[int, FeatureState] = ( |
| 1085 | target_identity.get_overridden_feature_states() |
| 1086 | ) |
| 1087 | source_feature_states: dict[int, FeatureState] = ( |
| 1088 | source_identity.get_overridden_feature_states() |
| 1089 | ) |
| 1090 | |
| 1091 | # Delete own feature states not in source_identity |
| 1092 | feature_states_to_delete = list( |
| 1093 | target_feature_states.keys() - source_feature_states.keys() |
| 1094 | ) |
| 1095 | for feature_state_id in feature_states_to_delete: |
| 1096 | target_feature_states[feature_state_id].delete() |
| 1097 | |
| 1098 | # Clone source_identity's feature states to target_identity |
| 1099 | for source_feature_id, source_feature_state in source_feature_states.items(): |
| 1100 | # Get target feature_state if exists in target identity or create new one |
| 1101 | target_feature_state: FeatureState = target_feature_states.get( |
| 1102 | source_feature_id |
| 1103 | ) or FeatureState.objects.create( |
| 1104 | environment=target_identity.environment, |
| 1105 | identity=target_identity, |
| 1106 | feature=source_feature_state.feature, |
| 1107 | ) |
| 1108 | |
| 1109 | # Copy enabled value from source feature_state |
| 1110 | target_feature_state.enabled = source_feature_states[ |
| 1111 | source_feature_id |
| 1112 | ].enabled |
| 1113 | |
| 1114 | if source_feature_state.feature.type == MULTIVARIATE: |
| 1115 | mv_values = [ |
| 1116 | mv_value.clone(feature_state=target_feature_state, persist=False) |
| 1117 | for mv_value in source_feature_state.multivariate_feature_state_values.all() |
| 1118 | ] |
| 1119 | MultivariateFeatureStateValue.objects.bulk_create(mv_values) |
| 1120 | |
| 1121 | target_feature_state.feature_state_value.copy_from( |
| 1122 | source_feature_state.feature_state_value |
| 1123 | ) |
| 1124 | |
| 1125 | target_feature_state.save() |
| 1126 | |
| 1127 | |
| 1128 | class FeatureStateValue( |
no test coverage detected