Skip to content

Commit b988748

Browse files
committed
more fixes
Signed-off-by: Achal Shah <achals@gmail.com>
1 parent 8f94d34 commit b988748

5 files changed

Lines changed: 33 additions & 5 deletions

File tree

sdk/python/feast/base_feature_view.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,14 @@ def __getitem__(self, item):
116116
assert isinstance(item, list)
117117

118118
cp = self.__copy__()
119-
cp.projection.features = item
119+
if self.features:
120+
referenced_features = []
121+
for feature in self.features:
122+
if feature.name in item:
123+
referenced_features.append(feature)
124+
cp.projection.features = referenced_features
125+
else:
126+
cp.projection.desired_features = item
120127

121128
return cp
122129

sdk/python/feast/feature_service.py

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,23 @@ def infer_features(self, fvs_to_update: Optional[Dict[str, FeatureView]] = None)
111111
if isinstance(feature_grouping, BaseFeatureView):
112112
# For feature services that depend on an unspecified feature view, apply inferred schema
113113
if fvs_to_update and feature_grouping.name in fvs_to_update:
114-
if feature_grouping.projection.features:
115-
assert set(feature_grouping.projection.features).issubset(
116-
fvs_to_update[feature_grouping.name].features
114+
if feature_grouping.projection.desired_features:
115+
desired_features = set(
116+
feature_grouping.projection.desired_features
117117
)
118+
actual_features = set(
119+
[
120+
f.name
121+
for f in fvs_to_update[feature_grouping.name].features
122+
]
123+
)
124+
assert desired_features.issubset(actual_features)
125+
# We need to set the features for the projection at this point so we ensure we're starting with
126+
# an empty list.
127+
feature_grouping.projection.features = []
128+
for f in fvs_to_update[feature_grouping.name].features:
129+
if f.name in desired_features:
130+
feature_grouping.projection.features.append(f)
118131
else:
119132
feature_grouping.projection.features = fvs_to_update[
120133
feature_grouping.name

sdk/python/feast/feature_view_projection.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class FeatureViewProjection:
2727

2828
name: str
2929
name_alias: Optional[str]
30+
desired_features: List[str]
3031
features: List[Field]
3132
join_key_map: Dict[str, str] = {}
3233

@@ -51,6 +52,7 @@ def from_proto(proto: FeatureViewProjectionProto):
5152
name_alias=proto.feature_view_name_alias,
5253
features=[],
5354
join_key_map=dict(proto.join_key_map),
55+
desired_features=[],
5456
)
5557
for feature_column in proto.feature_columns:
5658
feature_view_projection.features.append(Field.from_proto(feature_column))
@@ -63,6 +65,7 @@ def from_definition(base_feature_view: "BaseFeatureView"):
6365
name=base_feature_view.name,
6466
name_alias=None,
6567
features=base_feature_view.features,
68+
desired_features=[],
6669
)
6770

6871
def get_feature(self, feature_name: str) -> Field:

sdk/python/feast/field.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ def __init__(
5050
self.tags = tags or {}
5151

5252
def __eq__(self, other):
53+
if type(self) != type(other):
54+
return False
55+
5356
if (
5457
self.name != other.name
5558
or self.dtype != other.dtype

sdk/python/tests/integration/registration/test_inference.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -415,8 +415,10 @@ def test_update_feature_services_with_inferred_features(simple_dataset_1):
415415
name="fs_1", features=[feature_view_1[["string_col"]], feature_view_2]
416416
)
417417
assert len(feature_service.feature_view_projections) == 2
418-
assert len(feature_service.feature_view_projections[0].features) == 1
418+
assert len(feature_service.feature_view_projections[0].features) == 0
419+
assert len(feature_service.feature_view_projections[0].desired_features) == 1
419420
assert len(feature_service.feature_view_projections[1].features) == 0
421+
assert len(feature_service.feature_view_projections[1].desired_features) == 0
420422

421423
update_feature_views_with_inferred_features_and_entities(
422424
[feature_view_1, feature_view_2],

0 commit comments

Comments
 (0)