Skip to content

Commit 3ff3131

Browse files
committed
issue-1299 fix timeout missed when longer than 60s
1 parent 88d4614 commit 3ff3131

File tree

1 file changed

+16
-15
lines changed

1 file changed

+16
-15
lines changed

tableauserverclient/server/endpoint/endpoint.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def _blocking_request(self, method, url, parameters={}) -> Optional[Union["Respo
9494
return self.async_response
9595

9696
def send_request_while_show_progress_threaded(
97-
self, method, url, parameters={}, request_timeout=0
97+
self, method, url, parameters={}, request_timeout=None
9898
) -> Optional[Union["Response", Exception]]:
9999
try:
100100
request_thread = Thread(target=self._blocking_request, args=(method, url, parameters))
@@ -104,28 +104,29 @@ def send_request_while_show_progress_threaded(
104104
return None
105105
seconds = 0.05
106106
minutes = 0
107+
last_log_minute = 0
107108
sleep(seconds)
108109
if self.async_response is not None:
109110
# a quick return for any immediate responses
110111
return self.async_response
111-
while (self.async_response is None) and (request_timeout == 0 or seconds < request_timeout):
112-
self.log_wait_time_then_sleep(minutes, seconds, url)
112+
timed_out: bool = (request_timeout is not None and seconds > request_timeout)
113+
while (self.async_response is None) and not timed_out:
114+
sleep(DELAY_SLEEP_SECONDS)
113115
seconds = seconds + DELAY_SLEEP_SECONDS
114-
if seconds >= 60:
115-
seconds -= 60
116-
minutes += 1
116+
minutes = int(seconds/60)
117+
last_log_minute = self.log_wait_time(minutes, last_log_minute, url)
117118
return self.async_response
118119

119-
def log_wait_time_then_sleep(self, minutes, seconds, url):
120+
def log_wait_time(self, minutes, last_log_minute, url) -> int:
120121
logger.debug("{} Waiting....".format(datetime.timestamp()))
121-
if seconds >= 60: # detailed log message ~every minute
122-
if minutes % 1 == 0:
123-
logger.info(
124-
"[{}] Waiting ({} minutes so far) for request to {}".format(datetime.timestamp(), minutes, url)
125-
)
126-
else:
127-
logger.debug("[{}] Waiting for request to {}".format(datetime.timestamp(), url))
128-
sleep(DELAY_SLEEP_SECONDS)
122+
if minutes > last_log_minute: # detailed log message ~every minute
123+
logger.info(
124+
"[{}] Waiting ({} minutes so far) for request to {}".format(datetime.timestamp(), minutes, url)
125+
)
126+
last_log_minute = minutes
127+
else:
128+
logger.debug("[{}] Waiting for request to {}".format(datetime.timestamp(), url))
129+
return last_log_minute
129130

130131
def _make_request(
131132
self,

0 commit comments

Comments
 (0)