vws-python 2026.8.14__tar.gz → 2026.9.7__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.
Files changed (87) hide show
  1. {vws_python-2026.8.14 → vws_python-2026.9.7}/.github/workflows/autofix.yml +1 -1
  2. {vws_python-2026.8.14 → vws_python-2026.9.7}/.github/workflows/ci.yml +1 -1
  3. {vws_python-2026.8.14 → vws_python-2026.9.7}/.github/workflows/lint.yml +2 -1
  4. {vws_python-2026.8.14 → vws_python-2026.9.7}/.github/workflows/release.yml +1 -1
  5. {vws_python-2026.8.14 → vws_python-2026.9.7}/CHANGELOG.rst +11 -0
  6. {vws_python-2026.8.14/src/vws_python.egg-info → vws_python-2026.9.7}/PKG-INFO +20 -19
  7. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/source/index.rst +38 -0
  8. vws_python-2026.9.7/prek.toml +528 -0
  9. {vws_python-2026.8.14 → vws_python-2026.9.7}/pyproject.toml +30 -20
  10. {vws_python-2026.8.14 → vws_python-2026.9.7}/spelling_private_dict.txt +3 -0
  11. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/_model_targets.py +2 -6
  12. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/transports.py +192 -1
  13. {vws_python-2026.8.14 → vws_python-2026.9.7/src/vws_python.egg-info}/PKG-INFO +20 -19
  14. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws_python.egg-info/SOURCES.txt +1 -1
  15. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws_python.egg-info/requires.txt +19 -18
  16. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws_python.egg-info/scm_file_list.json +1 -1
  17. vws_python-2026.9.7/src/vws_python.egg-info/scm_version.json +8 -0
  18. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_async_cloud_reco_exceptions.py +2 -2
  19. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_async_model_targets.py +108 -12
  20. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_async_vws_exceptions.py +9 -1
  21. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_cloud_reco_exceptions.py +2 -2
  22. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_model_targets.py +67 -78
  23. vws_python-2026.9.7/tests/test_transports.py +1111 -0
  24. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_vws_exceptions.py +9 -1
  25. vws_python-2026.8.14/.pre-commit-config.yaml +0 -457
  26. vws_python-2026.8.14/src/vws_python.egg-info/scm_version.json +0 -8
  27. vws_python-2026.8.14/tests/test_transports.py +0 -407
  28. {vws_python-2026.8.14 → vws_python-2026.9.7}/.git_archival.txt +0 -0
  29. {vws_python-2026.8.14 → vws_python-2026.9.7}/.gitattributes +0 -0
  30. {vws_python-2026.8.14 → vws_python-2026.9.7}/.github/dependabot.yml +0 -0
  31. {vws_python-2026.8.14 → vws_python-2026.9.7}/.github/workflows/dependabot-merge.yml +0 -0
  32. {vws_python-2026.8.14 → vws_python-2026.9.7}/.github/workflows/publish-site.yml +0 -0
  33. {vws_python-2026.8.14 → vws_python-2026.9.7}/.gitignore +0 -0
  34. {vws_python-2026.8.14 → vws_python-2026.9.7}/.prettierrc +0 -0
  35. {vws_python-2026.8.14 → vws_python-2026.9.7}/.vale.ini +0 -0
  36. {vws_python-2026.8.14 → vws_python-2026.9.7}/.vscode/extensions.json +0 -0
  37. {vws_python-2026.8.14 → vws_python-2026.9.7}/.vscode/settings.json +0 -0
  38. {vws_python-2026.8.14 → vws_python-2026.9.7}/CODE_OF_CONDUCT.rst +0 -0
  39. {vws_python-2026.8.14 → vws_python-2026.9.7}/LICENSE +0 -0
  40. {vws_python-2026.8.14 → vws_python-2026.9.7}/README.rst +0 -0
  41. {vws_python-2026.8.14 → vws_python-2026.9.7}/conftest.py +0 -0
  42. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/source/__init__.py +0 -0
  43. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/source/api-reference.rst +0 -0
  44. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/source/changelog.rst +0 -0
  45. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/source/conf.py +0 -0
  46. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/source/contributing.rst +0 -0
  47. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/source/exceptions.rst +0 -0
  48. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/source/release-process.rst +0 -0
  49. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/source/unreleased.rst +0 -0
  50. {vws_python-2026.8.14 → vws_python-2026.9.7}/docs/towncrier_template.rst.jinja +0 -0
  51. {vws_python-2026.8.14 → vws_python-2026.9.7}/newsfragments/.gitkeep +0 -0
  52. {vws_python-2026.8.14 → vws_python-2026.9.7}/setup.cfg +0 -0
  53. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/__init__.py +0 -0
  54. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/_async_vws_request.py +0 -0
  55. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/_image_utils.py +0 -0
  56. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/_reco_counts.py +0 -0
  57. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/_vws_request.py +0 -0
  58. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/async_model_target_service.py +0 -0
  59. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/async_query.py +0 -0
  60. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/async_vumark_service.py +0 -0
  61. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/async_vws.py +0 -0
  62. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/exceptions/__init__.py +0 -0
  63. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/exceptions/base_exceptions.py +0 -0
  64. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/exceptions/cloud_reco_exceptions.py +0 -0
  65. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/exceptions/custom_exceptions.py +0 -0
  66. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/exceptions/model_target_exceptions.py +0 -0
  67. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/exceptions/vws_exceptions.py +0 -0
  68. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/include_target_data.py +0 -0
  69. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/model_target_datasets.py +0 -0
  70. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/model_target_service.py +0 -0
  71. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/py.typed +0 -0
  72. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/query.py +0 -0
  73. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/reports.py +0 -0
  74. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/response.py +0 -0
  75. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/vumark_accept.py +0 -0
  76. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/vumark_service.py +0 -0
  77. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws/vws.py +0 -0
  78. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws_python.egg-info/dependency_links.txt +0 -0
  79. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws_python.egg-info/not-zip-safe +0 -0
  80. {vws_python-2026.8.14 → vws_python-2026.9.7}/src/vws_python.egg-info/top_level.txt +0 -0
  81. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/__init__.py +0 -0
  82. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/conftest.py +0 -0
  83. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_async_query.py +0 -0
  84. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_async_vws.py +0 -0
  85. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_query.py +0 -0
  86. {vws_python-2026.8.14 → vws_python-2026.9.7}/tests/test_vws.py +0 -0
  87. {vws_python-2026.8.14 → vws_python-2026.9.7}/zizmor.yml +0 -0
