Skip to content

Commit 356aa8a

Browse files
fix: distinguish all and empty graph layer caches
1 parent f67e9c9 commit 356aa8a

2 files changed

Lines changed: 28 additions & 1 deletion

File tree

‎engraphis/service.py‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10745,7 +10745,8 @@ def bounded_int(value: Any, field: str, minimum: int, maximum: int) -> int:
1074510745
cache_key = (
1074610746
revision, clean_workspace, clean_level, clean_center_id or "",
1074710747
clean_system_id or "", tuple(clean_seeds), clean_repo or "",
10748-
tuple(clean_layers or ()), tuple(clean_relations), tuple(clean_entity_types),
10748+
None if clean_layers is None else tuple(clean_layers),
10749+
tuple(clean_relations), tuple(clean_entity_types),
1074910750
tuple(clean_memory_types), clean_as_of, clean_valid_at, clean_known_at,
1075010751
clean_time_from, clean_time_to,
1075110752
clean_depth, clean_min_support,

‎tests/test_graph_explorer_v2.py‎

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2538,6 +2538,32 @@ def test_graph_scene_cache_is_warm_and_invalidates_on_store_write():
25382538
assert refreshed["meta"]["index_generation"] > first["meta"]["index_generation"]
25392539

25402540

2541+
@pytest.mark.parametrize("layer_order", [(None, []), ([], None)],
2542+
ids=["all-then-none", "none-then-all"])
2543+
def test_graph_scene_cache_distinguishes_all_layers_from_no_layers(monkeypatch, layer_order):
2544+
service, _alpha, _beta, _gamma = _seed_service()
2545+
try:
2546+
cold_scenes = []
2547+
for layers in layer_order:
2548+
scene = service.graph_scene(workspace="acme", layers=layers)
2549+
assert len(scene["edges"]) == (2 if layers is None else 0)
2550+
assert scene["meta"]["cache_hit"] is False
2551+
cold_scenes.append(scene)
2552+
2553+
def fail_if_rebuilt(**_kwargs):
2554+
pytest.fail("repeating either layer selection must use its own warm scene")
2555+
2556+
monkeypatch.setattr(service, "_graph_scene_rows", fail_if_rebuilt)
2557+
for layers, cold in zip(layer_order, cold_scenes):
2558+
warm = service.graph_scene(workspace="acme", layers=layers)
2559+
assert warm["meta"]["cache_hit"] is True
2560+
assert warm["nodes"] == cold["nodes"]
2561+
assert warm["edges"] == cold["edges"]
2562+
assert warm["meta"]["scene_hash"] == cold["meta"]["scene_hash"]
2563+
finally:
2564+
service.store.close()
2565+
2566+
25412567
@pytest.mark.parametrize("level", ["overview", "complete"])
25422568
@pytest.mark.parametrize("mutate_cache_hit", [False, True])
25432569
def test_quality_scene_cache_isolated_from_nested_response_mutation(level, mutate_cache_hit):

0 commit comments

Comments
 (0)