MCPcopy Create free account
hub / github.com/Flagsmith/flagsmith / _create_segments_from_ld

Function _create_segments_from_ld

api/integrations/launch_darkly/services.py:999–1077  ·  view source on GitHub ↗

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,
)

Source from the content-addressed store, hash-verified

997
998
999def _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 )

Callers 1

process_import_requestFunction · 0.85

Calls 5

_get_segment_nameFunction · 0.85
_log_errorFunction · 0.85
update_traitsMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…