Get the number of identity / segment overrides in a given environment for each feature in the project. Retrieve identity override data from DynamoDB. :param environment: the environment to get the overrides data for :return OverridesData: dictionary of {feature_id: EnvironmentF
(environment: "Environment")
| 74 | |
| 75 | |
| 76 | def get_edge_overrides_data(environment: "Environment") -> OverridesData: |
| 77 | """ |
| 78 | Get the number of identity / segment overrides in a given environment for each feature in the |
| 79 | project. |
| 80 | Retrieve identity override data from DynamoDB. |
| 81 | |
| 82 | :param environment: the environment to get the overrides data for |
| 83 | :return OverridesData: dictionary of {feature_id: EnvironmentFeatureOverridesData} |
| 84 | """ |
| 85 | |
| 86 | with ThreadPoolExecutor() as executor: |
| 87 | # Note: We intentionally let the get_environment_flags_list |
| 88 | # call happen on the main thread to simplify testing. |
| 89 | # The call to dynamo happens on a separate thread, which |
| 90 | # still gives us the parallelism we need without needing |
| 91 | # an extra thread. This does mean that the order of execution |
| 92 | # is important here. |
| 93 | get_overrides_data_future = executor.submit( |
| 94 | get_edge_identity_override_keys, |
| 95 | environment_id=environment.id, |
| 96 | ) |
| 97 | flags_list = get_environment_flags_list(environment) |
| 98 | all_overrides_data: OverridesData = {} |
| 99 | |
| 100 | for feature_state in flags_list: |
| 101 | env_feature_overrides_data = all_overrides_data.setdefault( |
| 102 | feature_state.feature_id, EnvironmentFeatureOverridesData() |
| 103 | ) |
| 104 | if feature_state.feature_segment_id: |
| 105 | env_feature_overrides_data.num_segment_overrides += 1 |
| 106 | for identity_override_key in get_overrides_data_future.result(): |
| 107 | feature_id = get_feature_id_from_identity_override_document_key( |
| 108 | identity_override_key |
| 109 | ) |
| 110 | # Only override features that exists in core |
| 111 | if feature_id in all_overrides_data: |
| 112 | all_overrides_data[feature_id].add_identity_override() # type: ignore[no-untyped-call] |
| 113 | |
| 114 | return all_overrides_data |
searching dependent graphs…