1515# specific language governing permissions and limitations
1616# under the License.
1717import uuid
18+ from collections .abc import Iterator
1819from time import time
1920from typing import (
2021 TYPE_CHECKING ,
@@ -396,8 +397,11 @@ def drop_namespace(self, namespace: str | Identifier) -> None:
396397 database_name = self .identifier_to_database (namespace , NoSuchNamespaceError )
397398 table_identifiers = self .list_tables (namespace = database_name )
398399
399- if len (table_identifiers ) > 0 :
400+ try :
401+ next (table_identifiers )
400402 raise NamespaceNotEmptyError (f"Database { database_name } is not empty" )
403+ except StopIteration :
404+ pass
401405
402406 try :
403407 self ._delete_dynamo_item (
@@ -409,14 +413,14 @@ def drop_namespace(self, namespace: str | Identifier) -> None:
409413 raise NoSuchNamespaceError (f"Database does not exist: { database_name } " ) from e
410414
411415 @override
412- def list_tables (self , namespace : str | Identifier ) -> list [Identifier ]:
416+ def list_tables (self , namespace : str | Identifier ) -> Iterator [Identifier ]:
413417 """List Iceberg tables under the given namespace in the catalog.
414418
415419 Args:
416420 namespace (str | Identifier): Namespace identifier to search.
417421
418422 Returns:
419- List [Identifier]: list of table identifiers.
423+ Iterator [Identifier]: an iterator of table identifiers.
420424 """
421425 database_name = self .identifier_to_database (namespace , NoSuchNamespaceError )
422426
@@ -451,20 +455,20 @@ def list_tables(self, namespace: str | Identifier) -> list[Identifier]:
451455
452456 table_identifiers .append (self .identifier_to_tuple (identifier_col ))
453457
454- return table_identifiers
458+ return iter ( table_identifiers )
455459
456460 @override
457- def list_namespaces (self , namespace : str | Identifier = ()) -> list [Identifier ]:
461+ def list_namespaces (self , namespace : str | Identifier = ()) -> Iterator [Identifier ]:
458462 """List top-level namespaces from the catalog.
459463
460464 We do not support hierarchical namespace.
461465
462466 Returns:
463- List [Identifier]: a List of namespace identifiers.
467+ Iterator [Identifier]: an iterator of namespace identifiers.
464468 """
465469 # Hierarchical namespace is not supported. Return an empty list
466470 if namespace :
467- return []
471+ return iter ([])
468472
469473 paginator = self .dynamodb .get_paginator ("query" )
470474
@@ -494,7 +498,7 @@ def list_namespaces(self, namespace: str | Identifier = ()) -> list[Identifier]:
494498 namespace_col = _dict [DYNAMODB_COL_NAMESPACE ]
495499 database_identifiers .append (self .identifier_to_tuple (namespace_col ))
496500
497- return database_identifiers
501+ return iter ( database_identifiers )
498502
499503 @override
500504 def load_namespace_properties (self , namespace : str | Identifier ) -> Properties :
@@ -565,7 +569,7 @@ def create_view(
565569 raise NotImplementedError
566570
567571 @override
568- def list_views (self , namespace : str | Identifier ) -> list [Identifier ]:
572+ def list_views (self , namespace : str | Identifier ) -> Iterator [Identifier ]:
569573 raise NotImplementedError
570574
571575 @override
0 commit comments