Skip to content

Commit fece10c

Browse files
committed
feat: cleaned-up-cache-from-get-identity-and-added-fixture
1 parent 5a395e6 commit fece10c

File tree

3 files changed

+23
-101
lines changed

3 files changed

+23
-101
lines changed

src/edge_proxy/cache.py

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from abc import ABC
2-
from collections import defaultdict
32
from typing import Any
3+
44
from edge_proxy.feature_utils import build_feature_types_lookup
55

66

@@ -38,13 +38,6 @@ def get_environment(self, environment_api_key: str) -> dict[str, Any] | None:
3838
def get_feature_types(self, environment_api_key: str) -> dict[int, str] | None:
3939
return None
4040

41-
def get_identity(
42-
self,
43-
environment_api_key: str,
44-
identifier: str,
45-
) -> dict[str, Any]:
46-
raise NotImplementedError()
47-
4841

4942
_LocalCacheDict = dict[str, dict[str, Any]]
5043

@@ -54,7 +47,6 @@ def __init__(self, *args, **kwargs):
5447
super().__init__(*args, **kwargs)
5548
self._environment_cache: _LocalCacheDict = {}
5649
self._feature_types_cache: dict[str, dict[int, str]] = {}
57-
self._identity_override_cache = defaultdict[str, _LocalCacheDict](dict)
5850

