Skip to content

Commit 099da51

Browse files
committed
REST: Add metadata_location to View, and register_view integration test
1 parent a6964da commit 099da51

4 files changed

Lines changed: 37 additions & 0 deletions

File tree

pyiceberg/catalog/rest/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -851,6 +851,7 @@ def _response_to_staged_table(self, identifier_tuple: tuple[str, ...], table_res
851851
def _response_to_view(self, identifier_tuple: tuple[str, ...], view_response: ViewResponse) -> View:
852852
return View(
853853
identifier=identifier_tuple,
854+
metadata_location=view_response.metadata_location,
854855
metadata=view_response.metadata,
855856
)
856857

pyiceberg/view/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,17 @@ class View:
2929

3030
_identifier: Identifier
3131
metadata: ViewMetadata
32+
metadata_location: str | None
3233

3334
def __init__(
3435
self,
3536
identifier: Identifier,
3637
metadata: ViewMetadata,
38+
metadata_location: str | None = None,
3739
) -> None:
3840
self._identifier = identifier
3941
self.metadata = metadata
42+
self.metadata_location = metadata_location
4043

4144
def name(self) -> Identifier:
4245
"""Return the identifier of this view."""

tests/conftest.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2473,6 +2473,8 @@ def clean_up(test_catalog: Catalog) -> None:
24732473
if "my_iceberg_database-" in database_name:
24742474
for identifier in test_catalog.list_tables(database_name):
24752475
test_catalog.drop_table(identifier)
2476+
for identifier in test_catalog.list_views(database_name):
2477+
test_catalog.drop_view(identifier)
24762478
test_catalog.drop_namespace(database_name)
24772479

24782480

tests/integration/test_catalog.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
from pyiceberg.table.sorting import INITIAL_SORT_ORDER_ID, SortField, SortOrder
4545
from pyiceberg.transforms import BucketTransform, DayTransform, IdentityTransform
4646
from pyiceberg.types import IntegerType, LongType, NestedField, TimestampType, UUIDType
47+
from pyiceberg.view.metadata import SQLViewRepresentation, ViewVersion
4748
from tests.conftest import (
4849
clean_up,
4950
does_support_atomic_concurrent_updates,
@@ -617,6 +618,36 @@ def test_register_table_existing(test_catalog: Catalog, table_schema_nested: Sch
617618
test_catalog.register_table(identifier, metadata_location=table.metadata_location)
618619

619620

621+
@pytest.mark.integration
622+
def test_rest_register_view(rest_catalog: RestCatalog, table_schema_simple: Schema, database_name: str, view_name: str) -> None:
623+
identifier = (database_name, view_name)
624+
625+
rest_catalog.create_namespace_if_not_exists(database_name)
626+
627+
view_version = ViewVersion(
628+
version_id=1,
629+
schema_id=1,
630+
timestamp_ms=1,
631+
summary={},
632+
representations=[
633+
SQLViewRepresentation(
634+
type="sql",
635+
sql="SELECT 1 as some_col",
636+
dialect="spark",
637+
)
638+
],
639+
default_namespace=["default"],
640+
)
641+
642+
view = rest_catalog.create_view(identifier, table_schema_simple, view_version)
643+
assert rest_catalog.view_exists(identifier)
644+
645+
register_identifier = (database_name, "register_identifier")
646+
assert not rest_catalog.view_exists(register_identifier)
647+
rest_catalog.register_view(register_identifier, view.metadata_location)
648+
assert rest_catalog.view_exists(register_identifier)
649+
650+
620651
@pytest.mark.integration
621652
def test_rest_custom_namespace_separator(rest_catalog: RestCatalog, table_schema_simple: Schema) -> None:
622653
"""

0 commit comments

Comments
 (0)