1
1
from __future__ import annotations
2
2
3
3
import base64
4
- import json
5
4
import platform
6
5
import sys
6
+ from json import dumps , loads
7
7
from random import randint
8
8
from time import sleep
9
9
from typing import TYPE_CHECKING , Any , Mapping
@@ -95,7 +95,7 @@ def __init__(
95
95
py_version = platform .python_version ()
96
96
version = sys .modules ["auth0" ].__version__
97
97
98
- auth0_client = json . dumps (
98
+ auth0_client = dumps (
99
99
{
100
100
"name" : "auth0-python" ,
101
101
"version" : version ,
@@ -136,32 +136,41 @@ def MAX_REQUEST_RETRY_DELAY(self) -> int:
136
136
def MIN_REQUEST_RETRY_DELAY (self ) -> int :
137
137
return 100
138
138
139
- def get (
139
+ def _request (
140
140
self ,
141
+ method : str ,
141
142
url : str ,
142
143
params : dict [str , Any ] | None = None ,
144
+ data : RequestData | None = None ,
145
+ json : RequestData | None = None ,
143
146
headers : dict [str , str ] | None = None ,
147
+ files : dict [str , Any ] | None = None ,
144
148
) -> Any :
145
- request_headers = self .base_headers .copy ()
146
- request_headers .update (headers or {})
147
-
148
149
# Track the API request attempt number
149
150
attempt = 0
150
151
151
152
# Reset the metrics tracker
152
153
self ._metrics = {"retries" : 0 , "backoff" : []}
153
154
155
+ kwargs = {
156
+ k : v
157
+ for k , v in {
158
+ "params" : params ,
159
+ "json" : json ,
160
+ "data" : data ,
161
+ "headers" : headers ,
162
+ "files" : files ,
163
+ "timeout" : self .options .timeout ,
164
+ }.items ()
165
+ if v is not None
166
+ }
167
+
154
168
while True :
155
169
# Increment attempt number
156
170
attempt += 1
157
171
158
172
# Issue the request
159
- response = requests .get (
160
- url ,
161
- params = params ,
162
- headers = request_headers ,
163
- timeout = self .options .timeout ,
164
- )
173
+ response = requests .request (method , url , ** kwargs )
165
174
166
175
# If the response did not have a 429 header, or the attempt number is greater than the configured retries, break
167
176
if response .status_code != 429 or attempt > self ._retries :
@@ -177,6 +186,16 @@ def get(
177
186
# Return the final Response
178
187
return self ._process_response (response )
179
188
189
+ def get (
190
+ self ,
191
+ url : str ,
192
+ params : dict [str , Any ] | None = None ,
193
+ headers : dict [str , str ] | None = None ,
194
+ ) -> Any :
195
+ request_headers = self .base_headers .copy ()
196
+ request_headers .update (headers or {})
197
+ return self ._request ("GET" , url , params = params , headers = request_headers )
198
+
180
199
def post (
181
200
self ,
182
201
url : str ,
@@ -185,11 +204,7 @@ def post(
185
204
) -> Any :
186
205
request_headers = self .base_headers .copy ()
187
206
request_headers .update (headers or {})
188
-
189
- response = requests .post (
190
- url , json = data , headers = request_headers , timeout = self .options .timeout
191
- )
192
- return self ._process_response (response )
207
+ return self ._request ("POST" , url , json = data , headers = request_headers )
193
208
194
209
def file_post (
195
210
self ,
@@ -199,27 +214,15 @@ def file_post(
199
214
) -> Any :
200
215
headers = self .base_headers .copy ()
201
216
headers .pop ("Content-Type" , None )
202
-
203
- response = requests .post (
204
- url , data = data , files = files , headers = headers , timeout = self .options .timeout
205
- )
206
- return self ._process_response (response )
217
+ return self ._request ("POST" , url , data = data , files = files , headers = headers )
207
218
208
219
def patch (self , url : str , data : RequestData | None = None ) -> Any :
209
220
headers = self .base_headers .copy ()
210
-
211
- response = requests .patch (
212
- url , json = data , headers = headers , timeout = self .options .timeout
213
- )
214
- return self ._process_response (response )
221
+ return self ._request ("PATCH" , url , json = data , headers = headers )
215
222
216
223
def put (self , url : str , data : RequestData | None = None ) -> Any :
217
224
headers = self .base_headers .copy ()
218
-
219
- response = requests .put (
220
- url , json = data , headers = headers , timeout = self .options .timeout
221
- )
222
- return self ._process_response (response )
225
+ return self ._request ("PUT" , url , json = data , headers = headers )
223
226
224
227
def delete (
225
228
self ,
@@ -228,15 +231,7 @@ def delete(
228
231
data : RequestData | None = None ,
229
232
) -> Any :
230
233
headers = self .base_headers .copy ()
231
-
232
- response = requests .delete (
233
- url ,
234
- headers = headers ,
235
- params = params or {},
236
- json = data ,
237
- timeout = self .options .timeout ,
238
- )
239
- return self ._process_response (response )
234
+ return self ._request ("DELETE" , url , params = params , json = data , headers = headers )
240
235
241
236
def _calculate_wait (self , attempt : int ) -> int :
242
237
# Retry the request. Apply a exponential backoff for subsequent attempts, using this formula:
@@ -317,7 +312,7 @@ def _error_message(self):
317
312
318
313
class JsonResponse (Response ):
319
314
def __init__ (self , response : requests .Response | RequestsResponse ) -> None :
320
- content = json . loads (response .text )
315
+ content = loads (response .text )
321
316
super ().__init__ (response .status_code , content , response .headers )
322
317
323
318
def _error_code (self ) -> str :
0 commit comments