From 1cf41eeb061e1c19a78ddd6cc13224cb8b68d9c9 Mon Sep 17 00:00:00 2001 From: NIKHIL Date: Wed, 12 Aug 2026 17:52:56 +0530 Subject: [PATCH] fix: Isolate projection join key maps Signed-off-by: NIKHIL --- sdk/python/feast/feature_view_projection.py | 4 ++-- sdk/python/tests/unit/test_feature_service.py | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/sdk/python/feast/feature_view_projection.py b/sdk/python/feast/feature_view_projection.py index a91c6498604..22f56431afd 100644 --- a/sdk/python/feast/feature_view_projection.py +++ b/sdk/python/feast/feature_view_projection.py @@ -1,6 +1,6 @@ from typing import TYPE_CHECKING, Dict, List, Optional -from attr import dataclass +from attr import dataclass, field from feast.data_source import DataSource from feast.field import Field @@ -42,7 +42,7 @@ class FeatureViewProjection: name_alias: Optional[str] desired_features: List[str] features: List[Field] - join_key_map: Dict[str, str] = {} + join_key_map: Dict[str, str] = field(factory=dict) timestamp_field: Optional[str] = None date_partition_column: Optional[str] = None created_timestamp_column: Optional[str] = None diff --git a/sdk/python/tests/unit/test_feature_service.py b/sdk/python/tests/unit/test_feature_service.py index 33f7290c47a..4ecfea99b39 100644 --- a/sdk/python/tests/unit/test_feature_service.py +++ b/sdk/python/tests/unit/test_feature_service.py @@ -121,6 +121,25 @@ def test_prepare_for_apply_keeps_complete_projection(): assert feature_service.feature_view_projections[0] == original_projection +def test_feature_view_projections_have_independent_join_key_maps(): + first_projection = FeatureViewProjection( + name="first", + name_alias=None, + desired_features=[], + features=[], + ) + second_projection = FeatureViewProjection( + name="second", + name_alias=None, + desired_features=[], + features=[], + ) + + first_projection.join_key_map["entity_id"] = "aliased_entity_id" + + assert second_projection.join_key_map == {} + + def test_build_apply_request(): request = FeatureService.build_apply_request( name="my-feature-service",