Create segments from the given Launch Darkly segments. This also creates inclusion rules for segments. :param ld_segments: A list of mapping from (env, segment). :return A mapping from ld segment key to Segment itself.
(
import_request: LaunchDarklyImportRequest,
ld_segments: list[tuple[ld_types.UserSegment, str]],
environments_by_ld_environment_key: dict[str, Environment],
tags_by_ld_tag: dict[str, Tag],
project_id: int,
)
| 997 | |
| 998 | |
| 999 | def _create_segments_from_ld( |
| 1000 | import_request: LaunchDarklyImportRequest, |
| 1001 | ld_segments: list[tuple[ld_types.UserSegment, str]], |
| 1002 | environments_by_ld_environment_key: dict[str, Environment], |
| 1003 | tags_by_ld_tag: dict[str, Tag], |
| 1004 | project_id: int, |
| 1005 | ) -> dict[str, Segment]: |
| 1006 | """ |
| 1007 | Create segments from the given Launch Darkly segments. This also creates inclusion rules for segments. |
| 1008 | |
| 1009 | :param ld_segments: A list of mapping from (env, segment). |
| 1010 | :return A mapping from ld segment key to Segment itself. |
| 1011 | """ |
| 1012 | segments_by_ld_key = {} |
| 1013 | for ld_segment, env in ld_segments: |
| 1014 | if ld_segment["deleted"]: |
| 1015 | continue |
| 1016 | |
| 1017 | # Make sure consecutive updates do not create the same segment. |
| 1018 | segment, _ = Segment.live_objects.update_or_create( |
| 1019 | name=_get_segment_name(ld_segment["name"], env), |
| 1020 | project_id=project_id, |
| 1021 | ) |
| 1022 | |
| 1023 | segments_by_ld_key[ld_segment["key"]] = segment |
| 1024 | |
| 1025 | # TODO: Tagging segments is not supported yet. https://github.com/Flagsmith/flagsmith/issues/3241 |
| 1026 | |
| 1027 | # Create the segment rule for the segment. |
| 1028 | rules = ld_segment["rules"] |
| 1029 | for rule in rules: |
| 1030 | _create_segment_rule_for_segment( |
| 1031 | import_request=import_request, |
| 1032 | segment=segment, |
| 1033 | clauses=rule["clauses"], |
| 1034 | ) |
| 1035 | |
| 1036 | # Create or update identities that are mentioned in the segment. |
| 1037 | for identifier in ld_segment["included"] + ld_segment["excluded"]: |
| 1038 | identity, _ = Identity.objects.get_or_create( |
| 1039 | identifier=identifier, |
| 1040 | environment=environments_by_ld_environment_key[env], |
| 1041 | ) |
| 1042 | identity.update_traits( |
| 1043 | [ |
| 1044 | { |
| 1045 | "trait_key": "key", |
| 1046 | "trait_value": identifier, # type: ignore[typeddict-item] |
| 1047 | } |
| 1048 | ] |
| 1049 | ) |
| 1050 | |
| 1051 | _include_users_to_segment( |
| 1052 | import_request=import_request, |
| 1053 | segment=segment, |
| 1054 | users=ld_segment["included"], |
| 1055 | negate=False, |
| 1056 | ) |
no test coverage detected
searching dependent graphs…