2626import logging
2727import tempfile
2828import timeit
29+ from typing import IO
2930from urllib import parse
3031
3132from securesystemslib import formats as sslib_formats
3233
33- import tuf
34- from tuf import exceptions , formats
34+ from tuf import exceptions , formats , settings
35+ from tuf . ngclient import FetcherInterface
3536
3637# See 'log.py' to learn how logging is handled in TUF.
3738logger = logging .getLogger (__name__ )
3839
3940
40- def download_file (url , required_length , fetcher , strict_required_length = True ):
41+ def download_file (
42+ url : str ,
43+ required_length : int ,
44+ fetcher : FetcherInterface ,
45+ strict_required_length : bool = True ,
46+ ) -> IO [bytes ]:
4147 """
4248 <Purpose>
4349 Given the url and length of the desired file, this function opens a
@@ -92,7 +98,7 @@ def download_file(url, required_length, fetcher, strict_required_length=True):
9298 # the downloaded file.
9399 temp_file = tempfile .TemporaryFile () # pylint: disable=consider-using-with
94100
95- average_download_speed = 0
101+ average_download_speed = 0.0
96102 number_of_bytes_received = 0
97103
98104 try :
@@ -110,7 +116,7 @@ def download_file(url, required_length, fetcher, strict_required_length=True):
110116 number_of_bytes_received / seconds_spent_receiving
111117 )
112118
113- if average_download_speed < tuf . settings .MIN_AVERAGE_DOWNLOAD_SPEED :
119+ if average_download_speed < settings .MIN_AVERAGE_DOWNLOAD_SPEED :
114120 logger .debug (
115121 "The average download speed dropped below the minimum"
116122 " average download speed set in tuf.settings.py."
@@ -142,7 +148,12 @@ def download_file(url, required_length, fetcher, strict_required_length=True):
142148 return temp_file
143149
144150
145- def download_bytes (url , required_length , fetcher , strict_required_length = True ):
151+ def download_bytes (
152+ url : str ,
153+ required_length : int ,
154+ fetcher : FetcherInterface ,
155+ strict_required_length : bool = True ,
156+ ) -> bytes :
146157 """Download bytes from given url
147158
148159 Returns the downloaded bytes, otherwise like download_file()
@@ -154,11 +165,11 @@ def download_bytes(url, required_length, fetcher, strict_required_length=True):
154165
155166
156167def _check_downloaded_length (
157- total_downloaded ,
158- required_length ,
159- strict_required_length = True ,
160- average_download_speed = None ,
161- ):
168+ total_downloaded : int ,
169+ required_length : int ,
170+ strict_required_length : bool ,
171+ average_download_speed : float ,
172+ ) -> None :
162173 """
163174 <Purpose>
164175 A helper function which checks whether the total number of downloaded
@@ -216,7 +227,7 @@ def _check_downloaded_length(
216227
217228 # If the average download speed is below a certain threshold, we
218229 # flag this as a possible slow-retrieval attack.
219- if average_download_speed < tuf . settings .MIN_AVERAGE_DOWNLOAD_SPEED :
230+ if average_download_speed < settings .MIN_AVERAGE_DOWNLOAD_SPEED :
220231 raise exceptions .SlowRetrievalError
221232
222233 raise exceptions .DownloadLengthMismatchError (
@@ -228,7 +239,7 @@ def _check_downloaded_length(
228239 # download the Timestamp or Root metadata, for which we have no
229240 # signed metadata; so, we must guess a reasonable required_length
230241 # for it.
231- if average_download_speed < tuf . settings .MIN_AVERAGE_DOWNLOAD_SPEED :
242+ if average_download_speed < settings .MIN_AVERAGE_DOWNLOAD_SPEED :
232243 raise exceptions .SlowRetrievalError
233244
234245 logger .debug (
0 commit comments