diff --git a/kedro-datasets/kedro_datasets/ibis/file_dataset.py b/kedro-datasets/kedro_datasets/ibis/file_dataset.py index 6643b558d..b2fd825c1 100644 --- a/kedro-datasets/kedro_datasets/ibis/file_dataset.py +++ b/kedro-datasets/kedro_datasets/ibis/file_dataset.py @@ -154,7 +154,7 @@ def connection(self) -> BaseBackend: return self._connection def load(self) -> ir.Table: - load_path = self._get_load_path() + load_path = str(self._get_load_path()) reader = getattr(self.connection, f"read_{self._file_format}") return reader(load_path, table_name=self._table_name, **self._load_args) @@ -162,7 +162,7 @@ def save(self, data: ir.Table) -> None: save_path = self._get_save_path() Path(save_path).parent.mkdir(parents=True, exist_ok=True) writer = getattr(self.connection, f"to_{self._file_format}") - writer(data, save_path, **self._save_args) + writer(data, str(save_path), **self._save_args) def _describe(self) -> dict[str, Any]: return { diff --git a/kedro-datasets/tests/ibis/test_file_dataset.py b/kedro-datasets/tests/ibis/test_file_dataset.py index 7a4812ef6..4cbb5d5b9 100644 --- a/kedro-datasets/tests/ibis/test_file_dataset.py +++ b/kedro-datasets/tests/ibis/test_file_dataset.py @@ -18,6 +18,11 @@ def filepath_csv(tmp_path): return (tmp_path / "test.csv").as_posix() +@pytest.fixture +def filepath_parquet(tmp_path): + return (tmp_path / "test.parquet").as_posix() + + @pytest.fixture def database(tmp_path): return (tmp_path / "file.db").as_posix() @@ -65,6 +70,19 @@ def test_save_and_load(self, file_dataset, dummy_table): reloaded = file_dataset.load() assert_frame_equal(dummy_table.execute(), reloaded.execute()) + def test_save_and_load_parquet( + self, filepath_parquet, connection_config, dummy_table + ): + """Parquet paths must be str; Ibis calls len() on the path arg and PurePosixPath has no __len__.""" + ds = FileDataset( + filepath=filepath_parquet, + file_format="parquet", + connection=connection_config, + ) + ds.save(dummy_table) + reloaded = ds.load() + assert_frame_equal(dummy_table.execute(), reloaded.execute()) + @pytest.mark.parametrize("load_args", [{"filename": True}], indirect=True) def test_load_extra_params(self, file_dataset, load_args, dummy_table): """Test overriding the default load arguments."""