@@ -30,8 +30,7 @@ def prepare(self):
3030 # fetch/set up Ed-Fi API URLs
3131 try :
3232 self .logger .debug ("fetching base_url..." )
33- api_base = requests .get (self .config ["base_url" ],
34- verify = self .lightbeam .config ["connection" ]["verify_ssl" ])
33+ api_base = self .get_with_protocol_fallback (self .config ["base_url" ], 'base_url' )
3534 except Exception as e :
3635 self .logger .critical ("could not connect to {0} ({1})" .format (self .config ["base_url" ], str (e )))
3736
@@ -153,8 +152,7 @@ def get_data_url(self):
153152 def get_sorted_endpoints (self ):
154153 self .logger .debug ("fetching resource dependencies..." )
155154 try :
156- response = requests .get (self .config ["dependencies_url" ],
157- verify = self .lightbeam .config ["connection" ]["verify_ssl" ])
155+ response = self .get_with_protocol_fallback (self .config ["dependencies_url" ], 'dependencies_url' )
158156 if response .status_code not in [ 200 , 201 ]:
159157 raise Exception ("Dependencies URL returned status {0} ({1})" .format (response .status_code , (response .content [:75 ] + "..." ) if len (response .content )> 75 else response .content ))
160158 data = response .json ()
@@ -191,8 +189,7 @@ def load_swagger_docs(self):
191189 # grab Descriptors and Resources swagger URLs
192190 try :
193191 self .logger .debug ("fetching swagger docs..." )
194- response = requests .get (self .config ["open_api_metadata_url" ],
195- verify = self .lightbeam .config ["connection" ]["verify_ssl" ])
192+ response = self .get_with_protocol_fallback (self .config ["open_api_metadata_url" ], 'open_api_metadata_url' )
196193 if not response .ok :
197194 raise Exception ("OpenAPI metadata URL returned status {0} ({1})" .format (response .status_code , (response .content [:75 ] + "..." ) if len (response .content )> 75 else response .content ))
198195 openapi = response .json ()
@@ -233,9 +230,7 @@ def load_swagger_docs(self):
233230 else :
234231 self .logger .debug (f"fetching { endpoint_type } swagger doc..." )
235232 try :
236- response = requests .get (swagger_url ,
237- verify = self .lightbeam .config ["connection" ]["verify_ssl" ]
238- )
233+ response = self .get_with_protocol_fallback (self .config [endpoint_type ], endpoint_type )
239234 if not response .ok :
240235 raise Exception ("OpenAPI metadata URL returned status {0} ({1})" .format (response .status_code , (response .content [:75 ] + "..." ) if len (response .content )> 75 else response .content ))
241236 swagger = response .json ()
@@ -375,3 +370,14 @@ def get_identity_params_from_swagger(self, swagger, definition, prefix=""):
375370 elif "type" in schema ["properties" ][prop ].keys () and schema ["properties" ][prop ]["type" ]!= "array" and "x-Ed-Fi-isIdentity" in schema ["properties" ][prop ].keys ():
376371 params [prop ] = prefix + prop
377372 return params
373+
374+ def get_with_protocol_fallback (self , url , url_type ):
375+ self .logger .debug (f"fetching { url_type } ..." )
376+ try :
377+ return requests .get (url , verify = self .lightbeam .config ["connection" ]["verify_ssl" ])
378+ except Exception as e :
379+ try :
380+ swapped_url = url .replace ("http://" , "https://" ) if "http://" in url else url .replace ("https://" , "http://" )
381+ return requests .get (swapped_url , verify = self .lightbeam .config ["connection" ]["verify_ssl" ])
382+ except Exception as e :
383+ self .logger .critical (f"could not reach { url_type } { url } ({ str (e )} )" )
0 commit comments