Skip to content

Commit 605d27c

Browse files
committed
Update timeout behavior and default-timeout tests
1 parent 88e1d77 commit 605d27c

File tree

4 files changed

+68
-16
lines changed

4 files changed

+68
-16
lines changed

src/vws/query.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def __init__(
6464
self._client_access_key = client_access_key
6565
self._client_secret_key = client_secret_key
6666
self._base_vwq_url = base_vwq_url
67-
self.request_timeout_seconds = request_timeout_seconds
67+
self._request_timeout_seconds = request_timeout_seconds
6868

6969
def query(
7070
self,
@@ -147,7 +147,7 @@ def query(
147147
url=urljoin(base=self._base_vwq_url, url=request_path),
148148
headers=headers,
149149
data=content,
150-
timeout=self.request_timeout_seconds,
150+
timeout=self._request_timeout_seconds,
151151
)
152152
response = Response(
153153
text=requests_response.text,

src/vws/vws.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,7 @@ def __init__(
152152
self._server_access_key = server_access_key
153153
self._server_secret_key = server_secret_key
154154
self._base_vws_url = base_vws_url
155-
self.request_timeout_seconds = request_timeout_seconds
155+
self._request_timeout_seconds = request_timeout_seconds
156156

157157
def make_request(
158158
self,
@@ -196,7 +196,7 @@ def make_request(
196196
data=data,
197197
request_path=request_path,
198198
base_vws_url=self._base_vws_url,
199-
request_timeout_seconds=self.request_timeout_seconds,
199+
request_timeout_seconds=self._request_timeout_seconds,
200200
)
201201

202202
if (

tests/test_query.py

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import pytest
88
import requests
9+
from freezegun import freeze_time
910
from mock_vws import MockVWS
1011
from mock_vws.database import VuforiaDatabase
1112

@@ -48,18 +49,38 @@ class TestCustomRequestTimeout:
4849
"""Tests for using a custom request timeout."""
4950

5051
@staticmethod
51-
def test_default_timeout() -> None:
52-
"""By default, the request timeout is 30 seconds."""
53-
default_timeout_seconds = 30.0
54-
with MockVWS() as mock:
52+
@pytest.mark.parametrize(
53+
argnames=("response_delay_seconds", "expect_timeout"),
54+
argvalues=[(29, False), (31, True)],
55+
)
56+
def test_default_timeout(
57+
image: io.BytesIO | BinaryIO,
58+
*,
59+
response_delay_seconds: int,
60+
expect_timeout: bool,
61+
) -> None:
62+
"""At 29 seconds there is no error; at 31 seconds there is a
63+
timeout.
64+
"""
65+
with (
66+
freeze_time(auto_tick_seconds=1),
67+
MockVWS(response_delay_seconds=response_delay_seconds) as mock,
68+
):
5569
database = VuforiaDatabase()
5670
mock.add_database(database=database)
5771
cloud_reco_client = CloudRecoService(
5872
client_access_key=database.client_access_key,
5973
client_secret_key=database.client_secret_key,
6074
)
61-
expected = default_timeout_seconds
62-
assert cloud_reco_client.request_timeout_seconds == expected
75+
76+
if expect_timeout:
77+
with pytest.raises(
78+
expected_exception=requests.exceptions.Timeout,
79+
):
80+
cloud_reco_client.query(image=image)
81+
else:
82+
matches = cloud_reco_client.query(image=image)
83+
assert matches == []
6384

6485
@staticmethod
6586
@pytest.mark.parametrize(

tests/test_vws.py

Lines changed: 37 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,49 @@ class TestCustomRequestTimeout:
9797
"""Tests for using a custom request timeout."""
9898

9999
@staticmethod
100-
def test_default_timeout() -> None:
101-
"""By default, the request timeout is 30 seconds."""
102-
default_timeout_seconds = 30.0
103-
with MockVWS() as mock:
100+
@pytest.mark.parametrize(
101+
argnames=("response_delay_seconds", "expect_timeout"),
102+
argvalues=[(29, False), (31, True)],
103+
)
104+
def test_default_timeout(
105+
image: io.BytesIO | BinaryIO,
106+
*,
107+
response_delay_seconds: int,
108+
expect_timeout: bool,
109+
) -> None:
110+
"""At 29 seconds there is no error; at 31 seconds there is a
111+
timeout.
112+
"""
113+
with (
114+
freeze_time(auto_tick_seconds=1),
115+
MockVWS(response_delay_seconds=response_delay_seconds) as mock,
116+
):
104117
database = VuforiaDatabase()
105118
mock.add_database(database=database)
106119
vws_client = VWS(
107120
server_access_key=database.server_access_key,
108121
server_secret_key=database.server_secret_key,
109122
)
110-
expected = default_timeout_seconds
111-
assert vws_client.request_timeout_seconds == expected
123+
124+
if expect_timeout:
125+
with pytest.raises(
126+
expected_exception=requests.exceptions.Timeout,
127+
):
128+
vws_client.add_target(
129+
name="x",
130+
width=1,
131+
image=image,
132+
active_flag=True,
133+
application_metadata=None,
134+
)
135+
else:
136+
vws_client.add_target(
137+
name="x",
138+
width=1,
139+
image=image,
140+
active_flag=True,
141+
application_metadata=None,
142+
)
112143

113144
@staticmethod
114145
@pytest.mark.parametrize(

0 commit comments

Comments
 (0)