8989from feast .saved_dataset import SavedDataset , SavedDatasetStorage , ValidationReference
9090from feast .ssl_ca_trust_store_setup import configure_ca_trust_store_env_variables
9191from feast .stream_feature_view import StreamFeatureView
92+ from feast .transformation .pandas_transformation import PandasTransformation
93+ from feast .transformation .python_transformation import PythonTransformation
9294from feast .utils import _utc_now
9395
9496warnings .simplefilter ("once" , DeprecationWarning )
@@ -1552,7 +1554,13 @@ def _get_feature_view_and_df_for_online_write(
15521554 isinstance (feature_view , OnDemandFeatureView )
15531555 and feature_view .write_to_online_store
15541556 ):
1555- if feature_view .mode == "python" :
1557+ if (
1558+ feature_view .mode == "python"
1559+ and isinstance (
1560+ feature_view .feature_transformation , PythonTransformation
1561+ )
1562+ and df is not None
1563+ ):
15561564 input_dict = (
15571565 df .to_dict (orient = "records" )[0 ]
15581566 if feature_view .singleton
@@ -1561,7 +1569,8 @@ def _get_feature_view_and_df_for_online_write(
15611569 transformed_data = feature_view .feature_transformation .udf (input_dict )
15621570 if feature_view .write_to_online_store :
15631571 entities = [
1564- self .get_entity (entity ) for entity in feature_view .entities
1572+ self .get_entity (entity )
1573+ for entity in (feature_view .entities or [])
15651574 ]
15661575 join_keys = [entity .join_key for entity in entities if entity ]
15671576 join_keys = [k for k in join_keys if k in input_dict .keys ()]
@@ -1585,11 +1594,14 @@ def _get_feature_view_and_df_for_online_write(
15851594 if k not in transformed_data :
15861595 transformed_data [k ] = input_dict [k ]
15871596 df = pd .DataFrame (transformed_data )
1588- elif feature_view .mode == "pandas" :
1597+ elif feature_view .mode == "pandas" and isinstance (
1598+ feature_view .feature_transformation , PandasTransformation
1599+ ):
15891600 transformed_df = feature_view .feature_transformation .udf (df )
1590- for col in df .columns :
1591- transformed_df [col ] = df [col ]
1592- df = transformed_df
1601+ if df is not None :
1602+ for col in df .columns :
1603+ transformed_df [col ] = df [col ]
1604+ df = transformed_df
15931605
15941606 else :
15951607 raise Exception ("Unsupported OnDemandFeatureView mode" )
@@ -1947,7 +1959,9 @@ def retrieve_online_documents_v2(
19471959 for feature in features :
19481960 feature_view_name = feature .split (":" )[0 ]
19491961 if feature_view_name in [fv .name for fv in available_odfv_views ]:
1950- feature_view = self .get_on_demand_feature_view (feature_view_name )
1962+ feature_view : Union [OnDemandFeatureView , FeatureView ] = (
1963+ self .get_on_demand_feature_view (feature_view_name )
1964+ )
19511965 else :
19521966 feature_view = self .get_feature_view (feature_view_name )
19531967 feature_view_set .add (feature_view .name )
@@ -1957,7 +1971,7 @@ def retrieve_online_documents_v2(
19571971 f .split (":" )[1 ] for f in features if isinstance (f , str ) and ":" in f
19581972 ]
19591973 if len (available_feature_views ) == 0 :
1960- available_feature_views .extend (available_odfv_views )
1974+ available_feature_views .extend (available_odfv_views ) # type: ignore[arg-type]
19611975
19621976 requested_feature_view = available_feature_views [0 ]
19631977 if not requested_feature_view :
0 commit comments