Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions sdk/python/feast/feature_store.py
Original file line number Diff line number Diff line change
Expand Up @@ -1218,6 +1218,7 @@ def get_historical_features(
job = provider.get_historical_features(
self.config,
feature_views,
on_demand_feature_views,
_feature_refs,
entity_df,
self._registry,
Expand Down
2 changes: 2 additions & 0 deletions sdk/python/feast/infra/passthrough_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -459,13 +459,15 @@ def get_historical_features(
self,
config: RepoConfig,
feature_views: List[Union[FeatureView, OnDemandFeatureView]],
on_demand_feature_views: List[OnDemandFeatureView],
feature_refs: List[str],
entity_df: Optional[Union[pd.DataFrame, str]],
registry: BaseRegistry,
project: str,
full_feature_names: bool,
**kwargs,
) -> RetrievalJob:
del on_demand_feature_views
job = self.offline_store.get_historical_features(
config=config,
feature_views=feature_views,
Expand Down
2 changes: 2 additions & 0 deletions sdk/python/feast/infra/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -250,6 +250,7 @@ def get_historical_features(
self,
config: RepoConfig,
feature_views: List[Union[FeatureView, OnDemandFeatureView]],
on_demand_feature_views: List[OnDemandFeatureView],
feature_refs: List[str],
entity_df: Optional[Union[pd.DataFrame, str]],
registry: BaseRegistry,
Expand All @@ -263,6 +264,7 @@ def get_historical_features(
Args:
config: The config for the current feature store.
feature_views: A list containing all feature views that are referenced in the entity rows.
on_demand_feature_views: The on demand feature views requested as part of the retrieval.
feature_refs: The features to be retrieved.
entity_df: A collection of rows containing all entity columns on which features need to be joined,
as well as the timestamp column used for point-in-time joins. Either a pandas dataframe can be
Expand Down
3 changes: 3 additions & 0 deletions sdk/python/tests/foo_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from feast.infra.offline_stores.offline_store import RetrievalJob
from feast.infra.provider import Provider
from feast.infra.registry.base_registry import BaseRegistry
from feast.on_demand_feature_view import OnDemandFeatureView
from feast.infra.supported_async_methods import (
ProviderAsyncMethods,
SupportedAsyncMethods,
Expand Down Expand Up @@ -98,12 +99,14 @@ def get_historical_features(
self,
config: RepoConfig,
feature_views: List[FeatureView],
on_demand_feature_views: List[OnDemandFeatureView],
feature_refs: List[str],
entity_df: Union[pandas.DataFrame, str],
registry: BaseRegistry,
project: str,
full_feature_names: bool = False,
) -> RetrievalJob:
del on_demand_feature_views
return RetrievalJob()

def online_read(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
from types import SimpleNamespace

import pytest

from feast.feature_store import FeatureStore
from feast.infra.offline_stores.offline_store import RetrievalJob


class _CapturingProvider:
def __init__(self):
self.captured_on_demand_feature_views = None

def get_historical_features(
self,
config,
feature_views,
on_demand_feature_views,
feature_refs,
entity_df,
registry,
project,
full_feature_names,
**kwargs,
):
self.captured_on_demand_feature_views = on_demand_feature_views
return RetrievalJob()


def test_feature_store_passes_on_demand_feature_views_to_provider(monkeypatch):
provider = _CapturingProvider()

store = FeatureStore.__new__(FeatureStore)
store.config = SimpleNamespace(project="test_project", coerce_tz_aware=False)
store._registry = object()
store._get_provider = lambda: provider

fv = object()
odfv = object()

monkeypatch.setattr(
"feast.utils._get_features",
lambda registry, project, features, allow_cache=False: ["odfv:feat"],
)
monkeypatch.setattr(
"feast.utils._get_feature_views_to_use",
lambda registry, project, features, allow_cache=False, hide_dummy_entity=True: (
[fv],
[odfv],
),
)
monkeypatch.setattr(
"feast.utils._group_feature_refs",
lambda feature_refs, feature_views, on_demand_feature_views: (
[(fv, [])],
[(odfv, [])],
),
)
monkeypatch.setattr("feast.utils._validate_feature_refs", lambda *args, **kwargs: None)

store.get_historical_features(entity_df="SELECT 1", features=["odfv:feat"])

assert provider.captured_on_demand_feature_views == [odfv]
Loading