@@ -151,6 +151,140 @@ def mock_read_blob_stream_parquet_df(
151151 assert isinstance (blobs_df , pl .DataFrame )
152152
153153
154+ def test_datasets_catalog_get_dataframe_parquet_pandas_with_metadata (
155+ mocker , mock_write_blob_stream , dataset_ns_map , dataset_defaults
156+ ):
157+ datacat = dict_to_sn (dataset_ns_map , dataset_defaults )
158+ dataset_namespaces = get_dataset_dot_path (dataset_ns_map )
159+ datacat .__setattr__ ("__namespace_list__" , dataset_namespaces )
160+
161+ mocker .patch (
162+ "cfa.dataops.catalog.write_blob_stream" ,
163+ mock_write_blob_stream ,
164+ )
165+ mocker .patch .object (
166+ datacat .tests .etl_test .load ,
167+ "get_versions" ,
168+ return_value = ["2025-06-03T17-56-50" , "2025-05-30T14-50-36" ],
169+ )
170+
171+ def mock_read_blob_stream_parquet_df (
172+ blob_url : str ,
173+ account_name : str ,
174+ container_name : str ,
175+ ) -> bytes :
176+ df = pd .DataFrame (
177+ [
178+ {"test" : 1 , "data" : 2 },
179+ {"test" : 3 , "data" : 4 },
180+ ]
181+ )
182+ data = df .to_parquet (index = False )
183+ return MockBlob (data )
184+
185+ mocker .patch (
186+ "cfa.dataops.catalog.read_blob_stream" ,
187+ mock_read_blob_stream_parquet_df ,
188+ )
189+ mocker .patch .object (
190+ datacat .tests .etl_test .load ,
191+ "_get_version_blobs" ,
192+ return_value = [
193+ {
194+ "name" : "prefix_test/transformed/test_dataset/2025-06-03T17-56-50/data.parquet" ,
195+ "container" : "container_test" ,
196+ }
197+ ],
198+ )
199+
200+ blobs_df = datacat .tests .etl_test .load .get_dataframe (
201+ output = "pd" ,
202+ version_spec = ">=2025-05-01,<2025-07-01" ,
203+ selection = "oldest" ,
204+ with_metadata = True ,
205+ )
206+
207+ assert isinstance (blobs_df , pd .DataFrame )
208+ assert blobs_df .attrs == {
209+ "version" : "2025-05-30T14-50-36" ,
210+ "blob_url" : "az://container_test/prefix_test/transformed/test_dataset/2025-06-03T17-56-50/*.parquet" ,
211+ "version_spec" : ">=2025-05-01,<2025-07-01" ,
212+ "selection" : "oldest" ,
213+ }
214+
215+
216+ def test_datasets_catalog_get_dataframe_parquet_polars_with_metadata (
217+ mocker , mock_write_blob_stream , dataset_ns_map , dataset_defaults
218+ ):
219+ datacat = dict_to_sn (dataset_ns_map , dataset_defaults )
220+ dataset_namespaces = get_dataset_dot_path (dataset_ns_map )
221+ datacat .__setattr__ ("__namespace_list__" , dataset_namespaces )
222+
223+ mocker .patch (
224+ "cfa.dataops.catalog.write_blob_stream" ,
225+ mock_write_blob_stream ,
226+ )
227+ mocker .patch .object (
228+ datacat .tests .etl_test .load ,
229+ "get_versions" ,
230+ return_value = ["2025-06-03T17-56-50" ],
231+ )
232+ mocker .patch .object (
233+ datacat .tests .etl_test .load ,
234+ "_get_version_blobs" ,
235+ return_value = [
236+ {
237+ "name" : "prefix_test/transformed/test_dataset/2025-06-03T17-56-50/data.parquet" ,
238+ "container" : "container_test" ,
239+ }
240+ ],
241+ )
242+
243+ def mock_read_blob_stream_parquet_bytes (
244+ blob_url : str ,
245+ account_name : str ,
246+ container_name : str ,
247+ ) -> bytes :
248+ return MockBlob (b"parquet-bytes-not-used" )
249+
250+ mocker .patch (
251+ "cfa.dataops.catalog.read_blob_stream" ,
252+ mock_read_blob_stream_parquet_bytes ,
253+ )
254+
255+ metadata = {}
256+
257+ class MockConfigMeta :
258+ def set (self , ** kwargs ):
259+ metadata .update (kwargs )
260+
261+ class MockPolarsFrame :
262+ def __init__ (self ):
263+ self .config_meta = MockConfigMeta ()
264+
265+ mocker .patch (
266+ "cfa.dataops.catalog.pl.read_parquet" ,
267+ return_value = object (),
268+ )
269+ mocker .patch (
270+ "cfa.dataops.catalog.pl.concat" ,
271+ return_value = MockPolarsFrame (),
272+ )
273+
274+ blobs_df = datacat .tests .etl_test .load .get_dataframe (
275+ output = "pl" ,
276+ with_metadata = True ,
277+ )
278+
279+ assert isinstance (blobs_df , MockPolarsFrame )
280+ assert metadata == {
281+ "version" : "2025-06-03T17-56-50" ,
282+ "blob_url" : "az://container_test/prefix_test/transformed/test_dataset/2025-06-03T17-56-50/*.parquet" ,
283+ "version_spec" : None ,
284+ "selection" : "newest" ,
285+ }
286+
287+
154288def test_datasets_catalog_get_dataframe_json (
155289 mocker , mock_write_blob_stream , dataset_ns_map , dataset_defaults
156290):
0 commit comments