5951
def _put_environment(
6052
self,
@@ -67,13 +59,6 @@ def _put_environment(
6759
environment_document
6860
)
6961

70-
new_overrides = environment_document.get("identity_overrides") or []
71-
self._identity_override_cache[environment_api_key] = {
72-
identifier: identity_document
73-
for identity_document in new_overrides
74-
if (identifier := identity_document.get("identifier"))
75-
}
76-
7762
def get_environment(
7863
self,
7964
environment_api_key: str,
@@ -82,13 +67,3 @@ def get_environment(
8267

8368
def get_feature_types(self, environment_api_key: str) -> dict[int, str] | None:
8469
return self._feature_types_cache.get(environment_api_key)
85-
86-
def get_identity(
87-
self,
88-
environment_api_key: str,
89-
identifier: str,
90-
) -> dict[str, Any]:
91-
return self._identity_override_cache[environment_api_key].get(identifier) or {
92-
"environment_api_key": environment_api_key,
93-
"identifier": identifier,
94-
}

tests/conftest.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,14 @@ def environment_service() -> "EnvironmentService":
6969
return environment_service
7070

7171

72+
@pytest.fixture
73+
def mocked_environment_cache(mocker: MockerFixture):
74+
mock = mocker.patch("edge_proxy.server.environment_service.cache")
75+
mock.get_environment.return_value = None
76+
mock.get_feature_types.return_value = None
77+
return mock
78+
79+
7280
@pytest.fixture
7381
def client():
7482
from edge_proxy.server import app

tests/test_server.py

Lines changed: 14 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,12 @@
1717

1818

1919
def test_get_flags(
20-
mocker: MockerFixture,
20+
mocked_environment_cache,
2121
environment_1_feature_states_response_list: list[dict],
2222
client: TestClient,
2323
) -> None:
2424
environment_key = "test_environment_key"
25-
mocked_environment_cache = mocker.patch(
26-
"edge_proxy.server.environment_service.cache"
27-
)
2825
mocked_environment_cache.get_environment.return_value = environment_1
29-
mocked_environment_cache.get_feature_types.return_value = None
3026
response = client.get(
3127
"/api/v1/flags", headers={"X-Environment-Key": environment_key}
3228
)
@@ -35,16 +31,12 @@ def test_get_flags(
3531

3632

3733
def test_get_flags_single_feature(
38-
mocker: MockerFixture,
34+
mocked_environment_cache,
3935
environment_1_feature_states_response_list: list[dict],
4036
client: TestClient,
4137
) -> None:
4238
environment_key = "test_environment_key"
43-
mocked_environment_cache = mocker.patch(
44-
"edge_proxy.server.environment_service.cache"
45-
)
4639
mocked_environment_cache.get_environment.return_value = environment_1
47-
mocked_environment_cache.get_feature_types.return_value = None
4840
response = client.get(
4941
"/api/v1/flags",
5042
headers={"X-Environment-Key": environment_key},
@@ -55,16 +47,12 @@ def test_get_flags_single_feature(
5547

5648

5749
def test_get_flags_single_feature__server_key_only_feature__return_expected(
58-
mocker: MockerFixture,
50+
mocked_environment_cache,
5951
client: TestClient,
6052
) -> None:
6153
# Given
6254
environment_key = "test_environment_key"
63-
mocked_environment_cache = mocker.patch(
64-
"edge_proxy.server.environment_service.cache"
65-
)
6655
mocked_environment_cache.get_environment.return_value = environment_1
67-
mocked_environment_cache.get_feature_types.return_value = None
6856

6957
# When
7058
response = client.get(
@@ -82,15 +70,11 @@ def test_get_flags_single_feature__server_key_only_feature__return_expected(
8270

8371

8472
def test_get_flags_unknown_key(
85-
mocker: MockerFixture,
73+
mocked_environment_cache,
8674
client: TestClient,
8775
):
8876
environment_key = "unknown_environment_key"
89-
mocked_environment_cache = mocker.patch(
90-
"edge_proxy.server.environment_service.cache"
91-
)
9277
mocked_environment_cache.get_environment.return_value = None
93-
mocked_environment_cache.get_feature_types.return_value = None
9478
response = client.get(
9579
"/api/v1/flags",
9680
headers={"X-Environment-Key": environment_key},
@@ -104,16 +88,12 @@ def test_get_flags_unknown_key(
10488

10589

10690
def test_post_identity_with_traits(
107-
mocker,
91+
mocked_environment_cache,
10892
environment_1_feature_states_response_list_response_with_segment_override,
10993
client: TestClient,
11094
):
11195
environment_key = "test_environment_key"
112-
mocked_environment_cache = mocker.patch(
113-
"edge_proxy.server.environment_service.cache"
114-
)
11596
mocked_environment_cache.get_environment.return_value = environment_1
116-
mocked_environment_cache.get_feature_types.return_value = None
11797
data = {
11898
"traits": [{"trait_value": "test", "trait_key": "first_name"}],
11999
"identifier": "do_it_all_in_one_go_identity",
@@ -128,8 +108,6 @@ def test_post_identity_with_traits(
128108
"traits": data["traits"],
129109
}
130110
mocked_environment_cache.get_environment.assert_called_with(environment_key)
131-
# Note: With engine v10+, we no longer need to fetch identity from cache
132-
# The identifier and traits are passed directly to the evaluation context
133111

134112

135113
def test_post_identity__environment_with_overrides__expected_response(
@@ -162,16 +140,12 @@ def test_post_identity__environment_with_overrides__expected_response(
162140

163141

164142
def test_post_identity__invalid_trait_data__expected_response(
165-
mocker: MockerFixture,
143+
mocked_environment_cache,
166144
client: TestClient,
167145
) -> None:
168146
# Given
169147
environment_key = "test_environment_key"
170-
mocked_environment_cache = mocker.patch(
171-
"edge_proxy.server.environment_service.cache"
172-
)
173148
mocked_environment_cache.get_environment.return_value = environment_1
174-
mocked_environment_cache.get_feature_types.return_value = None
175149
data = {
176150
"traits": [{"trait_value": "a" * 2001, "trait_key": "first_name"}],
177151
"identifier": "do_it_all_in_one_go_identity",
@@ -194,21 +168,13 @@ def test_post_identity__invalid_trait_data__expected_response(
194168

195169

196170
def test_get_identities(
197-
mocker: MockerFixture,
171+
mocked_environment_cache,
198172
client: TestClient,
199173
) -> None:
200174
x_environment_key = "test_environment_key"
201175
identifier = "test_identifier"
202176

203-
mocked_environment_cache = mocker.patch(
204-
"edge_proxy.server.environment_service.cache"
205-
)
206177
mocked_environment_cache.get_environment.return_value = environment_1
207-
mocked_environment_cache.get_feature_types.return_value = None
208-
mocked_environment_cache.get_identity.return_value = {
209-
"environment_api_key": x_environment_key,
210-
"identifier": identifier,
211-
}
212178

213179
response = client.get(
214180
"/api/v1/identities/",
@@ -286,18 +252,14 @@ def test_get_environment_document_wrong_key(
286252

287253

288254
def test_get_flags__client_key__hide_disabled_flags_enabled__only_returns_enabled_flags(
289-
mocker: MockerFixture,
255+
mocked_environment_cache,
290256
client: TestClient,
291257
) -> None:
292258
# Given
293259
environment_key = "test_environment_key"
294-
mocked_environment_cache = mocker.patch(
295-
"edge_proxy.server.environment_service.cache"
296-
)
297260
mocked_environment_cache.get_environment.return_value = (
298261
environment_with_hide_disabled_flags
299262
)
300-
mocked_environment_cache.get_feature_types.return_value = None
301263

302264
# When
303265
response = client.get(
@@ -313,16 +275,12 @@ def test_get_flags__client_key__hide_disabled_flags_enabled__only_returns_enable
313275

314276

315277
def test_get_flags__client_key__hide_disabled_flags_disabled__returns_all_flags(
316-
mocker: MockerFixture,
278+
mocked_environment_cache,
317279
client: TestClient,
318280
) -> None:
319281
# Given
320282
environment_key = "test_environment_key"
321-
mocked_environment_cache = mocker.patch(
322-
"edge_proxy.server.environment_service.cache"
323-
)
324283
mocked_environment_cache.get_environment.return_value = environment_1
325-
mocked_environment_cache.get_feature_types.return_value = None
326284

327285
# When
328286
response = client.get(
@@ -337,18 +295,15 @@ def test_get_flags__client_key__hide_disabled_flags_disabled__returns_all_flags(
337295

338296
def test_get_flags__server_key__hide_disabled_flags_enabled__returns_all_flags(
339297
mocker: MockerFixture,
298+
mocked_environment_cache,
340299
client: TestClient,
341300
) -> None:
342301
# Given
343302
server_key = "ser.test_server_key"
344303
client_key = "test_client_key"
345-
mocked_environment_cache = mocker.patch(
346-
"edge_proxy.server.environment_service.cache"
347-
)
348304
mocked_environment_cache.get_environment.return_value = (
349305
environment_with_hide_disabled_flags
350306
)
351-
mocked_environment_cache.get_feature_types.return_value = None
352307
mocker.patch(
353308
"edge_proxy.server.environment_service._get_client_key_from_server_key",
354309
return_value=client_key,
@@ -364,18 +319,14 @@ def test_get_flags__server_key__hide_disabled_flags_enabled__returns_all_flags(
364319

365320

366321
def test_get_flags__client_key__hide_disabled_flags_enabled__single_disabled_feature__returns_404(
367-
mocker: MockerFixture,
322+
mocked_environment_cache,
368323
client: TestClient,
369324
) -> None:
370325
# Given
371326
environment_key = "test_environment_key"
372-
mocked_environment_cache = mocker.patch(
373-
"edge_proxy.server.environment_service.cache"
374-
)
375327
mocked_environment_cache.get_environment.return_value = (
376328
environment_with_hide_disabled_flags
377329
)
378-
mocked_environment_cache.get_feature_types.return_value = None
379330

380331
# When
381332
response = client.get(
@@ -389,18 +340,14 @@ def test_get_flags__client_key__hide_disabled_flags_enabled__single_disabled_fea
389340

390341

391342
def test_post_identity__client_key__hide_disabled_flags_enabled__only_returns_enabled_flags(
392-
mocker: MockerFixture,
343+
mocked_environment_cache,
393344
client: TestClient,
394345
) -> None:
395346
# Given
396347
environment_key = "test_environment_key"
397-
mocked_environment_cache = mocker.patch(
398-
"edge_proxy.server.environment_service.cache"
399-
)
400348
mocked_environment_cache.get_environment.return_value = (
401349
environment_with_hide_disabled_flags
402350
)
403-
mocked_environment_cache.get_feature_types.return_value = None
404351
data = {
405352
"identifier": "test_identifier",
406353
"traits": [],
@@ -423,16 +370,12 @@ def test_post_identity__client_key__hide_disabled_flags_enabled__only_returns_en
423370

424371

425372
def test_post_identity__client_key__hide_disabled_flags_disabled__returns_all_flags(
426-
mocker: MockerFixture,
373+
mocked_environment_cache,
427374
client: TestClient,
428375
) -> None:
429376
# Given
430377
environment_key = "test_environment_key"
431-
mocked_environment_cache = mocker.patch(
432-
"edge_proxy.server.environment_service.cache"
433-
)
434378
mocked_environment_cache.get_environment.return_value = environment_1
435-
mocked_environment_cache.get_feature_types.return_value = None
436379
data = {
437380
"identifier": "test_identifier",
438381
"traits": [],
@@ -453,18 +396,14 @@ def test_post_identity__client_key__hide_disabled_flags_disabled__returns_all_fl
453396

454397

455398
def test_get_flags__multivariate_feature__returns_correct_type(
456-
mocker: MockerFixture,
399+
mocked_environment_cache,
457400
client: TestClient,
458401
) -> None:
459402
# Given
460403
environment_key = "test_environment_key"
461-
mocked_environment_cache = mocker.patch(
462-
"edge_proxy.server.environment_service.cache"
463-
)
464404
mocked_environment_cache.get_environment.return_value = (
465405
environment_with_multivariate_feature
466406
)
467-
mocked_environment_cache.get_feature_types.return_value = None
468407

469408
# When
470409
response = client.get(

0 commit comments

Comments
 (0)