vws-python 2026.2.21__tar.gz → 2026.2.22__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vws_python-2026.2.21 → vws_python-2026.2.22}/CHANGELOG.rst +4 -0
- {vws_python-2026.2.21/src/vws_python.egg-info → vws_python-2026.2.22}/PKG-INFO +2 -2
- {vws_python-2026.2.21 → vws_python-2026.2.22}/conftest.py +1 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/pyproject.toml +3 -3
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/_vws_request.py +1 -3
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/query.py +3 -2
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/vws.py +3 -1
- {vws_python-2026.2.21 → vws_python-2026.2.22/src/vws_python.egg-info}/PKG-INFO +2 -2
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws_python.egg-info/requires.txt +1 -1
- {vws_python-2026.2.21 → vws_python-2026.2.22}/tests/test_cloud_reco_exceptions.py +2 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/tests/test_query.py +43 -2
- {vws_python-2026.2.21 → vws_python-2026.2.22}/tests/test_vws.py +32 -3
- {vws_python-2026.2.21 → vws_python-2026.2.22}/tests/test_vws_exceptions.py +13 -1
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.git_archival.txt +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.gitattributes +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.github/dependabot.yml +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.github/workflows/ci.yml +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.github/workflows/dependabot-merge.yml +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.github/workflows/lint.yml +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.github/workflows/publish-site.yml +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.github/workflows/release.yml +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.gitignore +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.pre-commit-config.yaml +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.prettierrc +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.vscode/extensions.json +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/.vscode/settings.json +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/CODE_OF_CONDUCT.rst +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/LICENSE +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/README.rst +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/docs/source/__init__.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/docs/source/api-reference.rst +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/docs/source/changelog.rst +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/docs/source/conf.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/docs/source/contributing.rst +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/docs/source/exceptions.rst +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/docs/source/index.rst +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/docs/source/release-process.rst +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/setup.cfg +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/spelling_private_dict.txt +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/__init__.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/exceptions/__init__.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/exceptions/base_exceptions.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/exceptions/cloud_reco_exceptions.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/exceptions/custom_exceptions.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/exceptions/vws_exceptions.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/include_target_data.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/py.typed +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/reports.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/response.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/vumark_accept.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws/vumark_service.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws_python.egg-info/SOURCES.txt +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws_python.egg-info/dependency_links.txt +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws_python.egg-info/not-zip-safe +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/src/vws_python.egg-info/top_level.txt +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/tests/__init__.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/tests/conftest.py +0 -0
- {vws_python-2026.2.21 → vws_python-2026.2.22}/zizmor.yml +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vws-python
|
|
3
|
-
Version: 2026.2.
|
|
3
|
+
Version: 2026.2.22
|
|
4
4
|
Summary: Interact with the Vuforia Web Services (VWS) API.
|
|
5
5
|
Author-email: Adam Dangoor <adamdangoor@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -60,7 +60,7 @@ Requires-Dist: torchvision>=0.20.1; extra == "dev"
|
|
|
60
60
|
Requires-Dist: ty==0.0.17; extra == "dev"
|
|
61
61
|
Requires-Dist: types-requests==2.32.4.20260107; extra == "dev"
|
|
62
62
|
Requires-Dist: vulture==2.14; extra == "dev"
|
|
63
|
-
Requires-Dist: vws-python-mock==2026.2.
|
|
63
|
+
Requires-Dist: vws-python-mock==2026.2.22.2; extra == "dev"
|
|
64
64
|
Requires-Dist: vws-test-fixtures==2023.3.5; extra == "dev"
|
|
65
65
|
Requires-Dist: yamlfix==1.19.1; extra == "dev"
|
|
66
66
|
Requires-Dist: zizmor==1.22.0; extra == "dev"
|
|
@@ -82,7 +82,7 @@ optional-dependencies.dev = [
|
|
|
82
82
|
"ty==0.0.17",
|
|
83
83
|
"types-requests==2.32.4.20260107",
|
|
84
84
|
"vulture==2.14",
|
|
85
|
-
"vws-python-mock==2026.2.
|
|
85
|
+
"vws-python-mock==2026.2.22.2",
|
|
86
86
|
"vws-test-fixtures==2023.3.5",
|
|
87
87
|
"yamlfix==1.19.1",
|
|
88
88
|
"zizmor==1.22.0",
|
|
@@ -301,8 +301,8 @@ keep_full_version = true
|
|
|
301
301
|
max_supported_python = "3.14"
|
|
302
302
|
|
|
303
303
|
[tool.pytest]
|
|
304
|
-
|
|
305
|
-
|
|
304
|
+
xfail_strict = true
|
|
305
|
+
log_cli = true
|
|
306
306
|
|
|
307
307
|
[tool.coverage]
|
|
308
308
|
run.branch = true
|
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
API.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from urllib.parse import urljoin
|
|
6
|
-
|
|
7
5
|
import requests
|
|
8
6
|
from beartype import BeartypeConf, beartype
|
|
9
7
|
from vws_auth_tools import authorization_header, rfc_1123_date
|
|
@@ -64,7 +62,7 @@ def target_api_request(
|
|
|
64
62
|
**extra_headers,
|
|
65
63
|
}
|
|
66
64
|
|
|
67
|
-
url =
|
|
65
|
+
url = base_vws_url.rstrip("/") + request_path
|
|
68
66
|
|
|
69
67
|
requests_response = requests.request(
|
|
70
68
|
method=method,
|
|
@@ -5,7 +5,6 @@ import io
|
|
|
5
5
|
import json
|
|
6
6
|
from http import HTTPMethod, HTTPStatus
|
|
7
7
|
from typing import Any, BinaryIO
|
|
8
|
-
from urllib.parse import urljoin
|
|
9
8
|
|
|
10
9
|
import requests
|
|
11
10
|
from beartype import BeartypeConf, beartype
|
|
@@ -46,6 +45,7 @@ class CloudRecoService:
|
|
|
46
45
|
|
|
47
46
|
def __init__(
|
|
48
47
|
self,
|
|
48
|
+
*,
|
|
49
49
|
client_access_key: str,
|
|
50
50
|
client_secret_key: str,
|
|
51
51
|
base_vwq_url: str = "https://cloudreco.vuforia.com",
|
|
@@ -68,6 +68,7 @@ class CloudRecoService:
|
|
|
68
68
|
|
|
69
69
|
def query(
|
|
70
70
|
self,
|
|
71
|
+
*,
|
|
71
72
|
image: _ImageType,
|
|
72
73
|
max_num_results: int = 1,
|
|
73
74
|
include_target_data: CloudRecoIncludeTargetData = (
|
|
@@ -144,7 +145,7 @@ class CloudRecoService:
|
|
|
144
145
|
|
|
145
146
|
requests_response = requests.request(
|
|
146
147
|
method=method,
|
|
147
|
-
url=
|
|
148
|
+
url=self._base_vwq_url.rstrip("/") + request_path,
|
|
148
149
|
headers=headers,
|
|
149
150
|
data=content,
|
|
150
151
|
timeout=self._request_timeout_seconds,
|
|
@@ -63,6 +63,7 @@ class VWS:
|
|
|
63
63
|
|
|
64
64
|
def __init__(
|
|
65
65
|
self,
|
|
66
|
+
*,
|
|
66
67
|
server_access_key: str,
|
|
67
68
|
server_secret_key: str,
|
|
68
69
|
base_vws_url: str = "https://vws.vuforia.com",
|
|
@@ -171,11 +172,11 @@ class VWS:
|
|
|
171
172
|
|
|
172
173
|
def add_target(
|
|
173
174
|
self,
|
|
175
|
+
*,
|
|
174
176
|
name: str,
|
|
175
177
|
width: float,
|
|
176
178
|
image: _ImageType,
|
|
177
179
|
application_metadata: str | None,
|
|
178
|
-
*,
|
|
179
180
|
active_flag: bool,
|
|
180
181
|
) -> str:
|
|
181
182
|
"""Add a target to a Vuforia Web Services database.
|
|
@@ -302,6 +303,7 @@ class VWS:
|
|
|
302
303
|
|
|
303
304
|
def wait_for_target_processed(
|
|
304
305
|
self,
|
|
306
|
+
*,
|
|
305
307
|
target_id: str,
|
|
306
308
|
seconds_between_requests: float = 0.2,
|
|
307
309
|
timeout_seconds: float = 60 * 5,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vws-python
|
|
3
|
-
Version: 2026.2.
|
|
3
|
+
Version: 2026.2.22
|
|
4
4
|
Summary: Interact with the Vuforia Web Services (VWS) API.
|
|
5
5
|
Author-email: Adam Dangoor <adamdangoor@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -60,7 +60,7 @@ Requires-Dist: torchvision>=0.20.1; extra == "dev"
|
|
|
60
60
|
Requires-Dist: ty==0.0.17; extra == "dev"
|
|
61
61
|
Requires-Dist: types-requests==2.32.4.20260107; extra == "dev"
|
|
62
62
|
Requires-Dist: vulture==2.14; extra == "dev"
|
|
63
|
-
Requires-Dist: vws-python-mock==2026.2.
|
|
63
|
+
Requires-Dist: vws-python-mock==2026.2.22.2; extra == "dev"
|
|
64
64
|
Requires-Dist: vws-test-fixtures==2023.3.5; extra == "dev"
|
|
65
65
|
Requires-Dist: yamlfix==1.19.1; extra == "dev"
|
|
66
66
|
Requires-Dist: zizmor==1.22.0; extra == "dev"
|
|
@@ -24,6 +24,7 @@ from vws.exceptions.custom_exceptions import (
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
def test_too_many_max_results(
|
|
27
|
+
*,
|
|
27
28
|
cloud_reco_client: CloudRecoService,
|
|
28
29
|
high_quality_image: io.BytesIO,
|
|
29
30
|
) -> None:
|
|
@@ -45,6 +46,7 @@ def test_too_many_max_results(
|
|
|
45
46
|
|
|
46
47
|
|
|
47
48
|
def test_image_too_large(
|
|
49
|
+
*,
|
|
48
50
|
cloud_reco_client: CloudRecoService,
|
|
49
51
|
png_too_large: io.BytesIO | io.BufferedRandom,
|
|
50
52
|
) -> None:
|
|
@@ -20,6 +20,7 @@ class TestQuery:
|
|
|
20
20
|
|
|
21
21
|
@staticmethod
|
|
22
22
|
def test_no_matches(
|
|
23
|
+
*,
|
|
23
24
|
cloud_reco_client: CloudRecoService,
|
|
24
25
|
image: io.BytesIO | BinaryIO,
|
|
25
26
|
) -> None:
|
|
@@ -29,6 +30,7 @@ class TestQuery:
|
|
|
29
30
|
|
|
30
31
|
@staticmethod
|
|
31
32
|
def test_match(
|
|
33
|
+
*,
|
|
32
34
|
vws_client: VWS,
|
|
33
35
|
cloud_reco_client: CloudRecoService,
|
|
34
36
|
image: io.BytesIO | BinaryIO,
|
|
@@ -55,8 +57,8 @@ class TestDefaultRequestTimeout:
|
|
|
55
57
|
argvalues=[(29, False), (31, True)],
|
|
56
58
|
)
|
|
57
59
|
def test_default_timeout(
|
|
58
|
-
image: io.BytesIO | BinaryIO,
|
|
59
60
|
*,
|
|
61
|
+
image: io.BytesIO | BinaryIO,
|
|
60
62
|
response_delay_seconds: int,
|
|
61
63
|
expect_timeout: bool,
|
|
62
64
|
) -> None:
|
|
@@ -110,8 +112,8 @@ class TestCustomRequestTimeout:
|
|
|
110
112
|
],
|
|
111
113
|
)
|
|
112
114
|
def test_custom_timeout(
|
|
113
|
-
image: io.BytesIO | BinaryIO,
|
|
114
115
|
*,
|
|
116
|
+
image: io.BytesIO | BinaryIO,
|
|
115
117
|
custom_timeout: float | tuple[float, float],
|
|
116
118
|
response_delay_seconds: float,
|
|
117
119
|
expect_timeout: bool,
|
|
@@ -188,12 +190,46 @@ class TestCustomBaseVWQURL:
|
|
|
188
190
|
match = matches[0]
|
|
189
191
|
assert match.target_id == target_id
|
|
190
192
|
|
|
193
|
+
@staticmethod
|
|
194
|
+
def test_custom_base_url_with_path_prefix(
|
|
195
|
+
image: io.BytesIO | BinaryIO,
|
|
196
|
+
) -> None:
|
|
197
|
+
"""
|
|
198
|
+
A base VWQ URL with a path prefix is used as-is, without the
|
|
199
|
+
prefix being dropped.
|
|
200
|
+
"""
|
|
201
|
+
base_vwq_url = "http://example.com/prefix"
|
|
202
|
+
with MockVWS(base_vwq_url=base_vwq_url) as mock:
|
|
203
|
+
database = CloudDatabase()
|
|
204
|
+
mock.add_cloud_database(cloud_database=database)
|
|
205
|
+
vws_client = VWS(
|
|
206
|
+
server_access_key=database.server_access_key,
|
|
207
|
+
server_secret_key=database.server_secret_key,
|
|
208
|
+
)
|
|
209
|
+
target_id = vws_client.add_target(
|
|
210
|
+
name="x",
|
|
211
|
+
width=1,
|
|
212
|
+
image=image,
|
|
213
|
+
active_flag=True,
|
|
214
|
+
application_metadata=None,
|
|
215
|
+
)
|
|
216
|
+
vws_client.wait_for_target_processed(target_id=target_id)
|
|
217
|
+
cloud_reco_client = CloudRecoService(
|
|
218
|
+
client_access_key=database.client_access_key,
|
|
219
|
+
client_secret_key=database.client_secret_key,
|
|
220
|
+
base_vwq_url=base_vwq_url,
|
|
221
|
+
)
|
|
222
|
+
|
|
223
|
+
matches = cloud_reco_client.query(image=image)
|
|
224
|
+
assert len(matches) == 1
|
|
225
|
+
|
|
191
226
|
|
|
192
227
|
class TestMaxNumResults:
|
|
193
228
|
"""Tests for the ``max_num_results`` parameter of ``query``."""
|
|
194
229
|
|
|
195
230
|
@staticmethod
|
|
196
231
|
def test_default(
|
|
232
|
+
*,
|
|
197
233
|
vws_client: VWS,
|
|
198
234
|
cloud_reco_client: CloudRecoService,
|
|
199
235
|
image: io.BytesIO | BinaryIO,
|
|
@@ -220,6 +256,7 @@ class TestMaxNumResults:
|
|
|
220
256
|
|
|
221
257
|
@staticmethod
|
|
222
258
|
def test_custom(
|
|
259
|
+
*,
|
|
223
260
|
vws_client: VWS,
|
|
224
261
|
cloud_reco_client: CloudRecoService,
|
|
225
262
|
image: io.BytesIO | BinaryIO,
|
|
@@ -262,6 +299,7 @@ class TestIncludeTargetData:
|
|
|
262
299
|
|
|
263
300
|
@staticmethod
|
|
264
301
|
def test_default(
|
|
302
|
+
*,
|
|
265
303
|
vws_client: VWS,
|
|
266
304
|
cloud_reco_client: CloudRecoService,
|
|
267
305
|
image: io.BytesIO | BinaryIO,
|
|
@@ -292,6 +330,7 @@ class TestIncludeTargetData:
|
|
|
292
330
|
|
|
293
331
|
@staticmethod
|
|
294
332
|
def test_top(
|
|
333
|
+
*,
|
|
295
334
|
vws_client: VWS,
|
|
296
335
|
cloud_reco_client: CloudRecoService,
|
|
297
336
|
image: io.BytesIO | BinaryIO,
|
|
@@ -327,6 +366,7 @@ class TestIncludeTargetData:
|
|
|
327
366
|
|
|
328
367
|
@staticmethod
|
|
329
368
|
def test_none(
|
|
369
|
+
*,
|
|
330
370
|
vws_client: VWS,
|
|
331
371
|
cloud_reco_client: CloudRecoService,
|
|
332
372
|
image: io.BytesIO | BinaryIO,
|
|
@@ -363,6 +403,7 @@ class TestIncludeTargetData:
|
|
|
363
403
|
|
|
364
404
|
@staticmethod
|
|
365
405
|
def test_all(
|
|
406
|
+
*,
|
|
366
407
|
vws_client: VWS,
|
|
367
408
|
cloud_reco_client: CloudRecoService,
|
|
368
409
|
image: io.BytesIO | BinaryIO,
|
|
@@ -34,11 +34,11 @@ class TestAddTarget:
|
|
|
34
34
|
)
|
|
35
35
|
@pytest.mark.parametrize(argnames="active_flag", argvalues=[True, False])
|
|
36
36
|
def test_add_target(
|
|
37
|
+
*,
|
|
37
38
|
vws_client: VWS,
|
|
38
39
|
image: io.BytesIO | BinaryIO,
|
|
39
40
|
application_metadata: bytes | None,
|
|
40
41
|
cloud_reco_client: CloudRecoService,
|
|
41
|
-
*,
|
|
42
42
|
active_flag: bool,
|
|
43
43
|
) -> None:
|
|
44
44
|
"""No exception is raised when adding one target."""
|
|
@@ -76,6 +76,7 @@ class TestAddTarget:
|
|
|
76
76
|
|
|
77
77
|
@staticmethod
|
|
78
78
|
def test_add_two_targets(
|
|
79
|
+
*,
|
|
79
80
|
vws_client: VWS,
|
|
80
81
|
image: io.BytesIO | BinaryIO,
|
|
81
82
|
) -> None:
|
|
@@ -103,8 +104,8 @@ class TestDefaultRequestTimeout:
|
|
|
103
104
|
argvalues=[(29, False), (31, True)],
|
|
104
105
|
)
|
|
105
106
|
def test_default_timeout(
|
|
106
|
-
image: io.BytesIO | BinaryIO,
|
|
107
107
|
*,
|
|
108
|
+
image: io.BytesIO | BinaryIO,
|
|
108
109
|
response_delay_seconds: int,
|
|
109
110
|
expect_timeout: bool,
|
|
110
111
|
) -> None:
|
|
@@ -169,8 +170,8 @@ class TestCustomRequestTimeout:
|
|
|
169
170
|
],
|
|
170
171
|
)
|
|
171
172
|
def test_custom_timeout(
|
|
172
|
-
image: io.BytesIO | BinaryIO,
|
|
173
173
|
*,
|
|
174
|
+
image: io.BytesIO | BinaryIO,
|
|
174
175
|
custom_timeout: float | tuple[float, float],
|
|
175
176
|
response_delay_seconds: float,
|
|
176
177
|
expect_timeout: bool,
|
|
@@ -245,12 +246,31 @@ class TestCustomBaseVWSURL:
|
|
|
245
246
|
application_metadata=None,
|
|
246
247
|
)
|
|
247
248
|
|
|
249
|
+
@staticmethod
|
|
250
|
+
def test_custom_base_url_with_path_prefix() -> None:
|
|
251
|
+
"""
|
|
252
|
+
A base VWS URL with a path prefix is used as-is, without the
|
|
253
|
+
prefix being dropped.
|
|
254
|
+
"""
|
|
255
|
+
base_vws_url = "http://example.com/prefix"
|
|
256
|
+
with MockVWS(base_vws_url=base_vws_url) as mock:
|
|
257
|
+
database = CloudDatabase()
|
|
258
|
+
mock.add_cloud_database(cloud_database=database)
|
|
259
|
+
vws_client = VWS(
|
|
260
|
+
server_access_key=database.server_access_key,
|
|
261
|
+
server_secret_key=database.server_secret_key,
|
|
262
|
+
base_vws_url=base_vws_url,
|
|
263
|
+
)
|
|
264
|
+
|
|
265
|
+
assert not vws_client.list_targets()
|
|
266
|
+
|
|
248
267
|
|
|
249
268
|
class TestListTargets:
|
|
250
269
|
"""Tests for listing targets."""
|
|
251
270
|
|
|
252
271
|
@staticmethod
|
|
253
272
|
def test_list_targets(
|
|
273
|
+
*,
|
|
254
274
|
vws_client: VWS,
|
|
255
275
|
image: io.BytesIO | BinaryIO,
|
|
256
276
|
) -> None:
|
|
@@ -277,6 +297,7 @@ class TestDelete:
|
|
|
277
297
|
|
|
278
298
|
@staticmethod
|
|
279
299
|
def test_delete_target(
|
|
300
|
+
*,
|
|
280
301
|
vws_client: VWS,
|
|
281
302
|
image: io.BytesIO | BinaryIO,
|
|
282
303
|
) -> None:
|
|
@@ -300,6 +321,7 @@ class TestGetTargetSummaryReport:
|
|
|
300
321
|
|
|
301
322
|
@staticmethod
|
|
302
323
|
def test_get_target_summary_report(
|
|
324
|
+
*,
|
|
303
325
|
vws_client: VWS,
|
|
304
326
|
image: io.BytesIO | BinaryIO,
|
|
305
327
|
) -> None:
|
|
@@ -398,6 +420,7 @@ class TestGetTargetRecord:
|
|
|
398
420
|
|
|
399
421
|
@staticmethod
|
|
400
422
|
def test_get_target_record(
|
|
423
|
+
*,
|
|
401
424
|
vws_client: VWS,
|
|
402
425
|
image: io.BytesIO | BinaryIO,
|
|
403
426
|
) -> None:
|
|
@@ -444,6 +467,7 @@ class TestGetTargetRecord:
|
|
|
444
467
|
|
|
445
468
|
@staticmethod
|
|
446
469
|
def test_get_failed(
|
|
470
|
+
*,
|
|
447
471
|
vws_client: VWS,
|
|
448
472
|
image_file_failed_state: io.BytesIO,
|
|
449
473
|
) -> None:
|
|
@@ -467,6 +491,7 @@ class TestWaitForTargetProcessed:
|
|
|
467
491
|
|
|
468
492
|
@staticmethod
|
|
469
493
|
def test_wait_for_target_processed(
|
|
494
|
+
*,
|
|
470
495
|
vws_client: VWS,
|
|
471
496
|
image: io.BytesIO | BinaryIO,
|
|
472
497
|
) -> None:
|
|
@@ -628,6 +653,7 @@ class TestGetDuplicateTargets:
|
|
|
628
653
|
|
|
629
654
|
@staticmethod
|
|
630
655
|
def test_get_duplicate_targets(
|
|
656
|
+
*,
|
|
631
657
|
vws_client: VWS,
|
|
632
658
|
image: io.BytesIO | BinaryIO,
|
|
633
659
|
) -> None:
|
|
@@ -658,6 +684,7 @@ class TestUpdateTarget:
|
|
|
658
684
|
|
|
659
685
|
@staticmethod
|
|
660
686
|
def test_update_target(
|
|
687
|
+
*,
|
|
661
688
|
vws_client: VWS,
|
|
662
689
|
image: io.BytesIO | BinaryIO,
|
|
663
690
|
different_high_quality_image: io.BytesIO,
|
|
@@ -717,6 +744,7 @@ class TestUpdateTarget:
|
|
|
717
744
|
|
|
718
745
|
@staticmethod
|
|
719
746
|
def test_no_fields_given(
|
|
747
|
+
*,
|
|
720
748
|
vws_client: VWS,
|
|
721
749
|
image: io.BytesIO | BinaryIO,
|
|
722
750
|
) -> None:
|
|
@@ -745,6 +773,7 @@ class TestGenerateVumarkInstance:
|
|
|
745
773
|
],
|
|
746
774
|
)
|
|
747
775
|
def test_generate_vumark_instance(
|
|
776
|
+
*,
|
|
748
777
|
vumark_service_client: VuMarkService,
|
|
749
778
|
vumark_target_id: str,
|
|
750
779
|
accept: VuMarkAccept,
|
|
@@ -41,6 +41,7 @@ from vws.vumark_accept import VuMarkAccept
|
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
def test_image_too_large(
|
|
44
|
+
*,
|
|
44
45
|
vws_client: VWS,
|
|
45
46
|
png_too_large: io.BytesIO | io.BufferedRandom,
|
|
46
47
|
) -> None:
|
|
@@ -75,7 +76,11 @@ def test_invalid_given_id(vws_client: VWS) -> None:
|
|
|
75
76
|
assert exc.value.target_id == target_id
|
|
76
77
|
|
|
77
78
|
|
|
78
|
-
def test_add_bad_name(
|
|
79
|
+
def test_add_bad_name(
|
|
80
|
+
*,
|
|
81
|
+
vws_client: VWS,
|
|
82
|
+
high_quality_image: io.BytesIO,
|
|
83
|
+
) -> None:
|
|
79
84
|
"""
|
|
80
85
|
When a name with a bad character is given, a ``ServerError``
|
|
81
86
|
exception
|
|
@@ -143,6 +148,7 @@ def test_bad_image(vws_client: VWS) -> None:
|
|
|
143
148
|
|
|
144
149
|
|
|
145
150
|
def test_target_name_exist(
|
|
151
|
+
*,
|
|
146
152
|
vws_client: VWS,
|
|
147
153
|
high_quality_image: io.BytesIO,
|
|
148
154
|
) -> None:
|
|
@@ -201,6 +207,7 @@ def test_project_inactive(
|
|
|
201
207
|
|
|
202
208
|
|
|
203
209
|
def test_target_status_processing(
|
|
210
|
+
*,
|
|
204
211
|
vws_client: VWS,
|
|
205
212
|
high_quality_image: io.BytesIO,
|
|
206
213
|
) -> None:
|
|
@@ -225,6 +232,7 @@ def test_target_status_processing(
|
|
|
225
232
|
|
|
226
233
|
|
|
227
234
|
def test_metadata_too_large(
|
|
235
|
+
*,
|
|
228
236
|
vws_client: VWS,
|
|
229
237
|
high_quality_image: io.BytesIO,
|
|
230
238
|
) -> None:
|
|
@@ -246,6 +254,7 @@ def test_metadata_too_large(
|
|
|
246
254
|
|
|
247
255
|
|
|
248
256
|
def test_request_time_too_skewed(
|
|
257
|
+
*,
|
|
249
258
|
vws_client: VWS,
|
|
250
259
|
high_quality_image: io.BytesIO,
|
|
251
260
|
) -> None:
|
|
@@ -316,6 +325,7 @@ def test_authentication_failure(
|
|
|
316
325
|
|
|
317
326
|
|
|
318
327
|
def test_target_status_not_success(
|
|
328
|
+
*,
|
|
319
329
|
vws_client: VWS,
|
|
320
330
|
high_quality_image: io.BytesIO,
|
|
321
331
|
) -> None:
|
|
@@ -368,6 +378,7 @@ def test_vwsexception_inheritance() -> None:
|
|
|
368
378
|
|
|
369
379
|
|
|
370
380
|
def test_invalid_instance_id(
|
|
381
|
+
*,
|
|
371
382
|
vumark_service_client: VuMarkService,
|
|
372
383
|
vumark_target_id: str,
|
|
373
384
|
) -> None:
|
|
@@ -423,6 +434,7 @@ def test_invalid_target_type(
|
|
|
423
434
|
|
|
424
435
|
|
|
425
436
|
def test_base_exception(
|
|
437
|
+
*,
|
|
426
438
|
vws_client: VWS,
|
|
427
439
|
high_quality_image: io.BytesIO,
|
|
428
440
|
) -> None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|