diff --git a/python/python/lancedb/_lancedb.pyi b/python/python/lancedb/_lancedb.pyi index 77791c59..d4269510 100644 --- a/python/python/lancedb/_lancedb.pyi +++ b/python/python/lancedb/_lancedb.pyi @@ -26,7 +26,7 @@ class Connection(object): async def close(self): ... async def list_namespaces( self, - namespace: List[str], + namespace: Optional[List[str]], page_token: Optional[str], limit: Optional[int], ) -> List[str]: ... @@ -34,7 +34,7 @@ class Connection(object): async def drop_namespace(self, namespace: List[str]) -> None: ... async def table_names( self, - namespace: List[str], + namespace: Optional[List[str]], start_after: Optional[str], limit: Optional[int], ) -> list[str]: ... @@ -43,7 +43,7 @@ class Connection(object): name: str, mode: str, data: pa.RecordBatchReader, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional[StorageOptionsProvider] = None, location: Optional[str] = None, @@ -53,7 +53,7 @@ class Connection(object): name: str, mode: str, schema: pa.Schema, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional[StorageOptionsProvider] = None, location: Optional[str] = None, @@ -61,7 +61,7 @@ class Connection(object): async def open_table( self, name: str, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional[StorageOptionsProvider] = None, index_cache_size: Optional[int] = None, @@ -71,7 +71,7 @@ class Connection(object): self, target_table_name: str, source_uri: str, - target_namespace: List[str] = [], + target_namespace: Optional[List[str]] = None, source_version: Optional[int] = None, source_tag: Optional[str] = None, is_shallow: bool = True, @@ -80,11 +80,13 @@ class Connection(object): self, cur_name: str, new_name: str, - cur_namespace: List[str] = [], - new_namespace: List[str] = [], + cur_namespace: Optional[List[str]] = None, + new_namespace: Optional[List[str]] = None, ) -> None: ... - async def drop_table(self, name: str, namespace: List[str] = []) -> None: ... - async def drop_all_tables(self, namespace: List[str] = []) -> None: ... + async def drop_table( + self, name: str, namespace: Optional[List[str]] = None + ) -> None: ... + async def drop_all_tables(self, namespace: Optional[List[str]] = None) -> None: ... class Table: def name(self) -> str: ... diff --git a/python/python/lancedb/db.py b/python/python/lancedb/db.py index 2015c07a..19953fa8 100644 --- a/python/python/lancedb/db.py +++ b/python/python/lancedb/db.py @@ -54,7 +54,7 @@ class DBConnection(EnforceOverrides): def list_namespaces( self, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, page_token: Optional[str] = None, limit: int = 10, ) -> Iterable[str]: @@ -75,6 +75,8 @@ class DBConnection(EnforceOverrides): Iterable of str List of immediate child namespace names """ + if namespace is None: + namespace = [] return [] def create_namespace(self, namespace: List[str]) -> None: @@ -107,7 +109,7 @@ class DBConnection(EnforceOverrides): page_token: Optional[str] = None, limit: int = 10, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, ) -> Iterable[str]: """List all tables in this database, in sorted order @@ -142,7 +144,7 @@ class DBConnection(EnforceOverrides): fill_value: float = 0.0, embedding_functions: Optional[List[EmbeddingFunctionConfig]] = None, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional["StorageOptionsProvider"] = None, data_storage_version: Optional[str] = None, @@ -308,7 +310,7 @@ class DBConnection(EnforceOverrides): self, name: str, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional["StorageOptionsProvider"] = None, index_cache_size: Optional[int] = None, @@ -347,7 +349,7 @@ class DBConnection(EnforceOverrides): """ raise NotImplementedError - def drop_table(self, name: str, namespace: List[str] = []): + def drop_table(self, name: str, namespace: Optional[List[str]] = None): """Drop a table from the database. Parameters @@ -358,14 +360,16 @@ class DBConnection(EnforceOverrides): The namespace to drop the table from. Empty list represents root namespace. """ + if namespace is None: + namespace = [] raise NotImplementedError def rename_table( self, cur_name: str, new_name: str, - cur_namespace: List[str] = [], - new_namespace: List[str] = [], + cur_namespace: Optional[List[str]] = None, + new_namespace: Optional[List[str]] = None, ): """Rename a table in the database. @@ -382,6 +386,10 @@ class DBConnection(EnforceOverrides): The namespace to move the table to. If not specified, defaults to the same as cur_namespace. """ + if cur_namespace is None: + cur_namespace = [] + if new_namespace is None: + new_namespace = [] raise NotImplementedError def drop_database(self): @@ -391,7 +399,7 @@ class DBConnection(EnforceOverrides): """ raise NotImplementedError - def drop_all_tables(self, namespace: List[str] = []): + def drop_all_tables(self, namespace: Optional[List[str]] = None): """ Drop all tables from the database @@ -401,6 +409,8 @@ class DBConnection(EnforceOverrides): The namespace to drop all tables from. None or empty list represents root namespace. """ + if namespace is None: + namespace = [] raise NotImplementedError @property @@ -541,7 +551,7 @@ class LanceDBConnection(DBConnection): @override def list_namespaces( self, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, page_token: Optional[str] = None, limit: int = 10, ) -> Iterable[str]: @@ -562,6 +572,8 @@ class LanceDBConnection(DBConnection): Iterable of str List of immediate child namespace names """ + if namespace is None: + namespace = [] return LOOP.run( self._conn.list_namespaces( namespace=namespace, page_token=page_token, limit=limit @@ -596,7 +608,7 @@ class LanceDBConnection(DBConnection): page_token: Optional[str] = None, limit: int = 10, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, ) -> Iterable[str]: """Get the names of all tables in the database. The names are sorted. @@ -614,6 +626,8 @@ class LanceDBConnection(DBConnection): Iterator of str. A list of table names. """ + if namespace is None: + namespace = [] return LOOP.run( self._conn.table_names( namespace=namespace, start_after=page_token, limit=limit @@ -638,7 +652,7 @@ class LanceDBConnection(DBConnection): fill_value: float = 0.0, embedding_functions: Optional[List[EmbeddingFunctionConfig]] = None, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional["StorageOptionsProvider"] = None, data_storage_version: Optional[str] = None, @@ -655,6 +669,8 @@ class LanceDBConnection(DBConnection): --- DBConnection.create_table """ + if namespace is None: + namespace = [] if mode.lower() not in ["create", "overwrite"]: raise ValueError("mode must be either 'create' or 'overwrite'") validate_table_name(name) @@ -680,7 +696,7 @@ class LanceDBConnection(DBConnection): self, name: str, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional["StorageOptionsProvider"] = None, index_cache_size: Optional[int] = None, @@ -698,6 +714,8 @@ class LanceDBConnection(DBConnection): ------- A LanceTable object representing the table. """ + if namespace is None: + namespace = [] if index_cache_size is not None: import warnings @@ -723,7 +741,7 @@ class LanceDBConnection(DBConnection): target_table_name: str, source_uri: str, *, - target_namespace: List[str] = [], + target_namespace: Optional[List[str]] = None, source_version: Optional[int] = None, source_tag: Optional[str] = None, is_shallow: bool = True, @@ -756,6 +774,8 @@ class LanceDBConnection(DBConnection): ------- A LanceTable object representing the cloned table. """ + if target_namespace is None: + target_namespace = [] LOOP.run( self._conn.clone_table( target_table_name, @@ -776,7 +796,7 @@ class LanceDBConnection(DBConnection): def drop_table( self, name: str, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, ignore_missing: bool = False, ): """Drop a table from the database. @@ -790,6 +810,8 @@ class LanceDBConnection(DBConnection): ignore_missing: bool, default False If True, ignore if the table does not exist. """ + if namespace is None: + namespace = [] LOOP.run( self._conn.drop_table( name, namespace=namespace, ignore_missing=ignore_missing @@ -797,7 +819,9 @@ class LanceDBConnection(DBConnection): ) @override - def drop_all_tables(self, namespace: List[str] = []): + def drop_all_tables(self, namespace: Optional[List[str]] = None): + if namespace is None: + namespace = [] LOOP.run(self._conn.drop_all_tables(namespace=namespace)) @override @@ -805,8 +829,8 @@ class LanceDBConnection(DBConnection): self, cur_name: str, new_name: str, - cur_namespace: List[str] = [], - new_namespace: List[str] = [], + cur_namespace: Optional[List[str]] = None, + new_namespace: Optional[List[str]] = None, ): """Rename a table in the database. @@ -821,6 +845,10 @@ class LanceDBConnection(DBConnection): new_namespace: List[str], optional The namespace to move the table to. """ + if cur_namespace is None: + cur_namespace = [] + if new_namespace is None: + new_namespace = [] LOOP.run( self._conn.rename_table( cur_name, @@ -910,7 +938,7 @@ class AsyncConnection(object): async def list_namespaces( self, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, page_token: Optional[str] = None, limit: int = 10, ) -> Iterable[str]: @@ -931,6 +959,8 @@ class AsyncConnection(object): Iterable of str List of immediate child namespace names (not full paths) """ + if namespace is None: + namespace = [] return await self._inner.list_namespaces( namespace=namespace, page_token=page_token, limit=limit ) @@ -958,7 +988,7 @@ class AsyncConnection(object): async def table_names( self, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, start_after: Optional[str] = None, limit: Optional[int] = None, ) -> Iterable[str]: @@ -982,6 +1012,8 @@ class AsyncConnection(object): ------- Iterable of str """ + if namespace is None: + namespace = [] return await self._inner.table_names( namespace=namespace, start_after=start_after, limit=limit ) @@ -998,7 +1030,7 @@ class AsyncConnection(object): storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional["StorageOptionsProvider"] = None, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, embedding_functions: Optional[List[EmbeddingFunctionConfig]] = None, location: Optional[str] = None, ) -> AsyncTable: @@ -1155,6 +1187,8 @@ class AsyncConnection(object): ... await db.create_table("table4", make_batches(), schema=schema) >>> asyncio.run(iterable_example()) """ + if namespace is None: + namespace = [] metadata = None if embedding_functions is not None: @@ -1212,7 +1246,7 @@ class AsyncConnection(object): self, name: str, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional["StorageOptionsProvider"] = None, index_cache_size: Optional[int] = None, @@ -1254,6 +1288,8 @@ class AsyncConnection(object): ------- A LanceTable object representing the table. """ + if namespace is None: + namespace = [] table = await self._inner.open_table( name, namespace=namespace, @@ -1269,7 +1305,7 @@ class AsyncConnection(object): target_table_name: str, source_uri: str, *, - target_namespace: List[str] = [], + target_namespace: Optional[List[str]] = None, source_version: Optional[int] = None, source_tag: Optional[str] = None, is_shallow: bool = True, @@ -1302,6 +1338,8 @@ class AsyncConnection(object): ------- An AsyncTable object representing the cloned table. """ + if target_namespace is None: + target_namespace = [] table = await self._inner.clone_table( target_table_name, source_uri, @@ -1316,8 +1354,8 @@ class AsyncConnection(object): self, cur_name: str, new_name: str, - cur_namespace: List[str] = [], - new_namespace: List[str] = [], + cur_namespace: Optional[List[str]] = None, + new_namespace: Optional[List[str]] = None, ): """Rename a table in the database. @@ -1334,6 +1372,10 @@ class AsyncConnection(object): The namespace to move the table to. If not specified, defaults to the same as cur_namespace. """ + if cur_namespace is None: + cur_namespace = [] + if new_namespace is None: + new_namespace = [] await self._inner.rename_table( cur_name, new_name, cur_namespace=cur_namespace, new_namespace=new_namespace ) @@ -1342,7 +1384,7 @@ class AsyncConnection(object): self, name: str, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, ignore_missing: bool = False, ): """Drop a table from the database. @@ -1357,6 +1399,8 @@ class AsyncConnection(object): ignore_missing: bool, default False If True, ignore if the table does not exist. """ + if namespace is None: + namespace = [] try: await self._inner.drop_table(name, namespace=namespace) except ValueError as e: @@ -1365,7 +1409,7 @@ class AsyncConnection(object): if f"Table '{name}' was not found" not in str(e): raise e - async def drop_all_tables(self, namespace: List[str] = []): + async def drop_all_tables(self, namespace: Optional[List[str]] = None): """Drop all tables from the database. Parameters @@ -1374,6 +1418,8 @@ class AsyncConnection(object): The namespace to drop all tables from. None or empty list represents root namespace. """ + if namespace is None: + namespace = [] await self._inner.drop_all_tables(namespace=namespace) @deprecation.deprecated( diff --git a/python/python/lancedb/namespace.py b/python/python/lancedb/namespace.py index 13171d71..40a0648e 100644 --- a/python/python/lancedb/namespace.py +++ b/python/python/lancedb/namespace.py @@ -235,8 +235,10 @@ class LanceNamespaceDBConnection(DBConnection): page_token: Optional[str] = None, limit: int = 10, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, ) -> Iterable[str]: + if namespace is None: + namespace = [] request = ListTablesRequest(id=namespace, page_token=page_token, limit=limit) response = self._ns.list_tables(request) return response.tables if response.tables else [] @@ -253,12 +255,14 @@ class LanceNamespaceDBConnection(DBConnection): fill_value: float = 0.0, embedding_functions: Optional[List[EmbeddingFunctionConfig]] = None, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional[StorageOptionsProvider] = None, data_storage_version: Optional[str] = None, enable_v2_manifest_paths: Optional[bool] = None, ) -> Table: + if namespace is None: + namespace = [] if mode.lower() not in ["create", "overwrite"]: raise ValueError("mode must be either 'create' or 'overwrite'") validate_table_name(name) @@ -347,11 +351,13 @@ class LanceNamespaceDBConnection(DBConnection): self, name: str, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional[StorageOptionsProvider] = None, index_cache_size: Optional[int] = None, ) -> Table: + if namespace is None: + namespace = [] table_id = namespace + [name] request = DescribeTableRequest(id=table_id) response = self._ns.describe_table(request) @@ -381,8 +387,10 @@ class LanceNamespaceDBConnection(DBConnection): ) @override - def drop_table(self, name: str, namespace: List[str] = []): + def drop_table(self, name: str, namespace: Optional[List[str]] = None): # Use namespace drop_table directly + if namespace is None: + namespace = [] table_id = namespace + [name] request = DropTableRequest(id=table_id) self._ns.drop_table(request) @@ -392,9 +400,13 @@ class LanceNamespaceDBConnection(DBConnection): self, cur_name: str, new_name: str, - cur_namespace: List[str] = [], - new_namespace: List[str] = [], + cur_namespace: Optional[List[str]] = None, + new_namespace: Optional[List[str]] = None, ): + if cur_namespace is None: + cur_namespace = [] + if new_namespace is None: + new_namespace = [] raise NotImplementedError( "rename_table is not supported for namespace connections" ) @@ -406,14 +418,16 @@ class LanceNamespaceDBConnection(DBConnection): ) @override - def drop_all_tables(self, namespace: List[str] = []): + def drop_all_tables(self, namespace: Optional[List[str]] = None): + if namespace is None: + namespace = [] for table_name in self.table_names(namespace=namespace): self.drop_table(table_name, namespace=namespace) @override def list_namespaces( self, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, page_token: Optional[str] = None, limit: int = 10, ) -> Iterable[str]: @@ -435,6 +449,8 @@ class LanceNamespaceDBConnection(DBConnection): Iterable[str] Names of child namespaces. """ + if namespace is None: + namespace = [] request = ListNamespacesRequest( id=namespace, page_token=page_token, limit=limit ) @@ -472,13 +488,15 @@ class LanceNamespaceDBConnection(DBConnection): name: str, table_uri: str, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional[StorageOptionsProvider] = None, index_cache_size: Optional[int] = None, ) -> LanceTable: # Open a table directly from a URI using the location parameter # Note: storage_options should already be merged by the caller + if namespace is None: + namespace = [] temp_conn = LanceDBConnection( table_uri, # Use the table location as the connection URI read_consistency_interval=self.read_consistency_interval, @@ -539,9 +557,11 @@ class AsyncLanceNamespaceDBConnection: page_token: Optional[str] = None, limit: int = 10, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, ) -> Iterable[str]: """List table names in the namespace.""" + if namespace is None: + namespace = [] request = ListTablesRequest(id=namespace, page_token=page_token, limit=limit) response = self._ns.list_tables(request) return response.tables if response.tables else [] @@ -557,13 +577,15 @@ class AsyncLanceNamespaceDBConnection: fill_value: float = 0.0, embedding_functions: Optional[List[EmbeddingFunctionConfig]] = None, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional[StorageOptionsProvider] = None, data_storage_version: Optional[str] = None, enable_v2_manifest_paths: Optional[bool] = None, ) -> AsyncTable: """Create a new table in the namespace.""" + if namespace is None: + namespace = [] if mode.lower() not in ["create", "overwrite"]: raise ValueError("mode must be either 'create' or 'overwrite'") validate_table_name(name) @@ -655,12 +677,14 @@ class AsyncLanceNamespaceDBConnection: self, name: str, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional[StorageOptionsProvider] = None, index_cache_size: Optional[int] = None, ) -> AsyncTable: """Open an existing table from the namespace.""" + if namespace is None: + namespace = [] table_id = namespace + [name] request = DescribeTableRequest(id=table_id) response = self._ns.describe_table(request) @@ -701,8 +725,10 @@ class AsyncLanceNamespaceDBConnection: lance_table = await asyncio.to_thread(_open_table) return lance_table._table - async def drop_table(self, name: str, namespace: List[str] = []): + async def drop_table(self, name: str, namespace: Optional[List[str]] = None): """Drop a table from the namespace.""" + if namespace is None: + namespace = [] table_id = namespace + [name] request = DropTableRequest(id=table_id) self._ns.drop_table(request) @@ -711,10 +737,14 @@ class AsyncLanceNamespaceDBConnection: self, cur_name: str, new_name: str, - cur_namespace: List[str] = [], - new_namespace: List[str] = [], + cur_namespace: Optional[List[str]] = None, + new_namespace: Optional[List[str]] = None, ): """Rename is not supported for namespace connections.""" + if cur_namespace is None: + cur_namespace = [] + if new_namespace is None: + new_namespace = [] raise NotImplementedError( "rename_table is not supported for namespace connections" ) @@ -725,15 +755,17 @@ class AsyncLanceNamespaceDBConnection: "drop_database is deprecated, use drop_all_tables instead" ) - async def drop_all_tables(self, namespace: List[str] = []): + async def drop_all_tables(self, namespace: Optional[List[str]] = None): """Drop all tables in the namespace.""" + if namespace is None: + namespace = [] table_names = await self.table_names(namespace=namespace) for table_name in table_names: await self.drop_table(table_name, namespace=namespace) async def list_namespaces( self, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, page_token: Optional[str] = None, limit: int = 10, ) -> Iterable[str]: @@ -755,6 +787,8 @@ class AsyncLanceNamespaceDBConnection: Iterable[str] Names of child namespaces. """ + if namespace is None: + namespace = [] request = ListNamespacesRequest( id=namespace, page_token=page_token, limit=limit ) diff --git a/python/python/lancedb/remote/db.py b/python/python/lancedb/remote/db.py index 10237446..28c7c635 100644 --- a/python/python/lancedb/remote/db.py +++ b/python/python/lancedb/remote/db.py @@ -104,7 +104,7 @@ class RemoteDBConnection(DBConnection): @override def list_namespaces( self, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, page_token: Optional[str] = None, limit: int = 10, ) -> Iterable[str]: @@ -125,6 +125,8 @@ class RemoteDBConnection(DBConnection): Iterable of str List of immediate child namespace names """ + if namespace is None: + namespace = [] return LOOP.run( self._conn.list_namespaces( namespace=namespace, page_token=page_token, limit=limit @@ -159,7 +161,7 @@ class RemoteDBConnection(DBConnection): page_token: Optional[str] = None, limit: int = 10, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, ) -> Iterable[str]: """List the names of all tables in the database. @@ -177,6 +179,8 @@ class RemoteDBConnection(DBConnection): ------- An iterator of table names. """ + if namespace is None: + namespace = [] return LOOP.run( self._conn.table_names( namespace=namespace, start_after=page_token, limit=limit @@ -188,7 +192,7 @@ class RemoteDBConnection(DBConnection): self, name: str, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, index_cache_size: Optional[int] = None, ) -> Table: @@ -208,6 +212,8 @@ class RemoteDBConnection(DBConnection): """ from .table import RemoteTable + if namespace is None: + namespace = [] if index_cache_size is not None: logging.info( "index_cache_size is ignored in LanceDb Cloud" @@ -222,7 +228,7 @@ class RemoteDBConnection(DBConnection): target_table_name: str, source_uri: str, *, - target_namespace: List[str] = [], + target_namespace: Optional[List[str]] = None, source_version: Optional[int] = None, source_tag: Optional[str] = None, is_shallow: bool = True, @@ -252,6 +258,8 @@ class RemoteDBConnection(DBConnection): """ from .table import RemoteTable + if target_namespace is None: + target_namespace = [] table = LOOP.run( self._conn.clone_table( target_table_name, @@ -275,7 +283,7 @@ class RemoteDBConnection(DBConnection): mode: Optional[str] = None, embedding_functions: Optional[List[EmbeddingFunctionConfig]] = None, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, ) -> Table: """Create a [Table][lancedb.table.Table] in the database. @@ -372,6 +380,8 @@ class RemoteDBConnection(DBConnection): LanceTable(table4) """ + if namespace is None: + namespace = [] validate_table_name(name) if embedding_functions is not None: logging.warning( @@ -396,7 +406,7 @@ class RemoteDBConnection(DBConnection): return RemoteTable(table, self.db_name) @override - def drop_table(self, name: str, namespace: List[str] = []): + def drop_table(self, name: str, namespace: Optional[List[str]] = None): """Drop a table from the database. Parameters @@ -407,6 +417,8 @@ class RemoteDBConnection(DBConnection): The namespace to drop the table from. None or empty list represents root namespace. """ + if namespace is None: + namespace = [] LOOP.run(self._conn.drop_table(name, namespace=namespace)) @override @@ -414,8 +426,8 @@ class RemoteDBConnection(DBConnection): self, cur_name: str, new_name: str, - cur_namespace: List[str] = [], - new_namespace: List[str] = [], + cur_namespace: Optional[List[str]] = None, + new_namespace: Optional[List[str]] = None, ): """Rename a table in the database. @@ -426,6 +438,10 @@ class RemoteDBConnection(DBConnection): new_name: str The new name of the table. """ + if cur_namespace is None: + cur_namespace = [] + if new_namespace is None: + new_namespace = [] LOOP.run( self._conn.rename_table( cur_name, diff --git a/python/python/lancedb/table.py b/python/python/lancedb/table.py index e8b37ea0..5db88a0d 100644 --- a/python/python/lancedb/table.py +++ b/python/python/lancedb/table.py @@ -1708,13 +1708,15 @@ class LanceTable(Table): connection: "LanceDBConnection", name: str, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional["StorageOptionsProvider"] = None, index_cache_size: Optional[int] = None, location: Optional[str] = None, _async: AsyncTable = None, ): + if namespace is None: + namespace = [] self._conn = connection self._namespace = namespace self._location = location # Store location for use in _dataset_path @@ -1766,12 +1768,14 @@ class LanceTable(Table): db, name, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str]] = None, storage_options_provider: Optional["StorageOptionsProvider"] = None, index_cache_size: Optional[int] = None, location: Optional[str] = None, ): + if namespace is None: + namespace = [] tbl = cls( db, name, @@ -2623,7 +2627,7 @@ class LanceTable(Table): fill_value: float = 0.0, embedding_functions: Optional[List[EmbeddingFunctionConfig]] = None, *, - namespace: List[str] = [], + namespace: Optional[List[str]] = None, storage_options: Optional[Dict[str, str | bool]] = None, storage_options_provider: Optional["StorageOptionsProvider"] = None, data_storage_version: Optional[str] = None, @@ -2683,6 +2687,8 @@ class LanceTable(Table): Deprecated. Set `storage_options` when connecting to the database and set `new_table_enable_v2_manifest_paths` in the options. """ + if namespace is None: + namespace = [] self = cls.__new__(cls) self._conn = db self._namespace = namespace