Skip to content

Commit 0b028b5

Browse files
committed
feat: add progress bar
1 parent ec70f3a commit 0b028b5

File tree

4 files changed

+23
-3
lines changed

4 files changed

+23
-3
lines changed

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
requests==2.31.0
22
backoff==2.2.1
3+
tqdm==4.66.1

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ def get_version():
3232
install_requires=[
3333
"requests>=2.25.1",
3434
"backoff>=2.2.1",
35+
"tqdm>=4.66.1",
3536
],
3637
classifiers=[
3738
"Intended Audience :: Developers",

videodb/_utils/_http_client.py

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import requests
55
import backoff
66

7+
from tqdm import tqdm
78
from 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"""

videodb/video.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ def _fetch_transcript(self, force: bool = False) -> None:
101101
transcript_data = self._connection.get(
102102
path=f"{ApiPath.video}/{self.id}/{ApiPath.transcription}",
103103
params={"force": "true" if force else "false"},
104+
show_progress=True,
104105
)
105106
self.transcript = transcript_data.get("word_timestamps", [])
106107
self.transcript_text = transcript_data.get("text", "")

0 commit comments

Comments
 (0)