Skip to content

Commit 5e1dfb7

Browse files
committed
it works
1 parent 870c76e commit 5e1dfb7

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
@@ -89,14 +89,17 @@ class UpgradeFormatVersionUpdate(IcebergBaseModel):
8989
action: Literal["upgrade-format-version"] = Field(default="upgrade-format-version")
9090
format_version: int = Field(alias="format-version")
9191

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

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

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

608611
return base_metadata.model_copy(update={"statistics": statistics})
609612

613+
610614
@_apply_table_update.register(AddEncryptedKeyUpdate)
611615
def _(update: AddEncryptedKeyUpdate, base_metadata: TableMetadata, context: _TableMetadataUpdateContext) -> TableMetadata:
612616
context.add_update(update)

tests/conftest.py

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

2383+
23832384
@pytest.fixture
23842385
def table_v3(example_table_metadata_v3: Dict[str, Any]) -> Table:
23852386
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
RemoveSnapshotRefUpdate,
8586
RemoveSnapshotsUpdate,
@@ -1384,12 +1385,7 @@ def test_set_partition_statistics_update(table_v2_with_statistics: Table) -> Non
13841385
(update,),
13851386

13861387
def test_add_encryption_key(table_v3: Table) -> None:
1387-
update = AddEncryptedKeyUpdate(
1388-
key=EncryptedKey(
1389-
key_id="test",
1390-
encrypted_key_metadata=base64.b64encode("hello".encode('utf-8'))
1391-
)
1392-
)
1388+
update = AddEncryptedKeyUpdate(key=EncryptedKey(key_id="test", encrypted_key_metadata=base64.b64encode(b"hello")))
13931389

13941390
expected = """
13951391
{
@@ -1457,13 +1453,9 @@ def test_remove_partition_statistics_update_with_invalid_snapshot_id(table_v2_wi
14571453

14581454
assert json.loads(add_metadata.encryption_keys[0].model_dump_json()) == json.loads(expected)
14591455

1456+
14601457
def test_remove_encryption_key(table_v3: Table) -> None:
1461-
update_add = AddEncryptedKeyUpdate(
1462-
key=EncryptedKey(
1463-
key_id="test",
1464-
encrypted_key_metadata=base64.b64encode("hello".encode('utf-8'))
1465-
)
1466-
)
1458+
update_add = AddEncryptedKeyUpdate(key=EncryptedKey(key_id="test", encrypted_key_metadata=base64.b64encode(b"hello")))
14671459
add_metadata = update_table_metadata(table_v3.metadata, (update_add,))
14681460
assert len(add_metadata.encryption_keys) == 1
14691461

@@ -1473,12 +1465,7 @@ def test_remove_encryption_key(table_v3: Table) -> None:
14731465

14741466

14751467
def test_remove_non_existent_encryption_key(table_v3: Table) -> None:
1476-
update_add = AddEncryptedKeyUpdate(
1477-
key=EncryptedKey(
1478-
key_id="test",
1479-
encrypted_key_metadata=base64.b64encode("hello".encode('utf-8'))
1480-
)
1481-
)
1468+
update_add = AddEncryptedKeyUpdate(key=EncryptedKey(key_id="test", encrypted_key_metadata=base64.b64encode(b"hello")))
14821469
add_metadata = update_table_metadata(table_v3.metadata, (update_add,))
14831470
assert len(add_metadata.encryption_keys) == 1
14841471

@@ -1488,11 +1475,6 @@ def test_remove_non_existent_encryption_key(table_v3: Table) -> None:
14881475

14891476

14901477
def test_add_remove_encryption_key_v2_table(table_v2: Table) -> None:
1491-
update_add = AddEncryptedKeyUpdate(
1492-
key=EncryptedKey(
1493-
key_id="test_v2",
1494-
encrypted_key_metadata=base64.b64encode("hello_v2".encode('utf-8'))
1495-
)
1496-
)
1478+
update_add = AddEncryptedKeyUpdate(key=EncryptedKey(key_id="test_v2", encrypted_key_metadata=base64.b64encode(b"hello_v2")))
14971479
with pytest.raises(ValueError, match=r"Cannot add encryption keys from Iceberg v1 or v2 table"):
14981480
update_table_metadata(table_v2.metadata, (update_add,))

0 commit comments

Comments
 (0)