This is an automated email from the ASF dual-hosted git repository.

github-merge-queue[bot] pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg-python.git


The following commit(s) were added to refs/heads/main by this push:
     new 747ebee2d feat: Support passing kwargs to polars.scan_iceberg in 
Table.to_polars (#3868)
747ebee2d is described below

commit 747ebee2d065c5a293786cbede12ccc149544799
Author: hedger9487 <[email protected]>
AuthorDate: Sat Oct 24 05:59:01 2026 +0000

    feat: Support passing kwargs to polars.scan_iceberg in Table.to_polars 
(#3868)
    
    feat: Support passing kwargs to polars.scan_iceberg in Table.to_polars 
(#3128)
    
    Co-authored-by: Kevin Liu <[email protected]>
---
 pyiceberg/table/__init__.py | 10 +++++++---
 tests/table/test_init.py    | 26 ++++++++++++++++++++++++++
 2 files changed, 33 insertions(+), 3 deletions(-)

diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py
index 5f1341f0b..9c38da3b2 100644
--- a/pyiceberg/table/__init__.py
+++ b/pyiceberg/table/__init__.py
@@ -1900,15 +1900,19 @@ class Table:
 
         return bd.read_iceberg_table(self)
 
-    def to_polars(self) -> pl.LazyFrame:
+    def to_polars(self, **kwargs: Any) -> pl.LazyFrame:
         """Lazily read from this Apache Iceberg table.
 
+        Args:
+            **kwargs: Additional keyword arguments to forward to 
:func:`polars.scan_iceberg`
+                (e.g. ``storage_options``, ``snapshot_id``, 
``reader_override``).
+
         Returns:
-            pl.LazyFrame: Unmaterialized Polars LazyFrame created from the 
Iceberg table
+            pl.LazyFrame: Unmaterialized Polars LazyFrame created from the 
Iceberg table.
         """
         import polars as pl
 
-        return pl.scan_iceberg(self)
+        return pl.scan_iceberg(self, **kwargs)
 
     def __datafusion_table_provider__(self, session: Any | None = None) -> 
IcebergDataFusionTable:
         """Return the DataFusion table provider PyCapsule interface.
diff --git a/tests/table/test_init.py b/tests/table/test_init.py
index 3d160781e..f4b63bc41 100644
--- a/tests/table/test_init.py
+++ b/tests/table/test_init.py
@@ -2067,3 +2067,29 @@ def 
test_static_table_forwards_location_to_table_file_io(metadata_location: str,
 
     assert seen_locations, "expected at least one load_file_io call"
     assert all(loc is not None for loc in seen_locations), f"load_file_io 
called without a location: {seen_locations}"
+
+
+def test_table_to_polars_forwards_kwargs(table_v2: Table, monkeypatch: 
pytest.MonkeyPatch) -> None:
+    import polars as pl
+
+    recorded_calls: list[tuple[Any, dict[str, Any]]] = []
+
+    def mock_scan_iceberg(source: Any, **kwargs: Any) -> Any:
+        recorded_calls.append((source, kwargs))
+        return "mock_lazy_frame"
+
+    monkeypatch.setattr(pl, "scan_iceberg", mock_scan_iceberg)
+
+    # Test without kwargs
+    res1 = table_v2.to_polars()
+    assert res1 == "mock_lazy_frame"
+    assert recorded_calls[0] == (table_v2, {})
+
+    # Test with kwargs
+    storage_options = {"s3": {"endpoint": "https://s3.custom.endpoint"}}
+    res2 = table_v2.to_polars(storage_options=storage_options, 
snapshot_id=12345, reader_override="native")
+    assert res2 == "mock_lazy_frame"
+    assert recorded_calls[1] == (
+        table_v2,
+        {"storage_options": storage_options, "snapshot_id": 12345, 
"reader_override": "native"},
+    )

Reply via email to