From b8a8ab68077a2d3c25b35c49649fde8d97b66dfa Mon Sep 17 00:00:00 2001 From: Aniket Paluskar Date: Tue, 21 Oct 2025 17:41:35 +0530 Subject: [PATCH 1/2] Added start_date & end_date range for historical data retrieval from RemoteOfflineStore Signed-off-by: Aniket Paluskar --- sdk/python/feast/infra/offline_stores/remote.py | 10 ++++++++++ sdk/python/feast/offline_server.py | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/sdk/python/feast/infra/offline_stores/remote.py b/sdk/python/feast/infra/offline_stores/remote.py index a5f50c7b45c..33b1c1e570f 100644 --- a/sdk/python/feast/infra/offline_stores/remote.py +++ b/sdk/python/feast/infra/offline_stores/remote.py @@ -197,6 +197,7 @@ def get_historical_features( registry: BaseRegistry, project: str, full_feature_names: bool = False, + **kwargs, ) -> RemoteRetrievalJob: assert isinstance(config.offline_store, RemoteOfflineStoreConfig) @@ -218,6 +219,15 @@ def get_historical_features( "full_feature_names": full_feature_names, "name_aliases": name_aliases, } + + # Extract and serialize start_date/end_date for remote transmission + start_date = kwargs.get("start_date", None) + end_date = kwargs.get("end_date", None) + + if start_date is not None: + api_parameters["start_date"] = start_date.isoformat() + if end_date is not None: + api_parameters["end_date"] = end_date.isoformat() return RemoteRetrievalJob( client=client, diff --git a/sdk/python/feast/offline_server.py b/sdk/python/feast/offline_server.py index 776a0dfb96d..5ce940b417a 100644 --- a/sdk/python/feast/offline_server.py +++ b/sdk/python/feast/offline_server.py @@ -449,6 +449,17 @@ def get_historical_features(self, command: dict, key: Optional[str] = None): resource=feature_view, actions=[AuthzedAction.READ_OFFLINE] ) + # Extract and deserialize start_date/end_date if present + kwargs = {} + if "start_date" in command and command["start_date"] is not None: + kwargs["start_date"] = utils.make_tzaware( + datetime.fromisoformat(command["start_date"]) + ) + if "end_date" in command and command["end_date"] is not None: + kwargs["end_date"] = utils.make_tzaware( + datetime.fromisoformat(command["end_date"]) + ) + retJob = self.offline_store.get_historical_features( config=self.store.config, feature_views=feature_views, @@ -457,6 +468,7 @@ def get_historical_features(self, command: dict, key: Optional[str] = None): registry=self.store.registry, project=project, full_feature_names=full_feature_names, + **kwargs, ) return retJob From d6bb7730c7be75761585373fbe3eee2c6991860a Mon Sep 17 00:00:00 2001 From: Aniket Paluskar Date: Tue, 21 Oct 2025 17:44:51 +0530 Subject: [PATCH 2/2] Minor linting & reformatting changes Signed-off-by: Aniket Paluskar --- sdk/python/feast/infra/offline_stores/remote.py | 2 +- sdk/python/feast/offline_server.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sdk/python/feast/infra/offline_stores/remote.py b/sdk/python/feast/infra/offline_stores/remote.py index 33b1c1e570f..abe75ca57e5 100644 --- a/sdk/python/feast/infra/offline_stores/remote.py +++ b/sdk/python/feast/infra/offline_stores/remote.py @@ -219,7 +219,7 @@ def get_historical_features( "full_feature_names": full_feature_names, "name_aliases": name_aliases, } - + # Extract and serialize start_date/end_date for remote transmission start_date = kwargs.get("start_date", None) end_date = kwargs.get("end_date", None) diff --git a/sdk/python/feast/offline_server.py b/sdk/python/feast/offline_server.py index 5ce940b417a..6bc573888fc 100644 --- a/sdk/python/feast/offline_server.py +++ b/sdk/python/feast/offline_server.py @@ -449,7 +449,7 @@ def get_historical_features(self, command: dict, key: Optional[str] = None): resource=feature_view, actions=[AuthzedAction.READ_OFFLINE] ) - # Extract and deserialize start_date/end_date if present + # Extract and deserialize start_date/end_date if present kwargs = {} if "start_date" in command and command["start_date"] is not None: kwargs["start_date"] = utils.make_tzaware( @@ -459,7 +459,7 @@ def get_historical_features(self, command: dict, key: Optional[str] = None): kwargs["end_date"] = utils.make_tzaware( datetime.fromisoformat(command["end_date"]) ) - + retJob = self.offline_store.get_historical_features( config=self.store.config, feature_views=feature_views,