4646import logging
4747import os
4848import tempfile
49+ from collections .abc import Iterator
4950from dataclasses import dataclass , field
50- from typing import Dict , Iterator , List , Optional , Tuple
51+ from typing import Optional
5152from urllib import parse
5253
5354import securesystemslib .hash as sslib_hash
8081class FetchTracker :
8182 """Fetcher counter for metadata and targets."""
8283
83- metadata : List [ Tuple [str , Optional [int ]]] = field (default_factory = list )
84- targets : List [ Tuple [str , Optional [str ]]] = field (default_factory = list )
84+ metadata : list [ tuple [str , Optional [int ]]] = field (default_factory = list )
85+ targets : list [ tuple [str , Optional [str ]]] = field (default_factory = list )
8586
8687
8788@dataclass
@@ -96,18 +97,18 @@ class RepositorySimulator(FetcherInterface):
9697 """Simulates a repository that can be used for testing."""
9798
9899 def __init__ (self ) -> None :
99- self .md_delegates : Dict [str , Metadata [Targets ]] = {}
100+ self .md_delegates : dict [str , Metadata [Targets ]] = {}
100101
101102 # other metadata is signed on-demand (when fetched) but roots must be
102103 # explicitly published with publish_root() which maintains this list
103- self .signed_roots : List [bytes ] = []
104+ self .signed_roots : list [bytes ] = []
104105
105106 # signers are used on-demand at fetch time to sign metadata
106107 # keys are roles, values are dicts of {keyid: signer}
107- self .signers : Dict [str , Dict [str , Signer ]] = {}
108+ self .signers : dict [str , dict [str , Signer ]] = {}
108109
109110 # target downloads are served from this dict
110- self .target_files : Dict [str , RepositoryTarget ] = {}
111+ self .target_files : dict [str , RepositoryTarget ] = {}
111112
112113 # Whether to compute hashes and length for meta in snapshot/timestamp
113114 self .compute_metafile_hashes_length = False
@@ -143,7 +144,7 @@ def snapshot(self) -> Snapshot:
143144 def targets (self ) -> Targets :
144145 return self .md_targets .signed
145146
146- def all_targets (self ) -> Iterator [Tuple [str , Targets ]]:
147+ def all_targets (self ) -> Iterator [tuple [str , Targets ]]:
147148 """Yield role name and signed portion of targets one by one."""
148149 yield Targets .type , self .md_targets .signed
149150 for role , md in self .md_delegates .items ():
@@ -287,7 +288,7 @@ def fetch_metadata(self, role: str, version: Optional[int] = None) -> bytes:
287288
288289 def _compute_hashes_and_length (
289290 self , role : str
290- ) -> Tuple [ Dict [str , str ], int ]:
291+ ) -> tuple [ dict [str , str ], int ]:
291292 data = self .fetch_metadata (role )
292293 digest_object = sslib_hash .digest (sslib_hash .DEFAULT_HASH_ALGORITHM )
293294 digest_object .update (data )
0 commit comments