@@ -21,7 +21,7 @@ jobs:
21
21
  persist-credentials: false
22
22
 
23
23
  - name: Install uv
24
- uses: astral-sh/setup-uv@v9.0.0
24
+ uses: astral-sh/setup-uv@v10.0.1
25
25
 
26
26
  - name: Run fixers
27
27
  uses: j178/prek-action@v3.0.0
@@ -28,7 +28,7 @@ jobs:
28
28
  persist-credentials: false
29
29
 
30
30
  - name: Install uv
31
- uses: astral-sh/setup-uv@v9.0.0
31
+ uses: astral-sh/setup-uv@v10.0.1
32
32
  with:
33
33
  enable-cache: true
34
34
  cache-dependency-glob: '**/pyproject.toml'
@@ -29,7 +29,7 @@ jobs:
29
29
  persist-credentials: false
30
30
 
31
31
  - name: Install uv
32
- uses: astral-sh/setup-uv@v9.0.0
32
+ uses: astral-sh/setup-uv@v10.0.1
33
33
  with:
34
34
  enable-cache: true
35
35
  cache-dependency-glob: '**/pyproject.toml'
@@ -38,6 +38,7 @@ jobs:
38
38
  uses: j178/prek-action@v3.0.0
39
39
  with:
40
40
  prek-version: 0.4.11
41
+ cache: false
41
42
  extra-args: >-
42
43
  --all-files --hook-stage ${{ matrix.hook-stage }} --verbose
43
44
  env:
@@ -33,7 +33,7 @@ jobs:
33
33
  fetch-depth: 0
34
34
 
35
35
  - name: Install uv
36
- uses: astral-sh/setup-uv@v9.0.0
36
+ uses: astral-sh/setup-uv@v10.0.1
37
37
  with:
38
38
  enable-cache: true
39
39
  cache-dependency-glob: '**/pyproject.toml'
@@ -3,6 +3,17 @@ Changelog
3
3
 
4
4
  .. towncrier release notes start
5
5
 
