vws-python-mock 2026.2.22.2__tar.gz → 2026.4.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_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.github/workflows/dependabot-merge.yml +1 -6
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.github/workflows/docker-build.yml +4 -4
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.github/workflows/lint.yml +1 -1
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.github/workflows/publish-site.yml +1 -1
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.github/workflows/release.yml +18 -10
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.github/workflows/test.yml +20 -14
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.gitignore +2 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.pre-commit-config.yaml +66 -32
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/CHANGELOG.rst +11 -0
- {vws_python_mock-2026.2.22.2/src/vws_python_mock.egg-info → vws_python_mock-2026.4.26}/PKG-INFO +38 -45
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/README.rst +9 -15
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/admin/create_secrets_files.py +133 -72
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/ci/test_custom_linters.py +49 -31
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/conftest.py +0 -9
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docker-bake.hcl +6 -6
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/basic-example.rst +2 -1
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/conf.py +4 -1
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/contributing.rst +1 -4
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/docker.rst +6 -6
- vws_python_mock-2026.4.26/docs/source/getting-started.rst +9 -0
- vws_python_mock-2026.4.26/docs/source/httpx-example.rst +18 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/index.rst +2 -5
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/mock-api-reference.rst +2 -6
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/pyproject.toml +73 -62
- vws_python_mock-2026.4.26/secrets.tar.gpg +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/spelling_private_dict.txt +3 -0
- vws_python_mock-2026.4.26/src/mock_vws/__init__.py +9 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_flask_server/Dockerfile +1 -1
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_flask_server/healthcheck.py +1 -1
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_flask_server/target_manager.py +5 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_mock_common.py +25 -2
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/exceptions.py +3 -5
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/image_validators.py +10 -10
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_requests_mock_server/decorators.py +38 -38
- vws_python_mock-2026.4.26/src/mock_vws/_respx_mock_server/decorators.py +183 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/image_validators.py +14 -16
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/key_validators.py +1 -1
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/project_state_validators.py +8 -4
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/database.py +6 -2
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/image_matchers.py +21 -9
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/target.py +5 -6
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/target_raters.py +14 -9
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26/src/vws_python_mock.egg-info}/PKG-INFO +38 -45
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/vws_python_mock.egg-info/requires.txt +26 -27
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/conftest.py +19 -11
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/fixtures/credentials.py +41 -2
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/fixtures/prepared_requests.py +10 -2
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/fixtures/vuforia_backends.py +61 -25
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_flask_app_usage.py +1 -1
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_query.py +8 -12
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_requests_mock_usage.py +48 -0
- vws_python_mock-2026.4.26/tests/mock_vws/test_respx_mock_usage.py +161 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_vumark_generation_api.py +82 -72
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/utils/__init__.py +1 -1
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/vuforia_secrets.env.example +5 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/zizmor.yml +1 -3
- vws_python_mock-2026.2.22.2/docs/source/getting-started.rst +0 -12
- vws_python_mock-2026.2.22.2/docs/source/httpx-example.rst +0 -22
- vws_python_mock-2026.2.22.2/secrets.tar.gpg +0 -0
- vws_python_mock-2026.2.22.2/src/mock_vws/__init__.py +0 -13
- vws_python_mock-2026.2.22.2/src/mock_vws/_respx_mock_server/decorators.py +0 -287
- vws_python_mock-2026.2.22.2/tests/mock_vws/test_respx_mock_usage.py +0 -467
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.git_archival.txt +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.gitattributes +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.github/dependabot.yml +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.prettierrc +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.vscode/extensions.json +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.vscode/settings.json +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/CODE_OF_CONDUCT.rst +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/LICENSE +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/MANIFEST.in +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/admin/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/admin/vumark_template.svg +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/ci/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/ci/decrypt_secret.sh +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/changelog.rst +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/ci-setup.rst +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/differences-to-vws.rst +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/installation.rst +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/release-process.rst +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/docs/source/versioning-and-api-stability.rst +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/setup.cfg +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_base64_decoding.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_constants.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_database_matchers.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_flask_server/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_flask_server/vwq.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_flask_server/vws.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_tools.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/accept_header_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/auth_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/content_length_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/content_type_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/date_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/fields_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/include_target_data_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/num_results_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_query_validators/project_state_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_requests_mock_server/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_requests_mock_server/mock_web_query_api.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_requests_mock_server/mock_web_services_api.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_respx_mock_server/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/active_flag_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/auth_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/content_length_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/content_type_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/date_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/exceptions.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/json_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/metadata_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/name_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/target_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/_services_validators/width_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/database_type.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/py.typed +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/states.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/mock_vws/target_manager.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/vws_python_mock.egg-info/SOURCES.txt +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/vws_python_mock.egg-info/dependency_links.txt +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/vws_python_mock.egg-info/not-zip-safe +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/src/vws_python_mock.egg-info/top_level.txt +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/fixtures/__init__.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_add_target.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_authorization_header.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_content_length.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_database_summary.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_date_header.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_delete_target.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_docker.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_get_duplicates.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_get_target.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_invalid_given_id.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_invalid_json.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_target_list.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_target_raters.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_target_summary.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_target_validators.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_unexpected_json.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/test_update_target.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/utils/assertions.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/utils/retries.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/utils/too_many_requests.py +0 -0
- {vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/tests/mock_vws/utils/usage_test_helpers.py +0 -0
{vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.github/workflows/dependabot-merge.yml
RENAMED
|
@@ -10,13 +10,8 @@ permissions:
|
|
|
10
10
|
jobs:
|
|
11
11
|
dependabot:
|
|
12
12
|
runs-on: ubuntu-latest
|
|
13
|
-
if: github.
|
|
13
|
+
if: github.event.pull_request.user.login == 'dependabot[bot]'
|
|
14
14
|
steps:
|
|
15
|
-
- name: Dependabot metadata
|
|
16
|
-
id: metadata
|
|
17
|
-
uses: dependabot/fetch-metadata@v2
|
|
18
|
-
with:
|
|
19
|
-
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
20
15
|
- name: Enable auto-merge for Dependabot PRs
|
|
21
16
|
run: gh pr merge --auto --merge "$PR_URL"
|
|
22
17
|
env:
|
{vws_python_mock-2026.2.22.2 → vws_python_mock-2026.4.26}/.github/workflows/docker-build.yml
RENAMED
|
@@ -29,17 +29,17 @@ jobs:
|
|
|
29
29
|
persist-credentials: false
|
|
30
30
|
|
|
31
31
|
- name: Set up QEMU
|
|
32
|
-
uses: docker/setup-qemu-action@
|
|
32
|
+
uses: docker/setup-qemu-action@v4
|
|
33
33
|
|
|
34
34
|
- name: Set up Docker Buildx
|
|
35
|
-
uses: docker/setup-buildx-action@
|
|
35
|
+
uses: docker/setup-buildx-action@v4
|
|
36
36
|
|
|
37
37
|
- name: Check Docker bake definition
|
|
38
|
-
uses: docker/bake-action@
|
|
38
|
+
uses: docker/bake-action@v7.1.0
|
|
39
39
|
with:
|
|
40
40
|
call: check
|
|
41
41
|
|
|
42
42
|
- name: Build Docker images
|
|
43
|
-
uses: docker/bake-action@
|
|
43
|
+
uses: docker/bake-action@v7.1.0
|
|
44
44
|
with:
|
|
45
45
|
push: false
|
|
@@ -7,6 +7,7 @@ jobs:
|
|
|
7
7
|
release:
|
|
8
8
|
name: Create release
|
|
9
9
|
runs-on: ubuntu-latest
|
|
10
|
+
environment: release
|
|
10
11
|
|
|
11
12
|
permissions:
|
|
12
13
|
# This is needed for https://github.com/stefanzweifel/git-auto-commit-action.
|
|
@@ -44,8 +45,10 @@ jobs:
|
|
|
44
45
|
|
|
45
46
|
- name: Get the changelog underline
|
|
46
47
|
id: changelog_underline
|
|
48
|
+
env:
|
|
49
|
+
RELEASE: ${{ steps.calver.outputs.release }}
|
|
47
50
|
run: |
|
|
48
|
-
underline="$(echo "$
|
|
51
|
+
underline="$(echo "$RELEASE" | tr -c '\n' '-')"
|
|
49
52
|
echo "underline=${underline}" >> "$GITHUB_OUTPUT"
|
|
50
53
|
|
|
51
54
|
- name: Update changelog
|
|
@@ -63,8 +66,10 @@ jobs:
|
|
|
63
66
|
regex: false
|
|
64
67
|
|
|
65
68
|
- name: Check Update changelog was modified
|
|
69
|
+
env:
|
|
70
|
+
MODIFIED_FILES: ${{ steps.update_changelog.outputs.modifiedFiles }}
|
|
66
71
|
run: |
|
|
67
|
-
if [ "$
|
|
72
|
+
if [ "$MODIFIED_FILES" = "0" ]; then
|
|
68
73
|
echo "Error: No files were modified when updating changelog"
|
|
69
74
|
exit 1
|
|
70
75
|
fi
|
|
@@ -138,8 +143,10 @@ jobs:
|
|
|
138
143
|
name: Publish Docker images
|
|
139
144
|
needs: release
|
|
140
145
|
runs-on: ubuntu-latest
|
|
146
|
+
environment: dockerhub
|
|
141
147
|
|
|
142
|
-
permissions:
|
|
148
|
+
permissions:
|
|
149
|
+
packages: write
|
|
143
150
|
|
|
144
151
|
steps:
|
|
145
152
|
- uses: actions/checkout@v6
|
|
@@ -147,20 +154,21 @@ jobs:
|
|
|
147
154
|
ref: ${{ needs.release.outputs.tag }}
|
|
148
155
|
persist-credentials: false
|
|
149
156
|
|
|
150
|
-
- name: Login to
|
|
151
|
-
uses: docker/login-action@
|
|
157
|
+
- name: Login to GHCR
|
|
158
|
+
uses: docker/login-action@v4
|
|
152
159
|
with:
|
|
153
|
-
|
|
154
|
-
|
|
160
|
+
registry: ghcr.io
|
|
161
|
+
username: ${{ github.actor }}
|
|
162
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
155
163
|
|
|
156
164
|
- name: Set up Docker Buildx
|
|
157
|
-
uses: docker/setup-buildx-action@
|
|
165
|
+
uses: docker/setup-buildx-action@v4
|
|
158
166
|
|
|
159
167
|
- name: Set up QEMU
|
|
160
|
-
uses: docker/setup-qemu-action@
|
|
168
|
+
uses: docker/setup-qemu-action@v4
|
|
161
169
|
|
|
162
170
|
- name: Build and push Docker images
|
|
163
|
-
uses: docker/bake-action@
|
|
171
|
+
uses: docker/bake-action@v7.1.0
|
|
164
172
|
with:
|
|
165
173
|
push: true
|
|
166
174
|
env:
|
|
@@ -22,10 +22,11 @@ jobs:
|
|
|
22
22
|
# CI tests with matrix
|
|
23
23
|
ci-tests:
|
|
24
24
|
runs-on: ubuntu-latest
|
|
25
|
+
environment: vuforia
|
|
25
26
|
strategy:
|
|
26
27
|
fail-fast: false
|
|
27
28
|
matrix:
|
|
28
|
-
python-version: ['3.
|
|
29
|
+
python-version: ['3.14']
|
|
29
30
|
ci_pattern:
|
|
30
31
|
- tests/mock_vws/test_query.py::TestContentType
|
|
31
32
|
- tests/mock_vws/test_query.py::TestSuccess
|
|
@@ -112,11 +113,14 @@ jobs:
|
|
|
112
113
|
- tests/mock_vws/test_update_target.py::TestWidth
|
|
113
114
|
- tests/mock_vws/test_update_target.py::TestInactiveProject
|
|
114
115
|
- tests/mock_vws/test_requests_mock_usage.py
|
|
116
|
+
- tests/mock_vws/test_respx_mock_usage.py
|
|
115
117
|
- tests/mock_vws/test_flask_app_usage.py
|
|
116
118
|
- tests/mock_vws/test_vumark_generation_api.py
|
|
119
|
+
- tests/mock_vws/test_target_validators.py
|
|
117
120
|
- tests/mock_vws/test_docker.py
|
|
121
|
+
- ci/test_custom_linters.py
|
|
118
122
|
- README.rst
|
|
119
|
-
- docs/
|
|
123
|
+
- docs/
|
|
120
124
|
|
|
121
125
|
steps:
|
|
122
126
|
- uses: actions/checkout@v6
|
|
@@ -130,15 +134,16 @@ jobs:
|
|
|
130
134
|
cache-dependency-glob: '**/pyproject.toml'
|
|
131
135
|
|
|
132
136
|
- name: Set secrets file
|
|
133
|
-
run: |
|
|
134
|
-
# See the "CI Setup" document for details of how this was set up.
|
|
135
|
-
ci/decrypt_secret.sh
|
|
136
|
-
tar xvf "${HOME}"/secrets/secrets.tar
|
|
137
|
-
cp ./ci_secrets/vuforia_secrets_${{ strategy.job-index }}.env ./vuforia_secrets.env
|
|
138
137
|
env:
|
|
139
138
|
CI_PATTERN: ${{ matrix.ci_pattern }}
|
|
140
139
|
ENCRYPTED_FILE: secrets.tar.gpg
|
|
141
140
|
LARGE_SECRET_PASSPHRASE: ${{ secrets.PASSPHRASE_FOR_VUFORIA_SECRETS }}
|
|
141
|
+
JOB_INDEX: ${{ strategy.job-index }}
|
|
142
|
+
run: |
|
|
143
|
+
# See the "CI Setup" document for details of how this was set up.
|
|
144
|
+
ci/decrypt_secret.sh
|
|
145
|
+
tar xvf "${HOME}"/secrets/secrets.tar
|
|
146
|
+
cp "./ci_secrets/vuforia_secrets_${JOB_INDEX}.env" ./vuforia_secrets.env
|
|
142
147
|
|
|
143
148
|
# We have seen issues with running out of disk space on test_docker
|
|
144
149
|
- name: Free Disk Space (Ubuntu)
|
|
@@ -174,7 +179,7 @@ jobs:
|
|
|
174
179
|
echo "name=coverage-data-ci-${{ matrix.python-version }}-${SANITIZED_PATTERN}" >> "$GITHUB_OUTPUT"
|
|
175
180
|
|
|
176
181
|
- name: Upload coverage data
|
|
177
|
-
uses: actions/upload-artifact@
|
|
182
|
+
uses: actions/upload-artifact@v7
|
|
178
183
|
with:
|
|
179
184
|
name: ${{ steps.sanitize.outputs.name }}
|
|
180
185
|
path: .coverage.*
|
|
@@ -186,7 +191,7 @@ jobs:
|
|
|
186
191
|
runs-on: ubuntu-latest
|
|
187
192
|
strategy:
|
|
188
193
|
matrix:
|
|
189
|
-
python-version: ['3.
|
|
194
|
+
python-version: ['3.14']
|
|
190
195
|
platform: [ubuntu-latest]
|
|
191
196
|
|
|
192
197
|
steps:
|
|
@@ -220,7 +225,7 @@ jobs:
|
|
|
220
225
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
221
226
|
|
|
222
227
|
- name: Upload coverage data
|
|
223
|
-
uses: actions/upload-artifact@
|
|
228
|
+
uses: actions/upload-artifact@v7
|
|
224
229
|
with:
|
|
225
230
|
name: coverage-data-skip-tests-${{ matrix.python-version }}
|
|
226
231
|
path: .coverage.*
|
|
@@ -232,7 +237,7 @@ jobs:
|
|
|
232
237
|
runs-on: windows-latest
|
|
233
238
|
strategy:
|
|
234
239
|
matrix:
|
|
235
|
-
python-version: ['3.
|
|
240
|
+
python-version: ['3.14']
|
|
236
241
|
|
|
237
242
|
steps:
|
|
238
243
|
- uses: actions/checkout@v6
|
|
@@ -286,8 +291,9 @@ jobs:
|
|
|
286
291
|
with:
|
|
287
292
|
enable-cache: true
|
|
288
293
|
cache-dependency-glob: '**/pyproject.toml'
|
|
294
|
+
python-version: '3.14'
|
|
289
295
|
|
|
290
|
-
- uses: actions/download-artifact@
|
|
296
|
+
- uses: actions/download-artifact@v8
|
|
291
297
|
with:
|
|
292
298
|
pattern: coverage-data-*
|
|
293
299
|
merge-multiple: true
|
|
@@ -307,14 +313,14 @@ jobs:
|
|
|
307
313
|
coverage report
|
|
308
314
|
|
|
309
315
|
- name: Upload HTML report if check failed
|
|
310
|
-
uses: actions/upload-artifact@
|
|
316
|
+
uses: actions/upload-artifact@v7
|
|
311
317
|
with:
|
|
312
318
|
name: html-report
|
|
313
319
|
path: htmlcov
|
|
314
320
|
if: ${{ failure() }}
|
|
315
321
|
|
|
316
322
|
# Final completion check
|
|
317
|
-
completion:
|
|
323
|
+
completion-ci:
|
|
318
324
|
needs: [ci-tests, skip-tests, windows-tests, coverage]
|
|
319
325
|
runs-on: ubuntu-latest
|
|
320
326
|
if: always()
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
---
|
|
2
2
|
fail_fast: true
|
|
3
3
|
|
|
4
|
+
.uv_version: &uv_version uv==0.11.7
|
|
5
|
+
|
|
4
6
|
# We use system Python, with required dependencies specified in pyproject.toml.
|
|
5
7
|
# We therefore cannot use those dependencies in pre-commit CI.
|
|
6
8
|
ci:
|
|
@@ -108,7 +110,8 @@ repos:
|
|
|
108
110
|
language: python
|
|
109
111
|
types_or: [yaml, python]
|
|
110
112
|
pass_filenames: false
|
|
111
|
-
additional_dependencies:
|
|
113
|
+
additional_dependencies:
|
|
114
|
+
- *uv_version
|
|
112
115
|
|
|
113
116
|
- id: actionlint
|
|
114
117
|
name: actionlint
|
|
@@ -116,7 +119,8 @@ repos:
|
|
|
116
119
|
language: python
|
|
117
120
|
pass_filenames: false
|
|
118
121
|
types_or: [yaml]
|
|
119
|
-
additional_dependencies:
|
|
122
|
+
additional_dependencies:
|
|
123
|
+
- *uv_version
|
|
120
124
|
stages: [pre-commit]
|
|
121
125
|
|
|
122
126
|
- id: pydocstringformatter
|
|
@@ -124,7 +128,8 @@ repos:
|
|
|
124
128
|
entry: uv run --extra=dev pydocstringformatter
|
|
125
129
|
language: python
|
|
126
130
|
types_or: [python]
|
|
127
|
-
additional_dependencies:
|
|
131
|
+
additional_dependencies:
|
|
132
|
+
- *uv_version
|
|
128
133
|
stages: [pre-commit]
|
|
129
134
|
|
|
130
135
|
- id: shellcheck
|
|
@@ -132,7 +137,8 @@ repos:
|
|
|
132
137
|
entry: uv run --extra=dev shellcheck --shell=bash
|
|
133
138
|
language: python
|
|
134
139
|
types_or: [shell]
|
|
135
|
-
additional_dependencies:
|
|
140
|
+
additional_dependencies:
|
|
141
|
+
- *uv_version
|
|
136
142
|
stages: [pre-commit]
|
|
137
143
|
|
|
138
144
|
- id: shellcheck-docs
|
|
@@ -142,7 +148,8 @@ repos:
|
|
|
142
148
|
--command="shellcheck --shell=bash --exclude=SC2215"
|
|
143
149
|
language: python
|
|
144
150
|
types_or: [markdown, rst]
|
|
145
|
-
additional_dependencies:
|
|
151
|
+
additional_dependencies:
|
|
152
|
+
- *uv_version
|
|
146
153
|
stages: [pre-commit]
|
|
147
154
|
|
|
148
155
|
- id: shfmt
|
|
@@ -150,7 +157,8 @@ repos:
|
|
|
150
157
|
entry: shfmt --write --space-redirects --indent=4
|
|
151
158
|
language: python
|
|
152
159
|
types_or: [shell]
|
|
153
|
-
additional_dependencies:
|
|
160
|
+
additional_dependencies:
|
|
161
|
+
- *uv_version
|
|
154
162
|
stages: [pre-commit]
|
|
155
163
|
|
|
156
164
|
- id: shfmt-docs
|
|
@@ -159,7 +167,8 @@ repos:
|
|
|
159
167
|
--no-pad-file --command="shfmt --write --space-redirects --indent=4"
|
|
160
168
|
language: python
|
|
161
169
|
types_or: [markdown, rst]
|
|
162
|
-
additional_dependencies:
|
|
170
|
+
additional_dependencies:
|
|
171
|
+
- *uv_version
|
|
163
172
|
stages: [pre-commit]
|
|
164
173
|
|
|
165
174
|
- id: mypy
|
|
@@ -169,7 +178,8 @@ repos:
|
|
|
169
178
|
language: python
|
|
170
179
|
types_or: [python, toml]
|
|
171
180
|
pass_filenames: false
|
|
172
|
-
additional_dependencies:
|
|
181
|
+
additional_dependencies:
|
|
182
|
+
- *uv_version
|
|
173
183
|
|
|
174
184
|
# We do not use --example-workers 0 due to https://github.com/python/mypy/issues/18283
|
|
175
185
|
- id: mypy-docs
|
|
@@ -185,7 +195,8 @@ repos:
|
|
|
185
195
|
entry: uv run --extra=dev -m check_manifest
|
|
186
196
|
language: python
|
|
187
197
|
pass_filenames: false
|
|
188
|
-
additional_dependencies:
|
|
198
|
+
additional_dependencies:
|
|
199
|
+
- *uv_version
|
|
189
200
|
|
|
190
201
|
- id: pyright
|
|
191
202
|
name: pyright
|
|
@@ -194,7 +205,8 @@ repos:
|
|
|
194
205
|
language: python
|
|
195
206
|
types_or: [python, toml]
|
|
196
207
|
pass_filenames: false
|
|
197
|
-
additional_dependencies:
|
|
208
|
+
additional_dependencies:
|
|
209
|
+
- *uv_version
|
|
198
210
|
|
|
199
211
|
- id: pyright-docs
|
|
200
212
|
name: pyright-docs
|
|
@@ -210,7 +222,8 @@ repos:
|
|
|
210
222
|
language: python
|
|
211
223
|
pass_filenames: false
|
|
212
224
|
types_or: [python]
|
|
213
|
-
additional_dependencies:
|
|
225
|
+
additional_dependencies:
|
|
226
|
+
- *uv_version
|
|
214
227
|
|
|
215
228
|
- id: ty
|
|
216
229
|
name: ty
|
|
@@ -219,7 +232,8 @@ repos:
|
|
|
219
232
|
language: python
|
|
220
233
|
types_or: [python, toml]
|
|
221
234
|
pass_filenames: false
|
|
222
|
-
additional_dependencies:
|
|
235
|
+
additional_dependencies:
|
|
236
|
+
- *uv_version
|
|
223
237
|
|
|
224
238
|
- id: ty-docs
|
|
225
239
|
name: ty-docs
|
|
@@ -228,7 +242,8 @@ repos:
|
|
|
228
242
|
check"
|
|
229
243
|
language: python
|
|
230
244
|
types_or: [markdown, rst]
|
|
231
|
-
additional_dependencies:
|
|
245
|
+
additional_dependencies:
|
|
246
|
+
- *uv_version
|
|
232
247
|
|
|
233
248
|
- id: vulture
|
|
234
249
|
name: vulture
|
|
@@ -236,7 +251,8 @@ repos:
|
|
|
236
251
|
language: python
|
|
237
252
|
types_or: [python]
|
|
238
253
|
pass_filenames: false
|
|
239
|
-
additional_dependencies:
|
|
254
|
+
additional_dependencies:
|
|
255
|
+
- *uv_version
|
|
240
256
|
stages: [pre-commit]
|
|
241
257
|
|
|
242
258
|
- id: vulture-docs
|
|
@@ -245,7 +261,8 @@ repos:
|
|
|
245
261
|
language: python
|
|
246
262
|
types_or: [python]
|
|
247
263
|
pass_filenames: false
|
|
248
|
-
additional_dependencies:
|
|
264
|
+
additional_dependencies:
|
|
265
|
+
- *uv_version
|
|
249
266
|
stages: [pre-commit]
|
|
250
267
|
|
|
251
268
|
- id: pyroma
|
|
@@ -254,7 +271,8 @@ repos:
|
|
|
254
271
|
language: python
|
|
255
272
|
pass_filenames: false
|
|
256
273
|
types_or: [toml]
|
|
257
|
-
additional_dependencies:
|
|
274
|
+
additional_dependencies:
|
|
275
|
+
- *uv_version
|
|
258
276
|
stages: [pre-commit]
|
|
259
277
|
|
|
260
278
|
- id: deptry
|
|
@@ -262,7 +280,8 @@ repos:
|
|
|
262
280
|
entry: uv run --extra=dev -m deptry src/
|
|
263
281
|
language: python
|
|
264
282
|
pass_filenames: false
|
|
265
|
-
additional_dependencies:
|
|
283
|
+
additional_dependencies:
|
|
284
|
+
- *uv_version
|
|
266
285
|
stages: [pre-commit]
|
|
267
286
|
|
|
268
287
|
- id: pylint
|
|
@@ -271,7 +290,8 @@ repos:
|
|
|
271
290
|
language: python
|
|
272
291
|
stages: [manual]
|
|
273
292
|
pass_filenames: false
|
|
274
|
-
additional_dependencies:
|
|
293
|
+
additional_dependencies:
|
|
294
|
+
- *uv_version
|
|
275
295
|
|
|
276
296
|
- id: pylint-docs
|
|
277
297
|
name: pylint-docs
|
|
@@ -285,7 +305,8 @@ repos:
|
|
|
285
305
|
entry: uv run --extra=dev -m ruff check --fix
|
|
286
306
|
language: python
|
|
287
307
|
types_or: [python]
|
|
288
|
-
additional_dependencies:
|
|
308
|
+
additional_dependencies:
|
|
309
|
+
- *uv_version
|
|
289
310
|
stages: [pre-commit]
|
|
290
311
|
|
|
291
312
|
- id: ruff-check-fix-docs
|
|
@@ -293,7 +314,8 @@ repos:
|
|
|
293
314
|
entry: uv run --extra=dev doccmd --language=python --command="ruff check --fix"
|
|
294
315
|
language: python
|
|
295
316
|
types_or: [markdown, rst]
|
|
296
|
-
additional_dependencies:
|
|
317
|
+
additional_dependencies:
|
|
318
|
+
- *uv_version
|
|
297
319
|
stages: [pre-commit]
|
|
298
320
|
|
|
299
321
|
- id: ruff-format-fix
|
|
@@ -301,7 +323,8 @@ repos:
|
|
|
301
323
|
entry: uv run --extra=dev -m ruff format
|
|
302
324
|
language: python
|
|
303
325
|
types_or: [python]
|
|
304
|
-
additional_dependencies:
|
|
326
|
+
additional_dependencies:
|
|
327
|
+
- *uv_version
|
|
305
328
|
stages: [pre-commit]
|
|
306
329
|
|
|
307
330
|
- id: ruff-format-fix-docs
|
|
@@ -310,7 +333,8 @@ repos:
|
|
|
310
333
|
format"
|
|
311
334
|
language: python
|
|
312
335
|
types_or: [markdown, rst]
|
|
313
|
-
additional_dependencies:
|
|
336
|
+
additional_dependencies:
|
|
337
|
+
- *uv_version
|
|
314
338
|
stages: [pre-commit]
|
|
315
339
|
|
|
316
340
|
- id: doc8
|
|
@@ -318,7 +342,8 @@ repos:
|
|
|
318
342
|
entry: uv run --extra=dev -m doc8
|
|
319
343
|
language: python
|
|
320
344
|
types_or: [rst]
|
|
321
|
-
additional_dependencies:
|
|
345
|
+
additional_dependencies:
|
|
346
|
+
- *uv_version
|
|
322
347
|
stages: [pre-commit]
|
|
323
348
|
|
|
324
349
|
- id: interrogate
|
|
@@ -334,7 +359,8 @@ repos:
|
|
|
334
359
|
entry: uv run --extra=dev doccmd --no-write-to-file --language=python --command="interrogate"
|
|
335
360
|
language: python
|
|
336
361
|
types_or: [markdown, rst]
|
|
337
|
-
additional_dependencies:
|
|
362
|
+
additional_dependencies:
|
|
363
|
+
- *uv_version
|
|
338
364
|
stages: [pre-commit]
|
|
339
365
|
|
|
340
366
|
- id: pyproject-fmt-fix
|
|
@@ -353,7 +379,8 @@ repos:
|
|
|
353
379
|
types_or: [rst]
|
|
354
380
|
stages: [manual]
|
|
355
381
|
pass_filenames: false
|
|
356
|
-
additional_dependencies:
|
|
382
|
+
additional_dependencies:
|
|
383
|
+
- *uv_version
|
|
357
384
|
|
|
358
385
|
- id: spelling
|
|
359
386
|
name: spelling
|
|
@@ -363,7 +390,8 @@ repos:
|
|
|
363
390
|
types_or: [rst]
|
|
364
391
|
stages: [manual]
|
|
365
392
|
pass_filenames: false
|
|
366
|
-
additional_dependencies:
|
|
393
|
+
additional_dependencies:
|
|
394
|
+
- *uv_version
|
|
367
395
|
|
|
368
396
|
- id: docs
|
|
369
397
|
name: Build Documentation
|
|
@@ -371,14 +399,16 @@ repos:
|
|
|
371
399
|
language: python
|
|
372
400
|
stages: [manual]
|
|
373
401
|
pass_filenames: false
|
|
374
|
-
additional_dependencies:
|
|
402
|
+
additional_dependencies:
|
|
403
|
+
- *uv_version
|
|
375
404
|
|
|
376
405
|
- id: yamlfix
|
|
377
406
|
name: pyproject-fmt
|
|
378
407
|
entry: uv run --extra=dev yamlfix
|
|
379
408
|
language: python
|
|
380
409
|
types_or: [yaml]
|
|
381
|
-
additional_dependencies:
|
|
410
|
+
additional_dependencies:
|
|
411
|
+
- *uv_version
|
|
382
412
|
stages: [pre-commit]
|
|
383
413
|
|
|
384
414
|
- id: zizmor
|
|
@@ -387,7 +417,8 @@ repos:
|
|
|
387
417
|
language: python
|
|
388
418
|
pass_filenames: false
|
|
389
419
|
types_or: [yaml]
|
|
390
|
-
additional_dependencies:
|
|
420
|
+
additional_dependencies:
|
|
421
|
+
- *uv_version
|
|
391
422
|
stages: [pre-commit]
|
|
392
423
|
|
|
393
424
|
- id: sphinx-lint
|
|
@@ -395,7 +426,8 @@ repos:
|
|
|
395
426
|
entry: uv run --extra=dev sphinx-lint --enable=all --disable=line-too-long
|
|
396
427
|
language: python
|
|
397
428
|
types_or: [rst]
|
|
398
|
-
additional_dependencies:
|
|
429
|
+
additional_dependencies:
|
|
430
|
+
- *uv_version
|
|
399
431
|
stages: [pre-commit]
|
|
400
432
|
|
|
401
433
|
- id: pyrefly
|
|
@@ -405,7 +437,8 @@ repos:
|
|
|
405
437
|
language: python
|
|
406
438
|
types_or: [python, toml]
|
|
407
439
|
pass_filenames: false
|
|
408
|
-
additional_dependencies:
|
|
440
|
+
additional_dependencies:
|
|
441
|
+
- *uv_version
|
|
409
442
|
|
|
410
443
|
- id: pyrefly-docs
|
|
411
444
|
name: pyrefly-docs
|
|
@@ -414,7 +447,8 @@ repos:
|
|
|
414
447
|
check"
|
|
415
448
|
language: python
|
|
416
449
|
types_or: [markdown, rst]
|
|
417
|
-
additional_dependencies:
|
|
450
|
+
additional_dependencies:
|
|
451
|
+
- *uv_version
|
|
418
452
|
|
|
419
453
|
- id: hclfmt
|
|
420
454
|
name: hclfmt
|
|
@@ -4,6 +4,17 @@ Changelog
|
|
|
4
4
|
Next
|
|
5
5
|
----
|
|
6
6
|
|
|
7
|
+
2026.04.26
|
|
8
|
+
----------
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
2026.02.22.3
|
|
12
|
+
------------
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
- ``MockVWS`` now intercepts both ``requests`` (via ``responses``) and ``httpx`` (via ``respx``) simultaneously.
|
|
16
|
+
``MockVWSForHttpx`` has been removed — ``MockVWS`` handles both HTTP libraries.
|
|
17
|
+
|
|
7
18
|
2026.02.22.2
|
|
8
19
|
------------
|
|
9
20
|
|