33# license that can be found in the LICENSE file.
44
55from . import version
6- from .exceptions import ConnectionException
6+ from .exceptions import ConnectionException , DeepLException
77import http
88import random
99import requests
@@ -67,17 +67,32 @@ def close(self):
6767 self ._session .close ()
6868
6969 def request_with_backoff (
70- self , method : str , url : str , data : Optional [dict ], ** kwargs
70+ self ,
71+ method : str ,
72+ url : str ,
73+ data : Optional [dict ],
74+ stream : bool = False ,
75+ ** kwargs ,
7176 ) -> Tuple [int , Union [str , requests .Response ]]:
7277 """Makes API request, retrying if necessary, and returns response.
7378
7479 Return and exceptions are the same as function request()."""
7580 backoff = _BackoffTimer ()
81+
82+ try :
83+ request = requests .Request (
84+ method , url , data = data , ** kwargs
85+ ).prepare ()
86+ except Exception as e :
87+ raise DeepLException (
88+ f"Error occurred while preparing request: { e } "
89+ ) from e
90+
7691 while True :
7792 response : Optional [Tuple [int , Union [str , requests .Response ]]]
7893 try :
79- response = self .request (
80- method , url , data , timeout = backoff .get_timeout (), ** kwargs
94+ response = self ._internal_request (
95+ request , stream = stream , timeout = backoff .get_timeout ()
8196 )
8297 exception = None
8398 except Exception as e :
@@ -108,7 +123,6 @@ def request(
108123 method : str ,
109124 url : str ,
110125 data : Optional [dict ],
111- timeout : float ,
112126 stream : bool = False ,
113127 ** kwargs ,
114128 ) -> Tuple [int , Union [str , requests .Response ]]:
@@ -118,22 +132,31 @@ def request(
118132 stream is False) or response (if stream is True).
119133
120134 If no response is received will raise ConnectionException."""
135+
121136 try :
137+ request = requests .Request (
138+ method , url , data = data , ** kwargs
139+ ).prepare ()
140+ except Exception as e :
141+ raise DeepLException (
142+ f"Error occurred while preparing request: { e } "
143+ ) from e
144+ return self ._internal_request (request , stream , stream = stream )
145+
146+ def _internal_request (
147+ self ,
148+ request : requests .PreparedRequest ,
149+ stream : bool ,
150+ timeout : float = min_connection_timeout ,
151+ ** kwargs ,
152+ ) -> Tuple [int , Union [str , requests .Response ]]:
153+ try :
154+ response = self ._session .send (
155+ request , stream = stream , timeout = timeout , ** kwargs
156+ )
122157 if stream :
123- response = self ._session .request (
124- method ,
125- url ,
126- data = data ,
127- timeout = timeout ,
128- stream = True ,
129- ** kwargs ,
130- )
131158 return response .status_code , response
132-
133159 else :
134- response = self ._session .request (
135- method , url , data = data , timeout = timeout , ** kwargs
136- )
137160 try :
138161 response .encoding = "UTF-8"
139162 return response .status_code , response .text
0 commit comments