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

Method apply_state_to_queryset

api/features/views.py:349–401  ·  view source on GitHub ↗
(
        self, query_data: dict[str, typing.Any], queryset: QuerySet[Feature]
    )

Source from the content-addressed store, hash-verified

347 return context
348
349 def apply_state_to_queryset(
350 self, query_data: dict[str, typing.Any], queryset: QuerySet[Feature]
351 ) -> QuerySet[Feature]:
352 if not query_data.get("environment"):
353 raise serializers.ValidationError(
354 "Environment is required in order to filter by state search or by state enabled"
355 )
356 is_enabled = query_data["is_enabled"]
357 value_search = query_data["value_search"]
358 environment_id = query_data["environment"]
359
360 filter_search_q = Q()
361 if value_search is not None:
362 filter_search_q = filter_search_q | Q(
363 feature_state_value__string_value__icontains=value_search,
364 feature_state_value__type=STRING,
365 )
366
367 if value_search.lower() in {"true", "false"}:
368 boolean_search = value_search.lower() == "true"
369 filter_search_q = filter_search_q | Q(
370 feature_state_value__boolean_value=boolean_search,
371 feature_state_value__type=BOOLEAN,
372 )
373
374 if value_search.isdigit():
375 integer_search = int(value_search)
376 filter_search_q = filter_search_q | Q(
377 feature_state_value__integer_value=integer_search,
378 feature_state_value__type=INTEGER,
379 )
380 filter_enabled_q = Q()
381 if is_enabled is not None:
382 filter_enabled_q = filter_enabled_q | Q(enabled=is_enabled)
383
384 base_q = Q(
385 identity__isnull=True,
386 feature_segment__isnull=True,
387 )
388 if not getattr(self, "environment", None):
389 self.environment = Environment.objects.get(id=environment_id)
390
391 feature_states = get_environment_flags_list(
392 environment=self.environment,
393 additional_filters=base_q,
394 )
395
396 feature_ids = FeatureState.objects.filter(
397 filter_search_q & filter_enabled_q,
398 id__in=[fs.id for fs in feature_states],
399 ).values_list("feature_id", flat=True)
400
401 return queryset.filter(id__in=feature_ids)
402
403 @extend_schema(
404 request=FeatureGroupOwnerInputSerializer,

Callers 1

get_querysetMethod · 0.95

Calls 2

getMethod · 0.45

Tested by

no test coverage detected