1+ import json
12import random
23from datetime import timedelta
34
67import pytest
78
89from feast import FeatureView , Field
9- from feast .types import Float32 , Int32
10+ from feast .types import Float32 , Int32 , Json , Map , String , Struct
1011from feast .utils import _utc_now
1112from tests .integration .feature_repos .repo_configuration import (
1213 construct_universal_feature_views ,
@@ -36,6 +37,18 @@ def test_reorder_columns(environment, universal_data_sources):
3637 "event_timestamp" : [ts , ts ],
3738 "acc_rate" : [random .random (), random .random ()],
3839 "driver_id" : [1001 , 1001 ],
40+ "driver_metadata" : [
41+ {"vehicle_type" : "sedan" , "rating" : "4.5" },
42+ {"vehicle_type" : "suv" , "rating" : "3.8" },
43+ ],
44+ "driver_config" : [
45+ json .dumps ({"max_distance_km" : 100 , "preferred_zones" : ["north" ]}),
46+ json .dumps ({"max_distance_km" : 50 , "preferred_zones" : ["south" ]}),
47+ ],
48+ "driver_profile" : [
49+ {"name" : "driver_1001" , "age" : "30" },
50+ {"name" : "driver_1001" , "age" : "30" },
51+ ],
3952 },
4053 )
4154
@@ -66,7 +79,13 @@ def test_writing_incorrect_schema_fails(environment, universal_data_sources):
6679 "created" : [ts , ts ],
6780 },
6881 )
69- expected_missing = ["acc_rate" , "avg_daily_trips" ]
82+ expected_missing = [
83+ "acc_rate" ,
84+ "avg_daily_trips" ,
85+ "driver_config" ,
86+ "driver_metadata" ,
87+ "driver_profile" ,
88+ ]
7089 expected_extra = ["incorrect_schema" ]
7190
7291 with pytest .raises (ValueError , match = "missing_expected_columns" ) as excinfo :
@@ -92,6 +111,12 @@ def test_writing_consecutively_to_offline_store(environment, universal_data_sour
92111 Field (name = "avg_daily_trips" , dtype = Int32 ),
93112 Field (name = "conv_rate" , dtype = Float32 ),
94113 Field (name = "acc_rate" , dtype = Float32 ),
114+ Field (name = "driver_metadata" , dtype = Map ),
115+ Field (name = "driver_config" , dtype = Json ),
116+ Field (
117+ name = "driver_profile" ,
118+ dtype = Struct ({"name" : String , "age" : String }),
119+ ),
95120 ],
96121 source = data_sources .driver ,
97122 ttl = timedelta (
@@ -132,6 +157,18 @@ def test_writing_consecutively_to_offline_store(environment, universal_data_sour
132157 "acc_rate" : [random .random (), random .random ()],
133158 "avg_daily_trips" : [random .randint (0 , 10 ), random .randint (0 , 10 )],
134159 "created" : [ts , ts ],
160+ "driver_metadata" : [
161+ {"vehicle_type" : "sedan" , "rating" : "4.5" },
162+ {"vehicle_type" : "suv" , "rating" : "3.8" },
163+ ],
164+ "driver_config" : [
165+ json .dumps ({"max_distance_km" : 100 , "preferred_zones" : ["north" ]}),
166+ json .dumps ({"max_distance_km" : 50 , "preferred_zones" : ["south" ]}),
167+ ],
168+ "driver_profile" : [
169+ {"name" : "driver_1001" , "age" : "30" },
170+ {"name" : "driver_1001" , "age" : "35" },
171+ ],
135172 },
136173 )
137174 first_df = first_df .astype ({"conv_rate" : "float32" , "acc_rate" : "float32" })
@@ -176,6 +213,18 @@ def test_writing_consecutively_to_offline_store(environment, universal_data_sour
176213 "acc_rate" : [random .random (), random .random ()],
177214 "avg_daily_trips" : [random .randint (0 , 10 ), random .randint (0 , 10 )],
178215 "created" : [ts , ts ],
216+ "driver_metadata" : [
217+ {"vehicle_type" : "truck" , "rating" : "4.0" },
218+ {"vehicle_type" : "sedan" , "rating" : "4.2" },
219+ ],
220+ "driver_config" : [
221+ json .dumps ({"max_distance_km" : 150 , "preferred_zones" : ["east" ]}),
222+ json .dumps ({"max_distance_km" : 200 , "preferred_zones" : ["west" ]}),
223+ ],
224+ "driver_profile" : [
225+ {"name" : "driver_1001" , "age" : "31" },
226+ {"name" : "driver_1001" , "age" : "36" },
227+ ],
179228 },
180229 )
181230 second_df = second_df .astype ({"conv_rate" : "float32" , "acc_rate" : "float32" })
0 commit comments