Skip to content

Commit f49e661

Browse files
committed
feat: add retry_strategy as optional parameter to all sumo_client HTTP methods.
1 parent 0e10349 commit f49e661

1 file changed

Lines changed: 58 additions & 17 deletions

File tree

src/sumo/wrapper/sumo_client.py

Lines changed: 58 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,12 @@ def _handle_invalid_shared_key(self):
219219
)
220220

221221
@raise_for_status
222-
def get(self, path: str, params: Optional[Dict] = None) -> httpx.Response:
222+
def get(
223+
self,
224+
path: str,
225+
params: Optional[Dict] = None,
226+
retry_strategy: Optional[RetryStrategy] = None,
227+
) -> httpx.Response:
223228
"""Performs a GET-request to the Sumo API.
224229
225230
Args:
@@ -277,8 +282,9 @@ def _get():
277282
timeout=self._timeout,
278283
)
279284

280-
retryer = self._retry_strategy.make_retryer()
281-
285+
retryer = (
286+
retry_strategy if retry_strategy else self._retry_strategy
287+
).make_retryer()
282288
return retryer(_get)
283289

284290
@raise_for_status
@@ -288,6 +294,7 @@ def post(
288294
blob: Optional[bytes] = None,
289295
json: Optional[dict] = None,
290296
params: Optional[dict] = None,
297+
retry_strategy: Optional[RetryStrategy] = None,
291298
) -> httpx.Response:
292299
"""Performs a POST-request to the Sumo API.
293300
@@ -352,7 +359,9 @@ def _post():
352359
timeout=self._timeout,
353360
)
354361

355-
retryer = self._retry_strategy.make_retryer()
362+
retryer = (
363+
retry_strategy if retry_strategy else self._retry_strategy
364+
).make_retryer()
356365

357366
return retryer(_post)
358367

@@ -362,6 +371,7 @@ def put(
362371
path: str,
363372
blob: Optional[bytes] = None,
364373
json: Optional[dict] = None,
374+
retry_strategy: Optional[RetryStrategy] = None,
365375
) -> httpx.Response:
366376
"""Performs a PUT-request to the Sumo API.
367377
@@ -401,13 +411,18 @@ def _put():
401411
timeout=self._timeout,
402412
)
403413

404-
retryer = self._retry_strategy.make_retryer()
414+
retryer = (
415+
retry_strategy if retry_strategy else self._retry_strategy
416+
).make_retryer()
405417

406418
return retryer(_put)
407419

408420
@raise_for_status
409421
def delete(
410-
self, path: str, params: Optional[dict] = None
422+
self,
423+
path: str,
424+
params: Optional[dict] = None,
425+
retry_strategy: Optional[RetryStrategy] = None,
411426
) -> httpx.Response:
412427
"""Performs a DELETE-request to the Sumo API.
413428
@@ -441,7 +456,9 @@ def _delete():
441456
timeout=self._timeout,
442457
)
443458

444-
retryer = self._retry_strategy.make_retryer()
459+
retryer = (
460+
retry_strategy if retry_strategy else self._retry_strategy
461+
).make_retryer()
445462

446463
return retryer(_delete)
447464

@@ -460,7 +477,10 @@ def _get_retry_details(self, response_in) -> Tuple[str, int]:
460477
return location, retry_after
461478

462479
def poll(
463-
self, response_in: httpx.Response, timeout=None
480+
self,
481+
response_in: httpx.Response,
482+
timeout=None,
483+
retry_strategy: Optional[RetryStrategy] = None,
464484
) -> httpx.Response:
465485
"""Poll a specific endpoint until a result is obtained.
466486
@@ -474,7 +494,7 @@ def poll(
474494
expiry = time.time() + timeout if timeout is not None else None
475495
while True:
476496
time.sleep(retry_after)
477-
response = self.get(location)
497+
response = self.get(location, retry_strategy=retry_strategy)
478498
if response.status_code != 202:
479499
return response
480500
if expiry is not None and time.time() > expiry:
@@ -539,7 +559,10 @@ def client_for_case(self, case_uuid, interactive=False):
539559

540560
@raise_for_status_async
541561
async def get_async(
542-
self, path: str, params: Optional[dict] = None
562+
self,
563+
path: str,
564+
params: Optional[dict] = None,
565+
retry_strategy: Optional[RetryStrategy] = None,
543566
) -> httpx.Response:
544567
"""Performs an async GET-request to the Sumo API.
545568
@@ -598,7 +621,9 @@ async def _get():
598621
timeout=self._timeout,
599622
)
600623

601-
retryer = self._retry_strategy.make_retryer_async()
624+
retryer = (
625+
retry_strategy if retry_strategy else self._retry_strategy
626+
).make_retryer_async()
602627

603628
return await retryer(_get)
604629

@@ -609,6 +634,7 @@ async def post_async(
609634
blob: Optional[bytes] = None,
610635
json: Optional[dict] = None,
611636
params: Optional[dict] = None,
637+
retry_strategy: Optional[RetryStrategy] = None,
612638
) -> httpx.Response:
613639
"""Performs an async POST-request to the Sumo API.
614640
@@ -674,7 +700,9 @@ async def _post():
674700
timeout=self._timeout,
675701
)
676702

677-
retryer = self._retry_strategy.make_retryer_async()
703+
retryer = (
704+
retry_strategy if retry_strategy else self._retry_strategy
705+
).make_retryer_async()
678706

679707
return await retryer(_post)
680708

@@ -684,6 +712,7 @@ async def put_async(
684712
path: str,
685713
blob: Optional[bytes] = None,
686714
json: Optional[dict] = None,
715+
retry_strategy: Optional[RetryStrategy] = None,
687716
) -> httpx.Response:
688717
"""Performs an async PUT-request to the Sumo API.
689718
@@ -723,13 +752,18 @@ async def _put():
723752
timeout=self._timeout,
724753
)
725754

726-
retryer = self._retry_strategy.make_retryer_async()
755+
retryer = (
756+
retry_strategy if retry_strategy else self._retry_strategy
757+
).make_retryer_async()
727758

728759
return await retryer(_put)
729760

730761
@raise_for_status_async
731762
async def delete_async(
732-
self, path: str, params: Optional[dict] = None
763+
self,
764+
path: str,
765+
params: Optional[dict] = None,
766+
retry_strategy: Optional[RetryStrategy] = None,
733767
) -> httpx.Response:
734768
"""Performs an async DELETE-request to the Sumo API.
735769
@@ -763,12 +797,17 @@ async def _delete():
763797
timeout=self._timeout,
764798
)
765799

766-
retryer = self._retry_strategy.make_retryer_async()
800+
retryer = (
801+
retry_strategy if retry_strategy else self._retry_strategy
802+
).make_retryer_async()
767803

768804
return await retryer(_delete)
769805

770806
async def poll_async(
771-
self, response_in: httpx.Response, timeout=None
807+
self,
808+
response_in: httpx.Response,
809+
timeout=None,
810+
retry_strategy: Optional[RetryStrategy] = None,
772811
) -> httpx.Response:
773812
"""Poll a specific endpoint until a result is obtained.
774813
@@ -782,7 +821,9 @@ async def poll_async(
782821
expiry = time.time() + timeout if timeout is not None else None
783822
while True:
784823
await asyncio.sleep(retry_after)
785-
response = await self.get_async(location)
824+
response = await self.get_async(
825+
location, retry_strategy=retry_strategy
826+
)
786827
if response.status_code != 202:
787828
return response
788829
if expiry is not None and time.time() > expiry:

0 commit comments

Comments
 (0)