Skip to content

Commit 4f57ae4

Browse files
committed
Denote expected type of Metadata.signed
By explicitly denoting the expected type of Metadata.signed we help mypy understand our intentions and correctly figure out types. This is entirely a typing feature and has no runtime effect. Modify the return type of Metadata.from_dict to match the other factory methods (from_*). Signed-off-by: Teodora Sechkova <[email protected]>
1 parent cd096ba commit 4f57ae4

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

tuf/api/metadata.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ def __init__(self, signed: T, signatures: "OrderedDict[str, Signature]"):
9898
self.signatures = signatures
9999

100100
@classmethod
101-
def from_dict(cls, metadata: Dict[str, Any]) -> "Metadata":
101+
def from_dict(cls, metadata: Dict[str, Any]) -> "Metadata[T]":
102102
"""Creates Metadata object from its dict representation.
103103
104104
Arguments:

tuf/ngclient/_internal/trusted_metadata_set.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
from typing import Dict, Iterator, Optional
6767

6868
from tuf import exceptions
69-
from tuf.api.metadata import Metadata
69+
from tuf.api.metadata import Metadata, Root, Snapshot, Targets, Timestamp
7070
from tuf.api.serialization import DeserializationError
7171

7272
logger = logging.getLogger(__name__)
@@ -114,22 +114,22 @@ def __iter__(self) -> Iterator[Metadata]:
114114

115115
# Helper properties for top level metadata
116116
@property
117-
def root(self) -> Metadata:
117+
def root(self) -> Metadata[Root]:
118118
"""Current root Metadata"""
119119
return self._trusted_set["root"]
120120

121121
@property
122-
def timestamp(self) -> Optional[Metadata]:
122+
def timestamp(self) -> Optional[Metadata[Timestamp]]:
123123
"""Current timestamp Metadata or None"""
124124
return self._trusted_set.get("timestamp")
125125

126126
@property
127-
def snapshot(self) -> Optional[Metadata]:
127+
def snapshot(self) -> Optional[Metadata[Snapshot]]:
128128
"""Current snapshot Metadata or None"""
129129
return self._trusted_set.get("snapshot")
130130

131131
@property
132-
def targets(self) -> Optional[Metadata]:
132+
def targets(self) -> Optional[Metadata[Targets]]:
133133
"""Current targets Metadata or None"""
134134
return self._trusted_set.get("targets")
135135

@@ -152,7 +152,7 @@ def update_root(self, data: bytes) -> None:
152152
logger.debug("Updating root")
153153

154154
try:
155-
new_root = Metadata.from_bytes(data)
155+
new_root = Metadata[Root].from_bytes(data)
156156
except DeserializationError as e:
157157
raise exceptions.RepositoryError("Failed to load root") from e
158158

@@ -199,7 +199,7 @@ def update_timestamp(self, data: bytes) -> None:
199199
# timestamp/snapshot can not yet be loaded at this point
200200

201201
try:
202-
new_timestamp = Metadata.from_bytes(data)
202+
new_timestamp = Metadata[Timestamp].from_bytes(data)
203203
except DeserializationError as e:
204204
raise exceptions.RepositoryError("Failed to load timestamp") from e
205205

@@ -276,7 +276,7 @@ def update_snapshot(self, data: bytes) -> None:
276276
) from e
277277

278278
try:
279-
new_snapshot = Metadata.from_bytes(data)
279+
new_snapshot = Metadata[Snapshot].from_bytes(data)
280280
except DeserializationError as e:
281281
raise exceptions.RepositoryError("Failed to load snapshot") from e
282282

@@ -387,7 +387,7 @@ def update_delegated_targets(
387387
) from e
388388

389389
try:
390-
new_delegate = Metadata.from_bytes(data)
390+
new_delegate = Metadata[Targets].from_bytes(data)
391391
except DeserializationError as e:
392392
raise exceptions.RepositoryError("Failed to load snapshot") from e
393393

0 commit comments

Comments
 (0)