@@ -892,6 +892,14 @@ def _request_exec_wrapper(
892892        full_url  =  retry_ctx .add_retry_params (full_url )
893893        full_url  =  SnowflakeRestful .add_request_guid (full_url )
894894        is_fetch_query_status  =  kwargs .pop ("is_fetch_query_status" , False )
895+         # raise_raw_http_failure is not a public parameter and may change in the future 
896+         # it enables raising raw http errors that are not handled by 
897+         # connector, connector handles the following http error: 
898+         #  1. FORBIDDEN error when trying to login 
899+         #  2. retryable http code defined in method is_retryable_http_code 
900+         #  3. UNAUTHORIZED error when using okta authentication 
901+         # raise_raw_http_failure doesn't work for the 3 mentioned cases. 
902+         raise_raw_http_failure  =  kwargs .pop ("raise_raw_http_failure" , False )
895903        try :
896904            return_object  =  self ._request_exec (
897905                session = session ,
@@ -900,6 +908,7 @@ def _request_exec_wrapper(
900908                headers = headers ,
901909                data = data ,
902910                token = token ,
911+                 raise_raw_http_failure = raise_raw_http_failure ,
903912                ** kwargs ,
904913            )
905914            if  return_object  is  not   None :
@@ -967,7 +976,9 @@ def _request_exec_wrapper(
967976                    )
968977            return  None   # retry 
969978        except  Exception  as  e :
970-             if  not  no_retry :
979+             if  (
980+                 raise_raw_http_failure  and  isinstance (e , requests .exceptions .HTTPError )
981+             ) or  not  no_retry :
971982                raise  e 
972983            logger .debug ("Ignored error" , exc_info = True )
973984            return  {}
@@ -1036,6 +1047,7 @@ def _request_exec(
10361047        binary_data_handler = None ,
10371048        socket_timeout : int  |  None  =  None ,
10381049        is_okta_authentication : bool  =  False ,
1050+         raise_raw_http_failure : bool  =  False ,
10391051    ):
10401052        if  socket_timeout  is  None :
10411053            if  self ._connection .socket_timeout  is  not   None :
@@ -1113,6 +1125,8 @@ def _request_exec(
11131125                    raise_okta_unauthorized_error (self ._connection , raw_ret )
11141126                    return  None   # required for tests 
11151127                else :
1128+                     if  raise_raw_http_failure :
1129+                         raw_ret .raise_for_status ()
11161130                    raise_failed_request_error (
11171131                        self ._connection , full_url , method , raw_ret 
11181132                    )
0 commit comments