Skip to content

Commit e11be88

Browse files
committed
it works
1 parent 790ebb0 commit e11be88

File tree

4 files changed

+24
-27
lines changed

4 files changed

+24
-27
lines changed

pyiceberg/table/encryption.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,22 @@
1616
# under the License.
1717

1818
from typing import Optional
19+
1920
from pydantic import Field
21+
2022
from pyiceberg.typedef import IcebergBaseModel
2123

2224

2325
class EncryptedKey(IcebergBaseModel):
2426
key_id: str = Field(alias="key-id", description="ID of the encryption key")
25-
encrypted_key_metadata: bytes = Field(alias="encrypted-key-metadata", description="Encrypted key and metadata, base64 encoded")
26-
encrypted_by_id: Optional[str] = Field(alias="encrypted-by-id", description="Optional ID of the key used to encrypt or wrap `key-metadata`", default=None)
27-
properties: Optional[dict[str, str]] = Field(alias="properties", description="A string to string map of additional metadata used by the table's encryption scheme", default=None)
27+
encrypted_key_metadata: bytes = Field(
28+
alias="encrypted-key-metadata", description="Encrypted key and metadata, base64 encoded"
29+
)
30+
encrypted_by_id: Optional[str] = Field(
31+
alias="encrypted-by-id", description="Optional ID of the key used to encrypt or wrap `key-metadata`", default=None
32+
)
33+
properties: Optional[dict[str, str]] = Field(
34+
alias="properties",
35+
description="A string to string map of additional metadata used by the table's encryption scheme",
36+
default=None,
37+
)

pyiceberg/table/update/__init__.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,17 @@ class UpgradeFormatVersionUpdate(IcebergBaseModel):
9090
action: Literal["upgrade-format-version"] = Field(default="upgrade-format-version")
9191
format_version: int = Field(alias="format-version")
9292

93+
9394
class AddEncryptedKeyUpdate(IcebergBaseModel):
9495
action: Literal["add-encryption-key"] = Field(default="add-encryption-key")
9596
key: EncryptedKey = Field(alias="key")
9697

98+
9799
class RemoveEncryptedKeyUpdate(IcebergBaseModel):
98100
action: Literal["remove-encryption-key"] = Field(default="remove-encryption-key")
99101
key_id: str = Field(alias="key-id")
100102

103+
101104
class AddSchemaUpdate(IcebergBaseModel):
102105
action: Literal["add-schema"] = Field(default="add-schema")
103106
schema_: Schema = Field(alias="schema")
@@ -604,6 +607,7 @@ def _(update: RemoveStatisticsUpdate, base_metadata: TableMetadata, context: _Ta
604607

605608
return base_metadata.model_copy(update={"statistics": statistics})
606609

610+
607611
@_apply_table_update.register(AddEncryptedKeyUpdate)
608612
def _(update: AddEncryptedKeyUpdate, base_metadata: TableMetadata, context: _TableMetadataUpdateContext) -> TableMetadata:
609613
context.add_update(update)

tests/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2467,6 +2467,7 @@ def table_v2(example_table_metadata_v2: Dict[str, Any]) -> Table:
24672467
catalog=NoopCatalog("NoopCatalog"),
24682468
)
24692469

2470+
24702471
@pytest.fixture
24712472
def table_v3(example_table_metadata_v3: Dict[str, Any]) -> Table:
24722473
table_metadata = TableMetadataV3(**example_table_metadata_v3)

tests/table/test_init.py

Lines changed: 6 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@
8080
AssertRefSnapshotId,
8181
AssertTableUUID,
8282
RemovePartitionStatisticsUpdate,
83+
RemoveEncryptedKeyUpdate,
8384
RemovePropertiesUpdate,
8485
RemoveSchemasUpdate,
8586
RemoveSnapshotRefUpdate,
@@ -1424,12 +1425,7 @@ def test_set_partition_statistics_update(table_v2_with_statistics: Table) -> Non
14241425
(update,),
14251426

14261427
def test_add_encryption_key(table_v3: Table) -> None:
1427-
update = AddEncryptedKeyUpdate(
1428-
key=EncryptedKey(
1429-
key_id="test",
1430-
encrypted_key_metadata=base64.b64encode("hello".encode('utf-8'))
1431-
)
1432-
)
1428+
update = AddEncryptedKeyUpdate(key=EncryptedKey(key_id="test", encrypted_key_metadata=base64.b64encode(b"hello")))
14331429

14341430
expected = """
14351431
{
@@ -1497,13 +1493,9 @@ def test_remove_partition_statistics_update_with_invalid_snapshot_id(table_v2_wi
14971493

14981494
assert json.loads(add_metadata.encryption_keys[0].model_dump_json()) == json.loads(expected)
14991495

1496+
15001497
def test_remove_encryption_key(table_v3: Table) -> None:
1501-
update_add = AddEncryptedKeyUpdate(
1502-
key=EncryptedKey(
1503-
key_id="test",
1504-
encrypted_key_metadata=base64.b64encode("hello".encode('utf-8'))
1505-
)
1506-
)
1498+
update_add = AddEncryptedKeyUpdate(key=EncryptedKey(key_id="test", encrypted_key_metadata=base64.b64encode(b"hello")))
15071499
add_metadata = update_table_metadata(table_v3.metadata, (update_add,))
15081500
assert len(add_metadata.encryption_keys) == 1
15091501

@@ -1513,12 +1505,7 @@ def test_remove_encryption_key(table_v3: Table) -> None:
15131505

15141506

15151507
def test_remove_non_existent_encryption_key(table_v3: Table) -> None:
1516-
update_add = AddEncryptedKeyUpdate(
1517-
key=EncryptedKey(
1518-
key_id="test",
1519-
encrypted_key_metadata=base64.b64encode("hello".encode('utf-8'))
1520-
)
1521-
)
1508+
update_add = AddEncryptedKeyUpdate(key=EncryptedKey(key_id="test", encrypted_key_metadata=base64.b64encode(b"hello")))
15221509
add_metadata = update_table_metadata(table_v3.metadata, (update_add,))
15231510
assert len(add_metadata.encryption_keys) == 1
15241511

@@ -1528,11 +1515,6 @@ def test_remove_non_existent_encryption_key(table_v3: Table) -> None:
15281515

15291516

15301517
def test_add_remove_encryption_key_v2_table(table_v2: Table) -> None:
1531-
update_add = AddEncryptedKeyUpdate(
1532-
key=EncryptedKey(
1533-
key_id="test_v2",
1534-
encrypted_key_metadata=base64.b64encode("hello_v2".encode('utf-8'))
1535-
)
1536-
)
1518+
update_add = AddEncryptedKeyUpdate(key=EncryptedKey(key_id="test_v2", encrypted_key_metadata=base64.b64encode(b"hello_v2")))
15371519
with pytest.raises(ValueError, match=r"Cannot add encryption keys from Iceberg v1 or v2 table"):
15381520
update_table_metadata(table_v2.metadata, (update_add,))

0 commit comments

Comments
 (0)