44import requests
55import backoff
66
7+ from tqdm import tqdm
78from typing import (
89 Callable ,
910 Optional ,
@@ -52,6 +53,8 @@ def __init__(
5253 {"x-access-token" : api_key , "Content-Type" : "application/json" }
5354 )
5455 self .base_url = base_url
56+ self .show_progress = False
57+ self .progress_bar = None
5558 logger .debug (f"Initialized http client with base url: { self .base_url } " )
5659
5760 def _make_request (
@@ -120,16 +123,25 @@ def _handle_request_error(self, e: requests.exceptions.RequestException) -> None
120123 f"Invalid request: { str (e )} " , e .response
121124 ) from None
122125
123- @backoff .on_exception (backoff .expo , Exception , max_time = 500 , logger = None )
126+ @backoff .on_exception (
127+ backoff .constant , Exception , max_time = 500 , interval = 5 , logger = None , jitter = None
128+ )
124129 def _get_output (self , url : str ):
125130 """Get the output from an async request"""
126131 response_json = self .session .get (url ).json ()
127132 if (
128133 response_json .get ("status" ) == Status .in_progress
129134 or response_json .get ("status" ) == Status .processing
130135 ):
136+ percentage = response_json .get ("data" ).get ("percentage" )
137+ if percentage and self .show_progress and self .progress_bar :
138+ self .progress_bar .n = int (percentage )
139+ self .progress_bar .update (0 )
140+
131141 logger .debug ("Waiting for processing to complete" )
132142 raise Exception ("Stuck on processing status" ) from None
143+ if self .show_progress and self .progress_bar :
144+ self .progress_bar .n = 100
133145 return response_json .get ("response" ) or response_json
134146
135147 def _parse_response (self , response : requests .Response ):
@@ -145,6 +157,8 @@ def _parse_response(self, response: requests.Response):
145157 response_json .get ("status" ) == Status .processing
146158 and response_json .get ("request_type" , "sync" ) == "sync"
147159 ):
160+ if self .show_progress :
161+ self .progress_bar = tqdm (total = 100 , position = 0 , leave = True )
148162 response_json = self ._get_output (
149163 response_json .get ("data" ).get ("output_url" )
150164 )
@@ -168,9 +182,12 @@ def _parse_response(self, response: requests.Response):
168182 f"Invalid request: { response .text } " , response
169183 ) from None
170184
171- def get (self , path : str , ** kwargs ) -> requests .Response :
185+ def get (
186+ self , path : str , show_progress : Optional [bool ] = False , ** kwargs
187+ ) -> requests .Response :
172188 """Make a get request"""
173- return self ._make_request (self .session .get , path , ** kwargs )
189+ self .show_progress = show_progress
190+ return self ._make_request (method = self .session .get , path = path , ** kwargs )
174191
175192 def post (self , path : str , data = None , ** kwargs ) -> requests .Response :
176193 """Make a post request"""
0 commit comments