6
+ 2026.09.07
7
+ ----------
8
+
9
+ - Add ``HTTPX2Transport`` and ``AsyncHTTPX2Transport``, which make requests with ``httpx2``, the continuation of ``httpx`` maintained by Pydantic. The ``requests`` and ``httpx`` transports are unchanged. ``httpx`` and ``httpx2`` objects are never mixed: the ``httpx`` transports raise ``httpx`` exceptions and the ``httpx2`` transports raise ``httpx2`` exceptions.
10
+
11
+ 2026.08.26
12
+ ----------
13
+
14
+ - Test synchronous and asynchronous Model Target error responses through the
15
+ public mock API, and include rate-limit and server-error branches in coverage.
16
+
6
17
  2026.08.14
7
18
  ----------
8
19
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: vws-python
3
- Version: 2026.8.14
3
+ Version: 2026.9.7
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
@@ -18,6 +18,7 @@ Description-Content-Type: text/x-rst
18
18
  License-File: LICENSE
19
19
  Requires-Dist: beartype>=0.22.9
20
20
  Requires-Dist: httpx>=0.28.0
21
+ Requires-Dist: httpx2>=2.12
21
22
  Requires-Dist: requests>=2.32.3
22
23
  Requires-Dist: urllib3>=2.2.3
23
24
  Requires-Dist: vws-auth-tools>=2024.7.12
@@ -26,49 +27,49 @@ Requires-Dist: actionlint-py==1.7.12.24; extra == "dev"
26
27
  Requires-Dist: check-manifest==0.51; extra == "dev"
27
28
  Requires-Dist: deptry==0.25.1; extra == "dev"
28
29
  Requires-Dist: doc8==2.0.0; extra == "dev"
29
- Requires-Dist: doccmd==2026.7.19; extra == "dev"
30
+ Requires-Dist: doccmd==2026.9.1; extra == "dev"
30
31
  Requires-Dist: freezegun==1.5.5; extra == "dev"
31
32
  Requires-Dist: furo==2025.12.19; extra == "dev"
32
33
  Requires-Dist: interrogate==1.7.0; extra == "dev"
33
- Requires-Dist: mypy[faster-cache]==2.3.0; extra == "dev"
34
- Requires-Dist: mypy-strict-kwargs==2026.7.19.1; extra == "dev"
35
- Requires-Dist: no-defaults==2.1.0; extra == "dev"
36
- Requires-Dist: prek==0.4.13; extra == "dev"
34
+ Requires-Dist: mypy[faster-cache]==2.3.1; extra == "dev"
35
+ Requires-Dist: mypy-strict-kwargs==2026.8.25.1; extra == "dev"
36
+ Requires-Dist: no-defaults==2026.9.1; extra == "dev"
37
+ Requires-Dist: prek==0.5.2; extra == "dev"
37
38
  Requires-Dist: pydocstringformatter==1.0.0; extra == "dev"
38
39
  Requires-Dist: pydocstyle==6.3; extra == "dev"
39
- Requires-Dist: pygments==2.20.0; extra == "dev"
40
- Requires-Dist: pylint[spelling]==4.0.7; extra == "dev"
40
+ Requires-Dist: pygments==2.21.0; extra == "dev"
41
+ Requires-Dist: pylint[spelling]==4.0.8; extra == "dev"
41
42
  Requires-Dist: pylint-per-file-ignores==3.2.1; extra == "dev"
42
- Requires-Dist: pyproject-fmt==2.27.0; extra == "dev"
43
+ Requires-Dist: pyproject-fmt==2.29.3; extra == "dev"
43
44
  Requires-Dist: pyrefly==1.2.0; extra == "dev"
44
45
  Requires-Dist: pyright==1.1.411; extra == "dev"
45
46
  Requires-Dist: pyroma==5.0.1; extra == "dev"
46
47
  Requires-Dist: pytest==9.1.1; extra == "dev"
47
48
  Requires-Dist: pytest-asyncio==1.4.0; extra == "dev"
48
- Requires-Dist: pytest-beartype-tests==2026.4.26; extra == "dev"
49
+ Requires-Dist: pytest-beartype-tests==2026.8.16; extra == "dev"
49
50
  Requires-Dist: pytest-cov==7.1.0; extra == "dev"
50
51
  Requires-Dist: pyyaml==6.0.3; extra == "dev"
51
- Requires-Dist: ruff==0.16.2; extra == "dev"
52
+ Requires-Dist: ruff==0.16.6; extra == "dev"
52
53
  Requires-Dist: shellcheck-py==0.11.0.1; extra == "dev"
