vws-python 2026.2.25.1__tar.gz → 2026.8.26__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.25.1 → vws_python-2026.8.26}/.github/dependabot.yml +5 -0
- vws_python-2026.8.26/.github/workflows/autofix.yml +37 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.github/workflows/ci.yml +3 -3
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.github/workflows/dependabot-merge.yml +2 -6
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.github/workflows/lint.yml +10 -11
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.github/workflows/publish-site.yml +1 -1
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.github/workflows/release.yml +21 -25
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.gitignore +3 -0
- vws_python-2026.8.26/.vale.ini +15 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/CHANGELOG.rst +28 -2
- {vws_python-2026.2.25.1/src/vws_python.egg-info → vws_python-2026.8.26}/PKG-INFO +36 -32
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/README.rst +1 -1
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/conftest.py +15 -11
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/docs/source/api-reference.rst +12 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/docs/source/conf.py +9 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/docs/source/exceptions.rst +9 -0
- vws_python-2026.8.26/docs/source/index.rst +254 -0
- vws_python-2026.8.26/docs/source/unreleased.rst +8 -0
- vws_python-2026.8.26/docs/towncrier_template.rst.jinja +14 -0
- vws_python-2026.8.26/prek.toml +528 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/pyproject.toml +253 -187
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/spelling_private_dict.txt +11 -1
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/__init__.py +4 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/_async_vws_request.py +2 -2
- vws_python-2026.8.26/src/vws/_model_targets.py +319 -0
- vws_python-2026.8.26/src/vws/_reco_counts.py +80 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/_vws_request.py +2 -2
- vws_python-2026.8.26/src/vws/async_model_target_service.py +381 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/async_query.py +31 -9
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/async_vumark_service.py +17 -32
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/async_vws.py +167 -49
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/exceptions/base_exceptions.py +26 -1
- vws_python-2026.8.26/src/vws/exceptions/custom_exceptions.py +107 -0
- vws_python-2026.8.26/src/vws/exceptions/model_target_exceptions.py +210 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/exceptions/vws_exceptions.py +76 -24
- vws_python-2026.8.26/src/vws/model_target_datasets.py +152 -0
- vws_python-2026.8.26/src/vws/model_target_service.py +366 -0
- vws_python-2026.8.26/src/vws/py.typed +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/query.py +30 -4
- vws_python-2026.8.26/src/vws/reports.py +391 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/response.py +1 -1
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/transports.py +71 -34
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/vumark_service.py +16 -29
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/vws.py +165 -46
- {vws_python-2026.2.25.1 → vws_python-2026.8.26/src/vws_python.egg-info}/PKG-INFO +36 -32
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws_python.egg-info/SOURCES.txt +16 -1
- vws_python-2026.8.26/src/vws_python.egg-info/requires.txt +58 -0
- vws_python-2026.8.26/src/vws_python.egg-info/scm_file_list.json +78 -0
- vws_python-2026.8.26/src/vws_python.egg-info/scm_version.json +8 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/conftest.py +96 -3
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/test_async_cloud_reco_exceptions.py +78 -4
- vws_python-2026.8.26/tests/test_async_model_targets.py +505 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/test_async_query.py +1 -1
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/test_async_vws.py +232 -1
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/test_async_vws_exceptions.py +133 -2
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/test_cloud_reco_exceptions.py +75 -4
- vws_python-2026.8.26/tests/test_model_targets.py +791 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/test_query.py +1 -1
- vws_python-2026.8.26/tests/test_transports.py +407 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/test_vws.py +259 -2
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/test_vws_exceptions.py +238 -6
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/zizmor.yml +1 -3
- vws_python-2026.2.25.1/.pre-commit-config.yaml +0 -408
- vws_python-2026.2.25.1/docs/source/index.rst +0 -127
- vws_python-2026.2.25.1/src/vws/exceptions/custom_exceptions.py +0 -52
- vws_python-2026.2.25.1/src/vws/reports.py +0 -188
- vws_python-2026.2.25.1/src/vws_python.egg-info/requires.txt +0 -53
- vws_python-2026.2.25.1/tests/test_transports.py +0 -206
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.git_archival.txt +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.gitattributes +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.prettierrc +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.vscode/extensions.json +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/.vscode/settings.json +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/CODE_OF_CONDUCT.rst +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/LICENSE +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/docs/source/__init__.py +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/docs/source/changelog.rst +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/docs/source/contributing.rst +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/docs/source/release-process.rst +0 -0
- /vws_python-2026.2.25.1/src/vws/py.typed → /vws_python-2026.8.26/newsfragments/.gitkeep +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/setup.cfg +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/_image_utils.py +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/exceptions/__init__.py +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/exceptions/cloud_reco_exceptions.py +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/include_target_data.py +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws/vumark_accept.py +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws_python.egg-info/dependency_links.txt +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws_python.egg-info/not-zip-safe +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/src/vws_python.egg-info/top_level.txt +0 -0
- {vws_python-2026.2.25.1 → vws_python-2026.8.26}/tests/__init__.py +0 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: autofix.ci
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
pull_request:
|
|
6
|
+
branches: [main]
|
|
7
|
+
push:
|
|
8
|
+
branches: [main]
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
autofix:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
steps:
|
|
17
|
+
- uses: actions/checkout@v7
|
|
18
|
+
with:
|
|
19
|
+
fetch-depth: 0
|
|
20
|
+
fetch-tags: true
|
|
21
|
+
persist-credentials: false
|
|
22
|
+
|
|
23
|
+
- name: Install uv
|
|
24
|
+
uses: astral-sh/setup-uv@v10.0.1
|
|
25
|
+
|
|
26
|
+
- name: Run fixers
|
|
27
|
+
uses: j178/prek-action@v3.0.0
|
|
28
|
+
with:
|
|
29
|
+
prek-version: 0.4.11
|
|
30
|
+
extra-args: >-
|
|
31
|
+
--all-files --hook-stage pre-commit --no-fail-fast --verbose
|
|
32
|
+
env:
|
|
33
|
+
UV_NO_CACHE: '1'
|
|
34
|
+
UV_PYTHON: 3.14
|
|
35
|
+
|
|
36
|
+
- uses: autofix-ci/action@v1.3.4
|
|
37
|
+
if: always()
|
|
@@ -17,18 +17,18 @@ jobs:
|
|
|
17
17
|
build:
|
|
18
18
|
strategy:
|
|
19
19
|
matrix:
|
|
20
|
-
python-version: ['3.
|
|
20
|
+
python-version: ['3.14']
|
|
21
21
|
platform: [ubuntu-latest, windows-latest]
|
|
22
22
|
|
|
23
23
|
runs-on: ${{ matrix.platform }}
|
|
24
24
|
|
|
25
25
|
steps:
|
|
26
|
-
- uses: actions/checkout@
|
|
26
|
+
- uses: actions/checkout@v7
|
|
27
27
|
with:
|
|
28
28
|
persist-credentials: false
|
|
29
29
|
|
|
30
30
|
- name: Install uv
|
|
31
|
-
uses: astral-sh/setup-uv@
|
|
31
|
+
uses: astral-sh/setup-uv@v10.0.1
|
|
32
32
|
with:
|
|
33
33
|
enable-cache: true
|
|
34
34
|
cache-dependency-glob: '**/pyproject.toml'
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
+
|
|
2
3
|
name: Dependabot auto-merge
|
|
3
4
|
on: pull_request
|
|
4
5
|
|
|
@@ -9,13 +10,8 @@ permissions:
|
|
|
9
10
|
jobs:
|
|
10
11
|
dependabot:
|
|
11
12
|
runs-on: ubuntu-latest
|
|
12
|
-
if: github.
|
|
13
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]'
|
|
13
14
|
steps:
|
|
14
|
-
- name: Dependabot metadata
|
|
15
|
-
id: metadata
|
|
16
|
-
uses: dependabot/fetch-metadata@v2
|
|
17
|
-
with:
|
|
18
|
-
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
19
15
|
- name: Enable auto-merge for Dependabot PRs
|
|
20
16
|
run: gh pr merge --auto --merge "$PR_URL"
|
|
21
17
|
env:
|
|
@@ -17,35 +17,34 @@ jobs:
|
|
|
17
17
|
build:
|
|
18
18
|
strategy:
|
|
19
19
|
matrix:
|
|
20
|
-
python-version: ['3.
|
|
20
|
+
python-version: ['3.14']
|
|
21
21
|
platform: [ubuntu-latest, windows-latest]
|
|
22
22
|
hook-stage: [pre-commit, pre-push, manual]
|
|
23
23
|
|
|
24
24
|
runs-on: ${{ matrix.platform }}
|
|
25
25
|
|
|
26
26
|
steps:
|
|
27
|
-
- uses: actions/checkout@
|
|
27
|
+
- uses: actions/checkout@v7
|
|
28
28
|
with:
|
|
29
29
|
persist-credentials: false
|
|
30
30
|
|
|
31
31
|
- name: Install uv
|
|
32
|
-
uses: astral-sh/setup-uv@
|
|
32
|
+
uses: astral-sh/setup-uv@v10.0.1
|
|
33
33
|
with:
|
|
34
34
|
enable-cache: true
|
|
35
35
|
cache-dependency-glob: '**/pyproject.toml'
|
|
36
36
|
|
|
37
37
|
- name: Lint
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
uses: j178/prek-action@v3.0.0
|
|
39
|
+
with:
|
|
40
|
+
prek-version: 0.4.11
|
|
41
|
+
cache: false
|
|
42
|
+
extra-args: >-
|
|
43
|
+
--all-files --hook-stage ${{ matrix.hook-stage }} --verbose
|
|
43
44
|
env:
|
|
45
|
+
UV_NO_CACHE: '1'
|
|
44
46
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
45
47
|
|
|
46
|
-
- uses: pre-commit-ci/lite-action@v1.1.0
|
|
47
|
-
if: always()
|
|
48
|
-
|
|
49
48
|
completion-lint:
|
|
50
49
|
needs: build
|
|
51
50
|
runs-on: ubuntu-latest
|
|
@@ -20,7 +20,7 @@ jobs:
|
|
|
20
20
|
contents: write
|
|
21
21
|
|
|
22
22
|
steps:
|
|
23
|
-
- uses: actions/checkout@
|
|
23
|
+
- uses: actions/checkout@v7
|
|
24
24
|
with: # zizmor: ignore[artipacked] git-auto-commit-action requires credentials
|
|
25
25
|
# See
|
|
26
26
|
# https://github.com/stefanzweifel/git-auto-commit-action?tab=readme-ov-file#push-to-protected-branches
|
|
@@ -33,7 +33,7 @@ jobs:
|
|
|
33
33
|
fetch-depth: 0
|
|
34
34
|
|
|
35
35
|
- name: Install uv
|
|
36
|
-
uses: astral-sh/setup-uv@
|
|
36
|
+
uses: astral-sh/setup-uv@v10.0.1
|
|
37
37
|
with:
|
|
38
38
|
enable-cache: true
|
|
39
39
|
cache-dependency-glob: '**/pyproject.toml'
|
|
@@ -47,33 +47,27 @@ jobs:
|
|
|
47
47
|
env:
|
|
48
48
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
50
|
+
# towncrier writes the rendered notes to stdout (informational
|
|
51
|
+
# chatter goes to stderr), so this is the curated release body for
|
|
52
|
+
# this version, not github-tag-action's commit-derived changelog.
|
|
53
|
+
- name: Generate the GitHub release notes
|
|
54
|
+
env:
|
|
55
|
+
RELEASE: ${{ steps.calver.outputs.release }}
|
|
56
|
+
run: uv run --extra=release towncrier build --draft --version "$RELEASE" >
|
|
57
|
+
release-notes.md
|
|
55
58
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
\ }}\n"
|
|
63
|
-
include: CHANGELOG.rst
|
|
64
|
-
regex: false
|
|
59
|
+
# Assemble the same fragments into CHANGELOG.rst under a new
|
|
60
|
+
# ``$RELEASE`` section and delete the consumed fragment files.
|
|
61
|
+
- name: Update the changelog
|
|
62
|
+
env:
|
|
63
|
+
RELEASE: ${{ steps.calver.outputs.release }}
|
|
64
|
+
run: uv run --extra=release towncrier build --yes --version "$RELEASE"
|
|
65
65
|
|
|
66
|
-
- name: Check Update changelog was modified
|
|
67
|
-
run: |
|
|
68
|
-
if [ "${{ steps.update_changelog.outputs.modifiedFiles }}" = "0" ]; then
|
|
69
|
-
echo "Error: No files were modified when updating changelog"
|
|
70
|
-
exit 1
|
|
71
|
-
fi
|
|
72
66
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
|
73
67
|
id: commit
|
|
74
68
|
with:
|
|
75
69
|
commit_message: Bump CHANGELOG
|
|
76
|
-
file_pattern: CHANGELOG.rst
|
|
70
|
+
file_pattern: CHANGELOG.rst newsfragments
|
|
77
71
|
# Error if there are no changes.
|
|
78
72
|
skip_dirty_check: true
|
|
79
73
|
|
|
@@ -92,12 +86,14 @@ jobs:
|
|
|
92
86
|
tag: ${{ steps.tag_version.outputs.new_tag }}
|
|
93
87
|
makeLatest: true
|
|
94
88
|
name: Release ${{ steps.tag_version.outputs.new_tag }}
|
|
95
|
-
|
|
89
|
+
bodyFile: release-notes.md
|
|
96
90
|
|
|
97
91
|
- name: Build a binary wheel and a source tarball
|
|
92
|
+
env:
|
|
93
|
+
NEW_TAG: ${{ steps.tag_version.outputs.new_tag }}
|
|
98
94
|
run: |
|
|
99
95
|
git fetch --tags
|
|
100
|
-
git checkout $
|
|
96
|
+
git checkout "$NEW_TAG"
|
|
101
97
|
uv build --sdist --wheel --out-dir dist/
|
|
102
98
|
uv run --extra=release check-wheel-contents dist/*.whl
|
|
103
99
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
StylesPath = styles
|
|
2
|
+
MinAlertLevel = error
|
|
3
|
+
|
|
4
|
+
Packages = https://github.com/tbhb/vale-ai-tells/releases/download/v1.29.0/ai-tells.zip
|
|
5
|
+
|
|
6
|
+
[*.{rst,md}]
|
|
7
|
+
BasedOnStyles = ai-tells
|
|
8
|
+
|
|
9
|
+
# These rules misclassify established technical, example, or release-note prose
|
|
10
|
+
# in this repository. All other ai-tells rules remain enforced.
|
|
11
|
+
ai-tells.ColonUsage = NO
|
|
12
|
+
ai-tells.FigurativeLands = NO
|
|
13
|
+
ai-tells.FormalTransitions = NO
|
|
14
|
+
ai-tells.OverusedVocabularyVerbs = NO
|
|
15
|
+
ai-tells.VerbTricolon = NO
|
|
@@ -1,8 +1,34 @@
|
|
|
1
1
|
Changelog
|
|
2
2
|
=========
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
.. towncrier release notes start
|
|
5
|
+
|
|
6
|
+
2026.08.26
|
|
7
|
+
----------
|
|
8
|
+
|
|
9
|
+
- Test synchronous and asynchronous Model Target error responses through the
|
|
10
|
+
public mock API, and include rate-limit and server-error branches in coverage.
|
|
11
|
+
|
|
12
|
+
2026.08.14
|
|
13
|
+
----------
|
|
14
|
+
|
|
15
|
+
- Drop Python 3.13 support, update VWS Python Mock, and test quota and project-state error responses against the mock.
|
|
16
|
+
|
|
17
|
+
- Add ``QuotaExceededError``, ``LicenseCheckFailedError``, and ``AuthorizationFailedError`` for documented VuMark Generation API result codes.
|
|
18
|
+
|
|
19
|
+
- Fix ``target_id`` on target exceptions when ``base_vws_url`` includes a path prefix.
|
|
20
|
+
|
|
21
|
+
- Retain explicitly provided falsy custom transports instead of replacing them with defaults.
|
|
22
|
+
|
|
23
|
+
- Raise a response-carrying ``CloudRecoError`` when Cloud Query returns a documented empty or non-JSON 4xx response instead of leaking ``JSONDecodeError``.
|
|
24
|
+
|
|
25
|
+
- Add support for the Model Target Web API.
|
|
26
|
+
``ModelTargetService`` and ``AsyncModelTargetService`` create standard and advanced Model Target datasets, wait for them to be generated, download them and delete them.
|
|
27
|
+
|
|
28
|
+
- Map the ``ProjectHasNoApiAccess`` result code, as spelled in Vuforia's result codes table, to ``ProjectHasNoAPIAccessError``. The previously mapped ``ProjectHasNoAPIAccess`` casing, which Vuforia does not document, is no longer mapped.
|
|
29
|
+
|
|
30
|
+
- Add support for the Database Reco Counts report.
|
|
31
|
+
``VWS`` and ``AsyncVWS`` take an optional ``database_id``, and have new ``request_database_reco_counts_report``, ``download_reco_counts_report`` and ``wait_for_reco_counts_report`` methods.
|
|
6
32
|
|
|
7
33
|
2026.02.25.1
|
|
8
34
|
------------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vws-python
|
|
3
|
-
Version: 2026.
|
|
3
|
+
Version: 2026.8.26
|
|
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
|
|
@@ -12,9 +12,8 @@ Classifier: Environment :: Web Environment
|
|
|
12
12
|
Classifier: Operating System :: Microsoft :: Windows
|
|
13
13
|
Classifier: Operating System :: POSIX
|
|
14
14
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
|
-
Classifier: Programming Language :: Python :: 3.13
|
|
16
15
|
Classifier: Programming Language :: Python :: 3.14
|
|
17
|
-
Requires-Python: >=3.
|
|
16
|
+
Requires-Python: >=3.14
|
|
18
17
|
Description-Content-Type: text/x-rst
|
|
19
18
|
License-File: LICENSE
|
|
20
19
|
Requires-Dist: beartype>=0.22.9
|
|
@@ -23,51 +22,56 @@ Requires-Dist: requests>=2.32.3
|
|
|
23
22
|
Requires-Dist: urllib3>=2.2.3
|
|
24
23
|
Requires-Dist: vws-auth-tools>=2024.7.12
|
|
25
24
|
Provides-Extra: dev
|
|
26
|
-
Requires-Dist: actionlint-py==1.7.
|
|
25
|
+
Requires-Dist: actionlint-py==1.7.12.24; extra == "dev"
|
|
27
26
|
Requires-Dist: check-manifest==0.51; extra == "dev"
|
|
28
|
-
Requires-Dist: deptry==0.
|
|
27
|
+
Requires-Dist: deptry==0.25.1; extra == "dev"
|
|
29
28
|
Requires-Dist: doc8==2.0.0; extra == "dev"
|
|
30
|
-
Requires-Dist: doccmd==2026.
|
|
29
|
+
Requires-Dist: doccmd==2026.8.16; extra == "dev"
|
|
31
30
|
Requires-Dist: freezegun==1.5.5; extra == "dev"
|
|
32
31
|
Requires-Dist: furo==2025.12.19; extra == "dev"
|
|
33
32
|
Requires-Dist: interrogate==1.7.0; extra == "dev"
|
|
34
|
-
Requires-Dist: mypy[faster-cache]==
|
|
35
|
-
Requires-Dist: mypy-strict-kwargs==2026.1
|
|
36
|
-
Requires-Dist:
|
|
37
|
-
Requires-Dist:
|
|
33
|
+
Requires-Dist: mypy[faster-cache]==2.3.1; extra == "dev"
|
|
34
|
+
Requires-Dist: mypy-strict-kwargs==2026.8.25.1; extra == "dev"
|
|
35
|
+
Requires-Dist: no-defaults==2.1.0; extra == "dev"
|
|
36
|
+
Requires-Dist: prek==0.4.14; extra == "dev"
|
|
37
|
+
Requires-Dist: pydocstringformatter==1.0.0; extra == "dev"
|
|
38
38
|
Requires-Dist: pydocstyle==6.3; extra == "dev"
|
|
39
|
-
Requires-Dist: pygments==2.
|
|
40
|
-
Requires-Dist: pylint[spelling]==4.0.
|
|
41
|
-
Requires-Dist: pylint-per-file-ignores==3.2.
|
|
42
|
-
Requires-Dist: pyproject-fmt==2.
|
|
43
|
-
Requires-Dist: pyrefly==
|
|
44
|
-
Requires-Dist: pyright==1.1.
|
|
39
|
+
Requires-Dist: pygments==2.21.0; extra == "dev"
|
|
40
|
+
Requires-Dist: pylint[spelling]==4.0.7; extra == "dev"
|
|
41
|
+
Requires-Dist: pylint-per-file-ignores==3.2.1; extra == "dev"
|
|
42
|
+
Requires-Dist: pyproject-fmt==2.28.0; extra == "dev"
|
|
43
|
+
Requires-Dist: pyrefly==1.2.0; extra == "dev"
|
|
44
|
+
Requires-Dist: pyright==1.1.411; extra == "dev"
|
|
45
45
|
Requires-Dist: pyroma==5.0.1; extra == "dev"
|
|
46
|
-
Requires-Dist: pytest==9.
|
|
47
|
-
Requires-Dist: pytest-asyncio==1.
|
|
48
|
-
Requires-Dist: pytest-
|
|
46
|
+
Requires-Dist: pytest==9.1.1; extra == "dev"
|
|
47
|
+
Requires-Dist: pytest-asyncio==1.4.0; extra == "dev"
|
|
48
|
+
Requires-Dist: pytest-beartype-tests==2026.8.16; extra == "dev"
|
|
49
|
+
Requires-Dist: pytest-cov==7.1.0; extra == "dev"
|
|
49
50
|
Requires-Dist: pyyaml==6.0.3; extra == "dev"
|
|
50
|
-
Requires-Dist: ruff==0.
|
|
51
|
+
Requires-Dist: ruff==0.16.4; extra == "dev"
|
|
51
52
|
Requires-Dist: shellcheck-py==0.11.0.1; extra == "dev"
|
|
52
|
-
Requires-Dist: shfmt-py==
|
|
53
|
+
Requires-Dist: shfmt-py==4.0.0; extra == "dev"
|
|
53
54
|
Requires-Dist: sphinx==9.1.0; extra == "dev"
|
|
54
55
|
Requires-Dist: sphinx-copybutton==0.5.2; extra == "dev"
|
|
55
56
|
Requires-Dist: sphinx-lint==1.0.2; extra == "dev"
|
|
56
57
|
Requires-Dist: sphinx-pyproject==0.3.0; extra == "dev"
|
|
57
|
-
Requires-Dist: sphinx-substitution-extensions==2026.1
|
|
58
|
+
Requires-Dist: sphinx-substitution-extensions==2026.8.13.1; extra == "dev"
|
|
58
59
|
Requires-Dist: sphinxcontrib-spelling==8.0.2; extra == "dev"
|
|
59
|
-
Requires-Dist:
|
|
60
|
-
Requires-Dist:
|
|
61
|
-
Requires-Dist:
|
|
62
|
-
Requires-Dist:
|
|
63
|
-
Requires-Dist:
|
|
64
|
-
Requires-Dist:
|
|
65
|
-
Requires-Dist:
|
|
66
|
-
Requires-Dist:
|
|
60
|
+
Requires-Dist: sphinxcontrib-towncrier==0.5.0a0; extra == "dev"
|
|
61
|
+
Requires-Dist: strict-kwargs==2026.8.16; extra == "dev"
|
|
62
|
+
Requires-Dist: sybil==10.1.0; extra == "dev"
|
|
63
|
+
Requires-Dist: towncrier==25.8.0; extra == "dev"
|
|
64
|
+
Requires-Dist: ty==0.0.74; extra == "dev"
|
|
65
|
+
Requires-Dist: types-requests==2.33.0.20260712; extra == "dev"
|
|
66
|
+
Requires-Dist: vale==3.18.0.0; extra == "dev"
|
|
67
|
+
Requires-Dist: vulture==2.16; extra == "dev"
|
|
68
|
+
Requires-Dist: vws-python-mock==2026.8.26.1; extra == "dev"
|
|
69
|
+
Requires-Dist: vws-test-fixtures==2026.8.23; extra == "dev"
|
|
67
70
|
Requires-Dist: yamlfix==1.19.1; extra == "dev"
|
|
68
|
-
Requires-Dist: zizmor==1.
|
|
71
|
+
Requires-Dist: zizmor==1.29.0; extra == "dev"
|
|
69
72
|
Provides-Extra: release
|
|
70
73
|
Requires-Dist: check-wheel-contents==0.6.3; extra == "release"
|
|
74
|
+
Requires-Dist: towncrier==25.8.0; extra == "release"
|
|
71
75
|
Dynamic: license-file
|
|
72
76
|
|
|
73
77
|
|Build Status| |PyPI|
|
|
@@ -145,4 +149,4 @@ See the `full documentation <https://vws-python.github.io/vws-python/>`__.
|
|
|
145
149
|
:target: https://github.com/VWS-Python/vws-python/actions
|
|
146
150
|
.. |PyPI| image:: https://badge.fury.io/py/VWS-Python.svg
|
|
147
151
|
:target: https://badge.fury.io/py/VWS-Python
|
|
148
|
-
.. |minimum-python-version| replace:: 3.
|
|
152
|
+
.. |minimum-python-version| replace:: 3.14
|
|
@@ -73,4 +73,4 @@ See the `full documentation <https://vws-python.github.io/vws-python/>`__.
|
|
|
73
73
|
:target: https://github.com/VWS-Python/vws-python/actions
|
|
74
74
|
.. |PyPI| image:: https://badge.fury.io/py/VWS-Python.svg
|
|
75
75
|
:target: https://badge.fury.io/py/VWS-Python
|
|
76
|
-
.. |minimum-python-version| replace:: 3.
|
|
76
|
+
.. |minimum-python-version| replace:: 3.14
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"""Setup for Sybil."""
|
|
2
2
|
|
|
3
|
-
import io
|
|
3
|
+
import io # noqa: TC003
|
|
4
4
|
import uuid
|
|
5
|
-
from collections.abc import Generator
|
|
5
|
+
from collections.abc import Generator # noqa: TC003
|
|
6
6
|
from doctest import ELLIPSIS
|
|
7
7
|
from pathlib import Path
|
|
8
8
|
|
|
9
9
|
import pytest
|
|
10
|
-
from beartype import beartype
|
|
11
10
|
from mock_vws import MockVWS
|
|
12
11
|
from mock_vws.database import CloudDatabase
|
|
13
12
|
from sybil import Sybil
|
|
@@ -18,14 +17,6 @@ from sybil.parsers.rest import (
|
|
|
18
17
|
)
|
|
19
18
|
|
|
20
19
|
|
|
21
|
-
@beartype
|
|
22
|
-
def pytest_collection_modifyitems(items: list[pytest.Item]) -> None:
|
|
23
|
-
"""Apply the beartype decorator to all collected test functions."""
|
|
24
|
-
for item in items:
|
|
25
|
-
if isinstance(item, pytest.Function):
|
|
26
|
-
item.obj = beartype(obj=item.obj)
|
|
27
|
-
|
|
28
|
-
|
|
29
20
|
@pytest.fixture(name="make_image_file")
|
|
30
21
|
def fixture_make_image_file(
|
|
31
22
|
*,
|
|
@@ -55,18 +46,31 @@ def fixture_mock_vws(
|
|
|
55
46
|
server_secret_key = uuid.uuid4().hex
|
|
56
47
|
client_access_key = uuid.uuid4().hex
|
|
57
48
|
client_secret_key = uuid.uuid4().hex
|
|
49
|
+
database_id = uuid.uuid4().hex
|
|
58
50
|
|
|
59
51
|
database = CloudDatabase(
|
|
60
52
|
server_access_key=server_access_key,
|
|
61
53
|
server_secret_key=server_secret_key,
|
|
62
54
|
client_access_key=client_access_key,
|
|
63
55
|
client_secret_key=client_secret_key,
|
|
56
|
+
database_id=database_id,
|
|
64
57
|
)
|
|
65
58
|
|
|
66
59
|
monkeypatch.setenv(name="VWS_SERVER_ACCESS_KEY", value=server_access_key)
|
|
67
60
|
monkeypatch.setenv(name="VWS_SERVER_SECRET_KEY", value=server_secret_key)
|
|
68
61
|
monkeypatch.setenv(name="VWS_CLIENT_ACCESS_KEY", value=client_access_key)
|
|
69
62
|
monkeypatch.setenv(name="VWS_CLIENT_SECRET_KEY", value=client_secret_key)
|
|
63
|
+
monkeypatch.setenv(name="VWS_DATABASE_ID", value=database_id)
|
|
64
|
+
# The mock accepts one hard-coded pair of Model Target Web API OAuth2
|
|
65
|
+
# credentials, which it does not expose.
|
|
66
|
+
monkeypatch.setenv(
|
|
67
|
+
name="VWS_MODEL_TARGET_CLIENT_ID",
|
|
68
|
+
value="client-id",
|
|
69
|
+
)
|
|
70
|
+
monkeypatch.setenv(
|
|
71
|
+
name="VWS_MODEL_TARGET_CLIENT_SECRET",
|
|
72
|
+
value="client-secret",
|
|
73
|
+
)
|
|
70
74
|
# We use a low processing time so that tests run quickly.
|
|
71
75
|
with MockVWS(processing_time_seconds=0.2) as mock:
|
|
72
76
|
mock.add_cloud_database(cloud_database=database)
|
|
@@ -17,6 +17,18 @@ API Reference
|
|
|
17
17
|
:undoc-members:
|
|
18
18
|
:members:
|
|
19
19
|
|
|
20
|
+
.. automodule:: vws.model_target_service
|
|
21
|
+
:undoc-members:
|
|
22
|
+
:members:
|
|
23
|
+
|
|
24
|
+
.. automodule:: vws.async_model_target_service
|
|
25
|
+
:undoc-members:
|
|
26
|
+
:members:
|
|
27
|
+
|
|
28
|
+
.. automodule:: vws.model_target_datasets
|
|
29
|
+
:undoc-members:
|
|
30
|
+
:members:
|
|
31
|
+
|
|
20
32
|
.. automodule:: vws.reports
|
|
21
33
|
:undoc-members:
|
|
22
34
|
:members:
|
|
@@ -23,8 +23,17 @@ extensions = [
|
|
|
23
23
|
"sphinx.ext.napoleon",
|
|
24
24
|
"sphinx_substitution_extensions",
|
|
25
25
|
"sphinxcontrib.spelling",
|
|
26
|
+
"sphinxcontrib.towncrier.ext",
|
|
26
27
|
]
|
|
27
28
|
|
|
29
|
+
# Render the unreleased ``newsfragments/`` entries into
|
|
30
|
+
# ``docs/source/unreleased.rst`` so the Sphinx spelling, doc-build and
|
|
31
|
+
# link-checking gates cover the prose before it is assembled into
|
|
32
|
+
# CHANGELOG.rst at release time.
|
|
33
|
+
towncrier_draft_autoversion_mode = "draft"
|
|
34
|
+
towncrier_draft_include_empty = True
|
|
35
|
+
towncrier_draft_working_directory = f"{_pyproject_file.parent}"
|
|
36
|
+
|
|
28
37
|
templates_path = ["_templates"]
|
|
29
38
|
source_suffix = ".rst"
|
|
30
39
|
master_doc = "index"
|
|
@@ -28,6 +28,15 @@ CloudRecoService exceptions
|
|
|
28
28
|
:inherited-members: Exception
|
|
29
29
|
:exclude-members: errno, filename, filename2, strerror
|
|
30
30
|
|
|
31
|
+
ModelTargetService exceptions
|
|
32
|
+
-----------------------------
|
|
33
|
+
|
|
34
|
+
.. automodule:: vws.exceptions.model_target_exceptions
|
|
35
|
+
:members:
|
|
36
|
+
:show-inheritance:
|
|
37
|
+
:inherited-members: Exception
|
|
38
|
+
:exclude-members: errno, filename, filename2, strerror
|
|
39
|
+
|
|
31
40
|
Custom exceptions
|
|
32
41
|
-----------------
|
|
33
42
|
|