Skip to content

Commit

Permalink
Simplify Target Files Data Structure
Browse files Browse the repository at this point in the history
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 <kdearaujo@vmware.com>
  • Loading branch information
Kairo de Araujo committed Jun 25, 2022
1 parent d2212da commit db951e1
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 35 deletions.
12 changes: 6 additions & 6 deletions tests/unit/tuf/test_repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
),
]
}
Expand Down
20 changes: 8 additions & 12 deletions tests/unit/tuf/test_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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")
)
Expand Down Expand Up @@ -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 == [
Expand Down
10 changes: 8 additions & 2 deletions tests/unit/tuf/test_tasks.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down Expand Up @@ -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)
Expand Down
15 changes: 2 additions & 13 deletions warehouse/tuf/repository.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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]:
"""
Expand All @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions warehouse/tuf/services.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
TOP_LEVEL_ROLE_NAMES,
MetadataRepository,
RolesPayload,
TargetsPayload,
TargetFile,
)


Expand Down Expand Up @@ -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()

Expand Down

0 comments on commit db951e1

Please sign in to comment.