diff --git a/python/python/lancedb/namespace.py b/python/python/lancedb/namespace.py index b3ad83cc9..a3571f64b 100644 --- a/python/python/lancedb/namespace.py +++ b/python/python/lancedb/namespace.py @@ -11,7 +11,7 @@ through a namespace abstraction. from __future__ import annotations import sys -from typing import TYPE_CHECKING, Any, Dict, Iterable, List, Optional, Union +from typing import Any, Dict, Iterable, List, Optional, Union from uuid import UUID if sys.version_info >= (3, 12): @@ -19,8 +19,6 @@ if sys.version_info >= (3, 12): else: from overrides import override -if TYPE_CHECKING: - from lancedb.listing import AsyncListing, Listing from lancedb.query import Query from datetime import timedelta @@ -53,6 +51,7 @@ from lancedb.background_loop import LOOP from lancedb.arrow import AsyncRecordBatchReader from lancedb.db import AsyncConnection, DBConnection from lancedb.job import AsyncJob, Job +from lancedb.listing import AsyncListing, Listing from lancedb.sql import AsyncQuery as AsyncSqlQuery from lancedb.sql import QueryDescription from lance_namespace import ( diff --git a/python/python/tests/test_namespace.py b/python/python/tests/test_namespace.py index 7f095b71d..d9af24a90 100644 --- a/python/python/tests/test_namespace.py +++ b/python/python/tests/test_namespace.py @@ -10,6 +10,7 @@ import pytest import pyarrow as pa import lancedb from lance_namespace.errors import NamespaceNotEmptyError, TableNotFoundError +from lancedb.listing import AsyncListing, Listing from lancedb.namespace import _MAX_QUERY_K from lancedb.table import AsyncTable, LanceTable @@ -104,6 +105,18 @@ class TestNamespaceConnection: assert isinstance(db, lancedb.LanceNamespaceDBConnection) assert len(list(db.table_names())) == 0 + def test_list_materialized_views(self): + db = lancedb.connect_namespace("dir", {"root": self.temp_dir}) + db.create_table("source", [{"id": 1}]) + db.create_materialized_view("view", "source", with_no_data=True) + + names = db.list_materialized_views(page_limit=1) + assert isinstance(names, Listing) + assert names.num_page_results() == 0 + assert list(names) == ["view"] + assert names.num_page_results() == 0 + assert names.page_token() is None + def test_sync_builtin_namespace_uses_rust_without_python_client(self, monkeypatch): """Built-in sync namespace connections should not construct or call the Python namespace client for normal namespace/table management.""" @@ -605,6 +618,18 @@ class TestAsyncNamespaceConnection: table_names = await db.table_names() assert len(list(table_names)) == 0 + async def test_list_materialized_views(self): + db = lancedb.connect_namespace_async("dir", {"root": self.temp_dir}) + await db.create_table("source", [{"id": 1}]) + await db.create_materialized_view("view", "source", with_no_data=True) + + names = db.list_materialized_views(page_limit=1) + assert isinstance(names, AsyncListing) + assert names.num_page_results() == 0 + assert [name async for name in names] == ["view"] + assert names.num_page_results() == 0 + assert names.page_token() is None + async def test_async_builtin_namespace_uses_rust_without_python_client( self, monkeypatch ):