53
- Requires-Dist: shfmt-py==4.0.0; extra == "dev"
54
+ Requires-Dist: shfmt-py==4.1.0; extra == "dev"
54
55
  Requires-Dist: sphinx==9.1.0; extra == "dev"
55
56
  Requires-Dist: sphinx-copybutton==0.5.2; extra == "dev"
56
57
  Requires-Dist: sphinx-lint==1.0.2; extra == "dev"
57
58
  Requires-Dist: sphinx-pyproject==0.3.0; extra == "dev"
58
- Requires-Dist: sphinx-substitution-extensions==2026.8.5; extra == "dev"
59
+ Requires-Dist: sphinx-substitution-extensions==2026.8.13.1; extra == "dev"
59
60
  Requires-Dist: sphinxcontrib-spelling==8.0.2; extra == "dev"
60
61
  Requires-Dist: sphinxcontrib-towncrier==0.5.0a0; extra == "dev"
61
- Requires-Dist: strict-kwargs==2026.7.24; extra == "dev"
62
+ Requires-Dist: strict-kwargs==2026.8.28.post2; extra == "dev"
62
63
  Requires-Dist: sybil==10.1.0; extra == "dev"
63
64
  Requires-Dist: towncrier==25.8.0; extra == "dev"
64
- Requires-Dist: ty==0.0.70; extra == "dev"
65
+ Requires-Dist: ty==0.0.78; extra == "dev"
65
66
  Requires-Dist: types-requests==2.33.0.20260712; extra == "dev"
66
- Requires-Dist: vale==3.13.0.0; extra == "dev"
67
+ Requires-Dist: vale==3.20.0.0; extra == "dev"
67
68
  Requires-Dist: vulture==2.16; extra == "dev"
68
- Requires-Dist: vws-python-mock==2026.8.14; extra == "dev"
69
- Requires-Dist: vws-test-fixtures==2023.3.5; extra == "dev"
69
+ Requires-Dist: vws-python-mock==2026.9.6; extra == "dev"
70
+ Requires-Dist: vws-test-fixtures==2026.8.26; extra == "dev"
70
71
  Requires-Dist: yamlfix==1.19.1; extra == "dev"
71
- Requires-Dist: zizmor==1.29.0; extra == "dev"
72
+ Requires-Dist: zizmor==1.30.0; extra == "dev"
72
73
  Provides-Extra: release
73
74
  Requires-Dist: check-wheel-contents==0.6.3; extra == "release"
74
75
  Requires-Dist: towncrier==25.8.0; extra == "release"
@@ -186,6 +186,44 @@ Dataset generation happens in the background, and the generated dataset is downl
186
186
  dataset_type=ModelTargetDatasetType.STANDARD,
187
187
  )
188
188
 
189
+ HTTP transports
190
+ ---------------
191
+
192
+ By default, the synchronous clients make requests with `requests`_ and the asynchronous clients make requests with `httpx`_.
193
+ To use another HTTP library, pass a transport from :mod:`vws.transports` to a client.
194
+
195
+ Transports are available for `requests`_, `httpx`_ and `HTTPX2`_.
196
+ ``httpx`` and ``httpx2`` are separate packages with separate client, response and exception classes.
197
+ ``HTTPXTransport`` and ``AsyncHTTPXTransport`` use ``httpx`` and raise ``httpx`` exceptions.
198
+ ``HTTPX2Transport`` and ``AsyncHTTPX2Transport`` use ``httpx2`` and raise ``httpx2`` exceptions.
199
+
200
+ .. clear-namespace
201
+
202
+ .. code-block:: python
203
+
204
+ """List targets using HTTPX2."""
205
+
206
+ import os
207
+
208
+ from vws import VWS
209
+ from vws.transports import HTTPX2Transport
210
+
211
+ server_access_key = os.environ["VWS_SERVER_ACCESS_KEY"]
212
+ server_secret_key = os.environ["VWS_SERVER_SECRET_KEY"]
213
+
214
+ vws_client = VWS(
215
+ server_access_key=server_access_key,
216
+ server_secret_key=server_secret_key,
217
+ transport=HTTPX2Transport(),
218
+ )
219
+
220
+ # This database has no targets.
221
+ assert not vws_client.list_targets()
222
+
223
+ .. _requests: https://pypi.org/project/requests/
224
+ .. _httpx: https://pypi.org/project/httpx/
225
+ .. _HTTPX2: https://httpx2.pydantic.dev/
226
+
189
227
  Testing
190
228
  -------
191
229