Skip to content

Commit

Permalink
Reset file pointer when uploading file is retried (#86)
Browse files Browse the repository at this point in the history
  • Loading branch information
ekouts authored Feb 21, 2024
1 parent 659c320 commit 781430a
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 0 deletions.
20 changes: 20 additions & 0 deletions firecrest/AsyncClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,12 @@ def _retry_requests(func):
async def wrapper(*args, **kwargs):
client = args[0]
num_retries = 0
try:
f = kwargs["files"]["file"]
file_original_position = f[1].tell() if isinstance(f, tuple) else f.tell()
except KeyError:
file_original_position = None

resp = await func(*args, **kwargs)
while True:
if resp.status_code != client.TOO_MANY_REQUESTS_CODE:
Expand All @@ -110,6 +116,20 @@ async def wrapper(*args, **kwargs):
default=resp.headers.get("RateLimit-Reset", default=10),
)
reset = int(reset)
try:
f = kwargs["files"]["file"]
logger.debug(
f"Resetting the file pointer of the uploaded file "
f"to {file_original_position}"
)
if isinstance(f, tuple):
f[1].seek(file_original_position)
else:
f.seek(file_original_position)

except KeyError:
pass

microservice = kwargs["endpoint"].split("/")[1]
client = args[0]
logger.info(
Expand Down
20 changes: 20 additions & 0 deletions firecrest/BasicClient.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ def _retry_requests(func):
def wrapper(*args, **kwargs):
client = args[0]
num_retries = 0
try:
f = kwargs["files"]["file"]
file_original_position = f[1].tell() if isinstance(f, tuple) else f.tell()
except KeyError:
file_original_position = None

resp = func(*args, **kwargs)
while True:
if resp.status_code != client.TOO_MANY_REQUESTS_CODE:
Expand All @@ -87,6 +93,20 @@ def wrapper(*args, **kwargs):
f"{reset} seconds and try again"
)
reset = int(reset)
try:
f = kwargs["files"]["file"]
logger.debug(
f"Resetting the file pointer of the uploaded file "
f"to {file_original_position}"
)
if isinstance(f, tuple):
f[1].seek(file_original_position)
else:
f.seek(file_original_position)

except KeyError:
pass

time.sleep(reset)
resp = func(*args, **kwargs)
num_retries += 1
Expand Down

0 comments on commit 781430a

Please sign in to comment.