Skip to content

Commit 92f97a4

Browse files
committed
tuf.api: implement metadata.Snapshot
Signed-off-by: Joshua Lock <[email protected]>
1 parent 5ef60ca commit 92f97a4

File tree

1 file changed

+18
-4
lines changed

1 file changed

+18
-4
lines changed

tuf/api/metadata.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from securesystemslib.formats import encode_canonical
2020
from securesystemslib.keys import create_signature, verify_signature
2121
from securesystemslib.util import load_json_file
22+
import tuf.formats
2223
from tuf.repository_lib import (
2324
_get_written_metadata,
2425
_strip_version_number,
@@ -140,15 +141,28 @@ def update(self, rolename: str, version: int, length: int, hashes: JsonDict):
140141

141142
class Snapshot(Metadata):
142143
def __init__(self, consistent_snapshot: bool = True, expiration: relativedelta = relativedelta(days=1), keyring: Keyring = None, version: int = 1):
143-
super().__init__(consistent_snapshot, expiration, relativedelta, keyring, version)
144+
super().__init__(consistent_snapshot, expiration, keyring, version)
145+
self.targets_fileinfo = {}
146+
147+
def read_from_json(self, filename: str) -> None:
148+
super().read_from_json(filename)
149+
meta = self.signed['meta']
150+
for target_role in meta:
151+
version = meta[target_role]['version']
152+
length = meta[target_role].get('length')
153+
hashes = meta[target_role].get('hashes')
154+
self.targets_fileinfo[target_role] = tuf.formats.make_metadata_fileinfo(version, length, hashes)
144155

145-
# FIXME
146156
def signable(self):
147-
return generate_snapshot_metadata()
157+
# TODO: probably want to generalise this, a @property.getter in Metadata?
158+
expires = self.expiration.replace(tzinfo=None).isoformat()+'Z'
159+
return tuf.formats.build_dict_conforming_to_schema(
160+
tuf.formats.SNAPSHOT_SCHEMA, version=self.version,
161+
expires=expires, meta=self.targets_fileinfo)
148162

149163
# Add or update metadata about the targets metadata.
150164
def update(self, rolename: str, version: int, length: Optional[int] = None, hashes: Optional[JsonDict] = None):
151-
raise NotImplementedError()
165+
self.targets_fileinfo[f'{rolename}.json'] = tuf.formats.make_metadata_fileinfo(version, length, hashes)
152166

153167
class Targets(Metadata):
154168
def __init__(self, consistent_snapshot: bool = True, expiration: relativedelta = relativedelta(days=1), keyring: Keyring = None, version: int = 1):

0 commit comments

Comments
 (0)