@@ -53,7 +53,7 @@ class ScanossApi(ScanossBase):
5353 def __init__ (self , scan_type : str = None , sbom_path : str = None , scan_format : str = None , flags : str = None ,
5454 url : str = None , api_key : str = None , debug : bool = False , trace : bool = False , quiet : bool = False ,
5555 timeout : int = 120 , ver_details : str = None , ignore_cert_errors : bool = False ,
56- proxy : str = None , ca_cert : str = None , pac : PACFile = None ):
56+ proxy : str = None , ca_cert : str = None , pac : PACFile = None , retry : int = 5 ):
5757 """
5858 Initialise the SCANOSS API
5959 :param scan_type: Scan type (default identify)
@@ -82,6 +82,7 @@ def __init__(self, scan_type: str = None, sbom_path: str = None, scan_format: st
8282 self .sbom_path = sbom_path
8383 self .flags = flags
8484 self .timeout = timeout if timeout > 5 else 120
85+ self .retry_limit = retry if retry >= 0 else 5
8586 self .ignore_cert_errors = ignore_cert_errors
8687 self .headers = {}
8788 if ver_details :
@@ -149,7 +150,7 @@ def scan(self, wfp: str, context: str = None, scan_id: int = None):
149150 headers ['x-request-id' ] = request_id # send a unique request id for each post
150151 r = None
151152 retry = 0 # Add some retry logic to cater for timeouts, etc.
152- while retry <= 5 :
153+ while retry <= self . retry_limit :
153154 retry += 1
154155 try :
155156 r = None
@@ -163,7 +164,7 @@ def scan(self, wfp: str, context: str = None, scan_id: int = None):
163164 self .print_stderr (f'ERROR: Exception ({ e .__class__ .__name__ } ) POSTing data - { e } .' )
164165 raise Exception (f"ERROR: The SCANOSS API request failed for { self .url } " ) from e
165166 except (requests .exceptions .Timeout , requests .exceptions .ConnectionError ) as e :
166- if retry > 5 : # Timed out 5 or more times, fail
167+ if retry > self . retry_limit : # Timed out retry_limit or more times, fail
167168 self .print_stderr (f'ERROR: { e .__class__ .__name__ } POSTing data ({ request_id } ) - { e } : { scan_files } ' )
168169 raise Exception (f"ERROR: The SCANOSS API request timed out ({ e .__class__ .__name__ } ) for"
169170 f" { self .url } " ) from e
@@ -176,7 +177,7 @@ def scan(self, wfp: str, context: str = None, scan_id: int = None):
176177 raise Exception (f"ERROR: The SCANOSS API request failed for { self .url } " ) from e
177178 else :
178179 if r is None :
179- if retry > 5 : # No response 5 or more times, fail
180+ if retry > self . retry_limit : # No response retry_limit or more times, fail
180181 self .save_bad_req_wfp (scan_files , request_id , scan_id )
181182 raise Exception (f"ERROR: The SCANOSS API request ({ request_id } ) response object is empty "
182183 f"for { self .url } " )
@@ -190,7 +191,7 @@ def scan(self, wfp: str, context: str = None, scan_id: int = None):
190191 raise Exception (f"ERROR: { r .status_code } - The SCANOSS API request ({ request_id } ) rejected "
191192 f"for { self .url } due to service limits being exceeded." )
192193 elif r .status_code >= 400 :
193- if retry > 5 : # No response 5 or more times, fail
194+ if retry > self . retry_limit : # No response retry_limit or more times, fail
194195 self .save_bad_req_wfp (scan_files , request_id , scan_id )
195196 raise Exception (
196197 f"ERROR: The SCANOSS API returned the following error: HTTP { r .status_code } , "
0 commit comments