From db951e16a44cc980c7b6c11aba02fa64e01856bd Mon Sep 17 00:00:00 2001 From: Kairo de Araujo Date: Wed, 11 May 2022 08:42:56 +0200 Subject: [PATCH] Simplify Target Files Data Structure Remove unnecessary TargetsPayload data structure and use the TargetFile from the Python TUF (python-tuf) Metadata API. The TargetsPayload was used to add hashed targets. However, a similar data structure is provided by python-tuf. Signed-off-by: Kairo de Araujo --- tests/unit/tuf/test_repository.py | 12 ++++++------ tests/unit/tuf/test_services.py | 20 ++++++++------------ tests/unit/tuf/test_tasks.py | 10 ++++++++-- warehouse/tuf/repository.py | 15 ++------------- warehouse/tuf/services.py | 4 ++-- 5 files changed, 26 insertions(+), 35 deletions(-) diff --git a/tests/unit/tuf/test_repository.py b/tests/unit/tuf/test_repository.py index edbe0c1c556b..0d585e417a31 100644 --- a/tests/unit/tuf/test_repository.py +++ b/tests/unit/tuf/test_repository.py @@ -819,21 +819,21 @@ def test_add_targets(self, tuf_repository): payload = { "a0-07": [ - repository.TargetsPayload( - fileinfo={ + repository.TargetFile.from_dict( + { "hashes": {"blake2b-256": "sdfaslkajsdfkjhadsljkhfsdjkh"}, "length": 1024, "custom": {"backsigned": True}, }, - path="/sd/fa/lkajsdfkjhadsljkhfsdjkh.packagexv1.tar.gz", + "/sd/fa/lkajsdfkjhadsljkhfsdjkh.packagexv1.tar.gz", ), - repository.TargetsPayload( - fileinfo={ + repository.TargetFile.from_dict( + { "hashes": {"blake2b-256": "dlskjflkdjflsdjfsdfdfsdfsdfs"}, "length": 1025, "custom": {"backsigned": True}, }, - path="/sd/fa/dlskjflkdjflsdjfsdfdfsdfsdfs.packageyv1.tar.gz", + "/sd/fa/dlskjflkdjflsdjfsdfdfsdfsdfs.packageyv1.tar.gz", ), ] } diff --git a/tests/unit/tuf/test_services.py b/tests/unit/tuf/test_services.py index 01b4d24c12bd..cbc853a70860 100644 --- a/tests/unit/tuf/test_services.py +++ b/tests/unit/tuf/test_services.py @@ -25,7 +25,7 @@ from warehouse.tuf.constants import BIN_N_COUNT, Role from warehouse.tuf.hash_bins import HashBins from warehouse.tuf.interfaces import IKeyService, IRepositoryService, IStorageService -from warehouse.tuf.repository import TargetsPayload +from warehouse.tuf.repository import TargetFile class TestLocalKeyService: @@ -730,6 +730,11 @@ def test_add_hashed_targets(self, db_request, monkeypatch): lambda *a, **kw: fake_metadata_repository, ) + monkeypatch.setattr( + "warehouse.tuf.services.TargetFile.from_dict", + lambda *a, **kw: "target_dict", + ) + fake_hash_bins = pretend.stub( get_delegate=pretend.call_recorder(lambda filepath: "xxxx-yyyy") ) @@ -760,19 +765,10 @@ def test_add_hashed_targets(self, db_request, monkeypatch): assert result is None assert fake_metadata_repository.add_targets.calls == [ pretend.call( - { - "xxxx-yyyy": [ - TargetsPayload( - fileinfo=targets[0].get("info"), path=targets[0].get("path") - ), - TargetsPayload( - fileinfo=targets[1].get("info"), path=targets[1].get("path") - ), - ] - }, + {"xxxx-yyyy": ["target_dict", "target_dict"]}, "bin-n", ) - ] + ], fake_metadata_repository.add_targets.calls assert service.bump_snapshot.calls == [pretend.call("snapshot_metadata")] assert service._get_hash_bins.calls == [pretend.call()] assert fake_hash_bins.get_delegate.calls == [ diff --git a/tests/unit/tuf/test_tasks.py b/tests/unit/tuf/test_tasks.py index eacd454419eb..3467ed72c92b 100644 --- a/tests/unit/tuf/test_tasks.py +++ b/tests/unit/tuf/test_tasks.py @@ -14,7 +14,7 @@ from warehouse.tuf import tasks from warehouse.tuf.interfaces import IRepositoryService -from warehouse.tuf.repository import TargetsPayload +from warehouse.tuf.repository import TargetFile class TestBumpSnapshot: @@ -166,7 +166,13 @@ def __exit__(self, type, value, traceback): lambda *a, **kw: mocked_redis, ) - targets = TargetsPayload("fileinfo", "file/path") + fake_fileinfo = { + "hashes": {"blake2b-256": "dlskjflkdjflsdjfsdfdfsdfsdfs"}, + "length": 1025, + "custom": {"backsigned": True}, + } + + targets = TargetFile.from_dict(fake_fileinfo, "file/path") task = pretend.stub() tasks.add_hashed_targets(task, db_request, targets) diff --git a/warehouse/tuf/repository.py b/warehouse/tuf/repository.py index f6a5844d6e4a..f39d6c348ca3 100644 --- a/warehouse/tuf/repository.py +++ b/warehouse/tuf/repository.py @@ -60,16 +60,6 @@ class RolesPayload: path_hash_prefixes: Optional[List[str]] = None -@dataclass -class TargetsPayload: - """ - Container for target files info, suitable for targets metadata. - """ - - fileinfo: Dict[str, Any] - path: str - - class MetadataRepository: """ TUF metadata repository abstraction to create and maintain role metadata. @@ -438,7 +428,7 @@ def snapshot_update_meta( def add_targets( self, - payload: Dict[str, List[TargetsPayload]], + payload: Dict[str, List[TargetFile]], key_rolename: str, ) -> Metadata[Snapshot]: """ @@ -465,8 +455,7 @@ def add_targets( for rolename, targets in payload.items(): role_metadata = self.load_role(rolename) for target in targets: - target_file = TargetFile.from_dict(target.fileinfo, target.path) - role_metadata.signed.targets[target.path] = target_file + role_metadata.signed.targets[target.path] = target role_metadata.signed.version += 1 role_keys = self.key_backend.get(key_rolename) diff --git a/warehouse/tuf/services.py b/warehouse/tuf/services.py index 12c6e8b4ee59..9e47f319b65b 100644 --- a/warehouse/tuf/services.py +++ b/warehouse/tuf/services.py @@ -33,7 +33,7 @@ TOP_LEVEL_ROLE_NAMES, MetadataRepository, RolesPayload, - TargetsPayload, + TargetFile, ) @@ -376,7 +376,7 @@ def add_hashed_targets(self, targets): fileinfo = target.get("info") filepath = target.get("path") delegated_role_bin_name = hash_bins.get_delegate(filepath) - target_file = TargetsPayload(fileinfo, filepath) + target_file = TargetFile.from_dict(fileinfo, filepath) if targets_payload.get(delegated_role_bin_name) is None: targets_payload[delegated_role_bin_name] = list()