Skip to content

Commit 7eff58b

Browse files
committed
feat: use-feature-type-before-defaulting-to-standard
1 parent ce593e3 commit 7eff58b

File tree

3 files changed

+34
-21
lines changed

3 files changed

+34
-21
lines changed

src/edge_proxy/environments.py

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,10 @@
1515

1616
from edge_proxy.cache import BaseEnvironmentsCache, LocalMemEnvironmentsCache
1717
from edge_proxy.exceptions import FeatureNotFoundError, FlagsmithUnknownKeyError
18-
from edge_proxy.feature_utils import filter_out_server_key_only_flags
18+
from edge_proxy.feature_utils import (
19+
filter_disabled_flags,
20+
filter_out_server_key_only_flags,
21+
)
1922
from edge_proxy.mappers import (
2023
map_flag_result_to_response_data,
2124
map_flag_results_to_response_data,
@@ -29,14 +32,6 @@
2932
SERVER_API_KEY_PREFIX = "ser."
3033

3134

32-
def _filter_disabled_flags(
33-
flags: list[dict[str, Any]], hide_disabled_flags: bool
34-
) -> list[dict[str, Any]]:
35-
if not hide_disabled_flags:
36-
return flags
37-
return [flag for flag in flags if flag.get("enabled", False)]
38-
39-
4035
class EnvironmentService:
4136
def __init__(
4237
self,
@@ -88,9 +83,6 @@ def get_flags_response_data(
8883
server_key_only_feature_ids = environment_document.get("project", {}).get(
8984
"server_key_only_feature_ids", []
9085
)
91-
hide_disabled_flags = environment_document.get("project", {}).get(
92-
"hide_disabled_flags", False
93-
)
9486

9587
context = map_environment_document_to_context(environment_document)
9688
evaluation_result = get_evaluation_result(context)
@@ -118,7 +110,10 @@ def get_flags_response_data(
118110
flags, server_key_only_feature_ids
119111
)
120112

121-
flags = _filter_disabled_flags(flags, hide_disabled_flags)
113+
hide_disabled_flags = environment_document.get("project", {}).get(
114+
"hide_disabled_flags", False
115+
)
116+
flags = filter_disabled_flags(flags, hide_disabled_flags)
122117
data = map_flag_results_to_response_data(flags)
123118

124119
return data
@@ -131,13 +126,10 @@ def get_identity_response_data(
131126
server_key_only_feature_ids = environment_document.get("project", {}).get(
132127
"server_key_only_feature_ids", []
133128
)
134-
hide_disabled_flags = environment_document.get("project", {}).get(
135-
"hide_disabled_flags", False
136-
)
137129

138-
context = map_environment_document_to_context(environment_document)
130+
environment_context = map_environment_document_to_context(environment_document)
139131
context = map_context_and_identity_data_to_context(
140-
context=context,
132+
context=environment_context,
141133
identifier=input_data.identifier,
142134
traits=input_data.traits,
143135
)
@@ -148,7 +140,10 @@ def get_identity_response_data(
148140
if not is_server_key:
149141
flags = filter_out_server_key_only_flags(flags, server_key_only_feature_ids)
150142

151-
flags = _filter_disabled_flags(flags, hide_disabled_flags)
143+
hide_disabled_flags = environment_document.get("project", {}).get(
144+
"hide_disabled_flags", False
145+
)
146+
flags = filter_disabled_flags(flags, hide_disabled_flags)
152147

153148
data = {
154149
"traits": map_traits_to_response_data(input_data.traits),

src/edge_proxy/feature_utils.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,21 @@ def filter_out_server_key_only_flags(
2020
for flag in flags
2121
if flag.get("metadata", {}).get("id") not in server_key_only_feature_ids
2222
]
23+
24+
25+
def filter_disabled_flags(
26+
flags: list[dict[str, Any]], hide_disabled: bool
27+
) -> list[dict[str, Any]]:
28+
"""
29+
Filter out disabled flags if hide_disabled is enabled.
30+
31+
Args:
32+
flags: List of flag results
33+
hide_disabled: Whether to filter out disabled flags
34+
35+
Returns:
36+
Filtered list of flags excluding disabled ones if hide_disabled is True
37+
"""
38+
if not hide_disabled:
39+
return flags
40+
return [flag for flag in flags if flag.get("enabled", False)]

tests/test_models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ def test_identity_with_traits_str():
1313
expected = "identifier:foo|traits:foo=bar,age=21,is_cool=True"
1414

1515
# When
16-
identity_with_traits = IdentityWithTraits.parse_obj(
16+
identity_with_traits = IdentityWithTraits.model_validate(
1717
{"identifier": identifier, "traits": traits}
1818
)
1919

@@ -33,7 +33,7 @@ def test_identity_with_traits_hash():
3333
expected = hash("identifier:foo|traits:foo=bar,age=21,is_cool=True")
3434

3535
# When
36-
identity_with_traits = IdentityWithTraits.parse_obj(
36+
identity_with_traits = IdentityWithTraits.model_validate(
3737
{"identifier": identifier, "traits": traits}
3838
)
3939

0 commit comments

Comments
 (0)