vws-python-mock 2026.4.26__tar.gz → 2026.8.4.1__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.4.26 → vws_python_mock-2026.8.4.1}/.github/workflows/docker-build.yml +3 -3
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.github/workflows/lint.yml +5 -2
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.github/workflows/release.yml +26 -34
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.github/workflows/test.yml +35 -13
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.pre-commit-config.yaml +14 -2
- vws_python_mock-2026.8.4.1/CHANGELOG.rst +140 -0
- {vws_python_mock-2026.4.26/src/vws_python_mock.egg-info → vws_python_mock-2026.8.4.1}/PKG-INFO +34 -32
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/README.rst +1 -1
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/admin/create_secrets_files.py +35 -1
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/conftest.py +2 -2
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/conf.py +9 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/differences-to-vws.rst +68 -5
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/index.rst +1 -0
- vws_python_mock-2026.8.4.1/docs/source/installation.rst +8 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/mock-api-reference.rst +4 -0
- vws_python_mock-2026.8.4.1/docs/source/unreleased.rst +8 -0
- vws_python_mock-2026.8.4.1/docs/towncrier_template.rst.jinja +14 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/pyproject.toml +228 -185
- vws_python_mock-2026.8.4.1/secrets.tar.gpg +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/spelling_private_dict.txt +1 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/__init__.py +2 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_constants.py +6 -2
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_flask_server/target_manager.py +44 -9
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_flask_server/vwq.py +6 -5
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_flask_server/vws.py +202 -6
- vws_python_mock-2026.8.4.1/src/mock_vws/_model_target_web_api.py +486 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_requests_mock_server/decorators.py +16 -2
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_requests_mock_server/mock_web_query_api.py +14 -2
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_requests_mock_server/mock_web_services_api.py +171 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_respx_mock_server/decorators.py +4 -1
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/__init__.py +30 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/exceptions.py +165 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/project_state_validators.py +13 -1
- vws_python_mock-2026.8.4.1/src/mock_vws/_services_validators/request_quota_validators.py +42 -0
- vws_python_mock-2026.8.4.1/src/mock_vws/_services_validators/request_rate_validators.py +83 -0
- vws_python_mock-2026.8.4.1/src/mock_vws/_services_validators/target_quota_validators.py +41 -0
- vws_python_mock-2026.8.4.1/src/mock_vws/cloud_query.py +22 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/database.py +21 -1
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/image_matchers.py +16 -57
- vws_python_mock-2026.8.4.1/src/mock_vws/model_target.py +80 -0
- vws_python_mock-2026.8.4.1/src/mock_vws/py.typed +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/states.py +4 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/target_manager.py +30 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/target_raters.py +13 -21
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1/src/vws_python_mock.egg-info}/PKG-INFO +34 -32
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/vws_python_mock.egg-info/SOURCES.txt +13 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/vws_python_mock.egg-info/requires.txt +32 -30
- vws_python_mock-2026.8.4.1/src/vws_python_mock.egg-info/scm_file_list.json +149 -0
- vws_python_mock-2026.8.4.1/src/vws_python_mock.egg-info/scm_version.json +8 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/fixtures/credentials.py +35 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/fixtures/prepared_requests.py +2 -2
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/fixtures/vuforia_backends.py +79 -2
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_authorization_header.py +1 -1
- vws_python_mock-2026.8.4.1/tests/mock_vws/test_cloud_query_failure_response.py +132 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_date_header.py +1 -1
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_docker.py +36 -11
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_flask_app_usage.py +149 -1
- vws_python_mock-2026.8.4.1/tests/mock_vws/test_model_target_web_api.py +690 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_requests_mock_usage.py +363 -1
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_respx_mock_usage.py +48 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/utils/retries.py +7 -3
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/vuforia_secrets.env.example +4 -0
- vws_python_mock-2026.4.26/CHANGELOG.rst +0 -105
- vws_python_mock-2026.4.26/docs/source/installation.rst +0 -34
- vws_python_mock-2026.4.26/secrets.tar.gpg +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.git_archival.txt +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.gitattributes +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.github/dependabot.yml +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.github/workflows/dependabot-merge.yml +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.github/workflows/publish-site.yml +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.gitignore +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.prettierrc +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.vscode/extensions.json +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/.vscode/settings.json +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/CODE_OF_CONDUCT.rst +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/LICENSE +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/MANIFEST.in +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/admin/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/admin/vumark_template.svg +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/ci/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/ci/decrypt_secret.sh +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/ci/test_custom_linters.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docker-bake.hcl +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/basic-example.rst +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/changelog.rst +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/ci-setup.rst +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/contributing.rst +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/docker.rst +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/getting-started.rst +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/httpx-example.rst +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/release-process.rst +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/docs/source/versioning-and-api-stability.rst +0 -0
- /vws_python_mock-2026.4.26/src/mock_vws/py.typed → /vws_python_mock-2026.8.4.1/newsfragments/.gitkeep +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/setup.cfg +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_base64_decoding.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_database_matchers.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_flask_server/Dockerfile +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_flask_server/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_flask_server/healthcheck.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_mock_common.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_tools.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/accept_header_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/auth_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/content_length_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/content_type_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/date_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/exceptions.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/fields_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/image_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/include_target_data_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/num_results_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_query_validators/project_state_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_requests_mock_server/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_respx_mock_server/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/active_flag_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/auth_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/content_length_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/content_type_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/date_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/image_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/json_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/key_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/metadata_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/name_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/target_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/_services_validators/width_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/database_type.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/mock_vws/target.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/vws_python_mock.egg-info/dependency_links.txt +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/vws_python_mock.egg-info/not-zip-safe +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/src/vws_python_mock.egg-info/top_level.txt +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/conftest.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/fixtures/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_add_target.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_content_length.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_database_summary.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_delete_target.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_get_duplicates.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_get_target.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_invalid_given_id.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_invalid_json.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_query.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_target_list.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_target_raters.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_target_summary.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_target_validators.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_unexpected_json.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_update_target.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/test_vumark_generation_api.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/utils/__init__.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/utils/assertions.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/utils/too_many_requests.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/tests/mock_vws/utils/usage_test_helpers.py +0 -0
- {vws_python_mock-2026.4.26 → vws_python_mock-2026.8.4.1}/zizmor.yml +0 -0
|
@@ -24,7 +24,7 @@ jobs:
|
|
|
24
24
|
runs-on: ubuntu-latest
|
|
25
25
|
|
|
26
26
|
steps:
|
|
27
|
-
- uses: actions/checkout@
|
|
27
|
+
- uses: actions/checkout@v7
|
|
28
28
|
with:
|
|
29
29
|
persist-credentials: false
|
|
30
30
|
|
|
@@ -35,11 +35,11 @@ jobs:
|
|
|
35
35
|
uses: docker/setup-buildx-action@v4
|
|
36
36
|
|
|
37
37
|
- name: Check Docker bake definition
|
|
38
|
-
uses: docker/bake-action@v7.
|
|
38
|
+
uses: docker/bake-action@v7.3.0
|
|
39
39
|
with:
|
|
40
40
|
call: check
|
|
41
41
|
|
|
42
42
|
- name: Build Docker images
|
|
43
|
-
uses: docker/bake-action@v7.
|
|
43
|
+
uses: docker/bake-action@v7.3.0
|
|
44
44
|
with:
|
|
45
45
|
push: false
|
|
@@ -25,12 +25,12 @@ jobs:
|
|
|
25
25
|
runs-on: ${{ matrix.platform }}
|
|
26
26
|
|
|
27
27
|
steps:
|
|
28
|
-
- uses: actions/checkout@
|
|
28
|
+
- uses: actions/checkout@v7
|
|
29
29
|
with:
|
|
30
30
|
persist-credentials: false
|
|
31
31
|
|
|
32
32
|
- name: Install uv
|
|
33
|
-
uses: astral-sh/setup-uv@
|
|
33
|
+
uses: astral-sh/setup-uv@v9.0.0
|
|
34
34
|
with:
|
|
35
35
|
enable-cache: true
|
|
36
36
|
cache-dependency-glob: '**/pyproject.toml'
|
|
@@ -42,6 +42,9 @@ jobs:
|
|
|
42
42
|
run: uv run --extra=dev prek run --all-files --hook-stage ${{ matrix.hook-stage }}
|
|
43
43
|
--verbose
|
|
44
44
|
env:
|
|
45
|
+
# Avoid intermittent uv distribution cache rename failures while
|
|
46
|
+
# prek installs hook environments on Windows.
|
|
47
|
+
UV_NO_CACHE: '1'
|
|
45
48
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
46
49
|
|
|
47
50
|
- uses: pre-commit-ci/lite-action@v1.1.0
|
|
@@ -18,7 +18,7 @@ jobs:
|
|
|
18
18
|
tag: ${{ steps.tag_version.outputs.new_tag }}
|
|
19
19
|
|
|
20
20
|
steps:
|
|
21
|
-
- uses: actions/checkout@
|
|
21
|
+
- uses: actions/checkout@v7
|
|
22
22
|
with:
|
|
23
23
|
# Fetch all history including tags.
|
|
24
24
|
# Needed to find the latest tag.
|
|
@@ -34,6 +34,12 @@ jobs:
|
|
|
34
34
|
# The default GITHUB_TOKEN cannot bypass rulesets.
|
|
35
35
|
token: ${{ secrets.RELEASE_PAT }}
|
|
36
36
|
|
|
37
|
+
- name: Install uv
|
|
38
|
+
uses: astral-sh/setup-uv@v9.0.0
|
|
39
|
+
with:
|
|
40
|
+
enable-cache: true
|
|
41
|
+
cache-dependency-glob: '**/pyproject.toml'
|
|
42
|
+
|
|
37
43
|
- name: Calver calculate version
|
|
38
44
|
uses: StephaneBour/actions-calver@master
|
|
39
45
|
id: calver
|
|
@@ -43,41 +49,27 @@ jobs:
|
|
|
43
49
|
env:
|
|
44
50
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
45
51
|
|
|
46
|
-
|
|
47
|
-
|
|
52
|
+
# towncrier writes the rendered notes to stdout (informational
|
|
53
|
+
# chatter goes to stderr), so this is the curated release body for
|
|
54
|
+
# this version, not github-tag-action's commit-derived changelog.
|
|
55
|
+
- name: Generate the GitHub release notes
|
|
48
56
|
env:
|
|
49
57
|
RELEASE: ${{ steps.calver.outputs.release }}
|
|
50
|
-
run:
|
|
51
|
-
|
|
52
|
-
echo "underline=${underline}" >> "$GITHUB_OUTPUT"
|
|
58
|
+
run: uv run --extra=release towncrier build --draft --version "$RELEASE" >
|
|
59
|
+
release-notes.md
|
|
53
60
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
with:
|
|
58
|
-
find: "Next\n----"
|
|
59
|
-
replace: |
|
|
60
|
-
Next
|
|
61
|
-
----
|
|
62
|
-
|
|
63
|
-
${{ steps.calver.outputs.release }}
|
|
64
|
-
${{ steps.changelog_underline.outputs.underline }}
|
|
65
|
-
include: CHANGELOG.rst
|
|
66
|
-
regex: false
|
|
67
|
-
|
|
68
|
-
- name: Check Update changelog was modified
|
|
61
|
+
# Assemble the same fragments into CHANGELOG.rst under a new
|
|
62
|
+
# ``$RELEASE`` section and delete the consumed fragment files.
|
|
63
|
+
- name: Update the changelog
|
|
69
64
|
env:
|
|
70
|
-
|
|
71
|
-
run:
|
|
72
|
-
|
|
73
|
-
echo "Error: No files were modified when updating changelog"
|
|
74
|
-
exit 1
|
|
75
|
-
fi
|
|
65
|
+
RELEASE: ${{ steps.calver.outputs.release }}
|
|
66
|
+
run: uv run --extra=release towncrier build --yes --version "$RELEASE"
|
|
67
|
+
|
|
76
68
|
- uses: stefanzweifel/git-auto-commit-action@v7
|
|
77
69
|
id: commit
|
|
78
70
|
with:
|
|
79
71
|
commit_message: Bump CHANGELOG
|
|
80
|
-
file_pattern: CHANGELOG.rst
|
|
72
|
+
file_pattern: CHANGELOG.rst newsfragments
|
|
81
73
|
# Error if there are no changes.
|
|
82
74
|
skip_dirty_check: true
|
|
83
75
|
|
|
@@ -96,7 +88,7 @@ jobs:
|
|
|
96
88
|
tag: ${{ steps.tag_version.outputs.new_tag }}
|
|
97
89
|
makeLatest: true
|
|
98
90
|
name: Release ${{ steps.tag_version.outputs.new_tag }}
|
|
99
|
-
|
|
91
|
+
bodyFile: release-notes.md
|
|
100
92
|
|
|
101
93
|
pypi:
|
|
102
94
|
name: Publish to PyPI
|
|
@@ -113,7 +105,7 @@ jobs:
|
|
|
113
105
|
id-token: write
|
|
114
106
|
|
|
115
107
|
steps:
|
|
116
|
-
- uses: actions/checkout@
|
|
108
|
+
- uses: actions/checkout@v7
|
|
117
109
|
with:
|
|
118
110
|
ref: ${{ needs.release.outputs.tag }}
|
|
119
111
|
# Fetch all history including tags.
|
|
@@ -122,7 +114,7 @@ jobs:
|
|
|
122
114
|
persist-credentials: false
|
|
123
115
|
|
|
124
116
|
- name: Install uv
|
|
125
|
-
uses: astral-sh/setup-uv@
|
|
117
|
+
uses: astral-sh/setup-uv@v9.0.0
|
|
126
118
|
with:
|
|
127
119
|
enable-cache: true
|
|
128
120
|
cache-dependency-glob: '**/pyproject.toml'
|
|
@@ -149,13 +141,13 @@ jobs:
|
|
|
149
141
|
packages: write
|
|
150
142
|
|
|
151
143
|
steps:
|
|
152
|
-
- uses: actions/checkout@
|
|
144
|
+
- uses: actions/checkout@v7
|
|
153
145
|
with:
|
|
154
146
|
ref: ${{ needs.release.outputs.tag }}
|
|
155
147
|
persist-credentials: false
|
|
156
148
|
|
|
157
149
|
- name: Login to GHCR
|
|
158
|
-
uses: docker/login-action@v4
|
|
150
|
+
uses: docker/login-action@v4.6.0
|
|
159
151
|
with:
|
|
160
152
|
registry: ghcr.io
|
|
161
153
|
username: ${{ github.actor }}
|
|
@@ -168,7 +160,7 @@ jobs:
|
|
|
168
160
|
uses: docker/setup-qemu-action@v4
|
|
169
161
|
|
|
170
162
|
- name: Build and push Docker images
|
|
171
|
-
uses: docker/bake-action@v7.
|
|
163
|
+
uses: docker/bake-action@v7.3.0
|
|
172
164
|
with:
|
|
173
165
|
push: true
|
|
174
166
|
env:
|
|
@@ -59,6 +59,7 @@ jobs:
|
|
|
59
59
|
- tests/mock_vws/test_authorization_header.py::TestMalformed::test_one_part_with_space
|
|
60
60
|
- tests/mock_vws/test_authorization_header.py::TestMalformed::test_missing_signature
|
|
61
61
|
- tests/mock_vws/test_authorization_header.py::TestBadKey
|
|
62
|
+
- tests/mock_vws/test_cloud_query_failure_response.py
|
|
62
63
|
- tests/mock_vws/test_content_length.py::TestIncorrect::test_not_integer
|
|
63
64
|
- tests/mock_vws/test_content_length.py::TestIncorrect::test_too_large
|
|
64
65
|
- tests/mock_vws/test_content_length.py::TestIncorrect::test_too_small
|
|
@@ -115,6 +116,7 @@ jobs:
|
|
|
115
116
|
- tests/mock_vws/test_requests_mock_usage.py
|
|
116
117
|
- tests/mock_vws/test_respx_mock_usage.py
|
|
117
118
|
- tests/mock_vws/test_flask_app_usage.py
|
|
119
|
+
- tests/mock_vws/test_model_target_web_api.py
|
|
118
120
|
- tests/mock_vws/test_vumark_generation_api.py
|
|
119
121
|
- tests/mock_vws/test_target_validators.py
|
|
120
122
|
- tests/mock_vws/test_docker.py
|
|
@@ -123,12 +125,12 @@ jobs:
|
|
|
123
125
|
- docs/
|
|
124
126
|
|
|
125
127
|
steps:
|
|
126
|
-
- uses: actions/checkout@
|
|
128
|
+
- uses: actions/checkout@v7
|
|
127
129
|
with:
|
|
128
130
|
persist-credentials: false
|
|
129
131
|
|
|
130
132
|
- name: Install uv
|
|
131
|
-
uses: astral-sh/setup-uv@
|
|
133
|
+
uses: astral-sh/setup-uv@v9.0.0
|
|
132
134
|
with:
|
|
133
135
|
enable-cache: true
|
|
134
136
|
cache-dependency-glob: '**/pyproject.toml'
|
|
@@ -195,12 +197,12 @@ jobs:
|
|
|
195
197
|
platform: [ubuntu-latest]
|
|
196
198
|
|
|
197
199
|
steps:
|
|
198
|
-
- uses: actions/checkout@
|
|
200
|
+
- uses: actions/checkout@v7
|
|
199
201
|
with:
|
|
200
202
|
persist-credentials: false
|
|
201
203
|
|
|
202
204
|
- name: Install uv
|
|
203
|
-
uses: astral-sh/setup-uv@
|
|
205
|
+
uses: astral-sh/setup-uv@v9.0.0
|
|
204
206
|
with:
|
|
205
207
|
enable-cache: true
|
|
206
208
|
cache-dependency-glob: '**/pyproject.toml'
|
|
@@ -240,12 +242,12 @@ jobs:
|
|
|
240
242
|
python-version: ['3.14']
|
|
241
243
|
|
|
242
244
|
steps:
|
|
243
|
-
- uses: actions/checkout@
|
|
245
|
+
- uses: actions/checkout@v7
|
|
244
246
|
with:
|
|
245
247
|
persist-credentials: false
|
|
246
248
|
|
|
247
249
|
- name: Install uv
|
|
248
|
-
uses: astral-sh/setup-uv@
|
|
250
|
+
uses: astral-sh/setup-uv@v9.0.0
|
|
249
251
|
with:
|
|
250
252
|
enable-cache: true
|
|
251
253
|
cache-dependency-glob: '**/pyproject.toml'
|
|
@@ -254,17 +256,29 @@ jobs:
|
|
|
254
256
|
run: |
|
|
255
257
|
cp ./vuforia_secrets.env.example ./vuforia_secrets.env
|
|
256
258
|
|
|
259
|
+
- name: Start Docker
|
|
260
|
+
shell: pwsh
|
|
261
|
+
run: |
|
|
262
|
+
$service = Get-Service docker -ErrorAction Stop
|
|
263
|
+
if ($service.Status -ne "Running") {
|
|
264
|
+
Start-Service docker
|
|
265
|
+
}
|
|
266
|
+
$deadline = (Get-Date).AddMinutes(2)
|
|
267
|
+
do {
|
|
268
|
+
docker info
|
|
269
|
+
if ($LASTEXITCODE -eq 0) {
|
|
270
|
+
exit 0
|
|
271
|
+
}
|
|
272
|
+
Start-Sleep -Seconds 5
|
|
273
|
+
} while ((Get-Date) -lt $deadline)
|
|
274
|
+
docker info
|
|
275
|
+
|
|
257
276
|
- name: Run tests
|
|
258
277
|
shell: bash
|
|
259
278
|
run: |
|
|
260
279
|
# We use pytest-xdist to make this run much faster.
|
|
261
280
|
# The downside is that we cannot use -s / --capture=no.
|
|
262
281
|
#
|
|
263
|
-
# We use coverage to collect coverage data but we currently
|
|
264
|
-
# do not upload / use it because combining Windows and Linux
|
|
265
|
-
# coverage is challenging.
|
|
266
|
-
#
|
|
267
|
-
# We therefore have a few ``# pragma: no cover`` statements.
|
|
268
282
|
uv run --extra=dev \
|
|
269
283
|
coverage run -m pytest \
|
|
270
284
|
--skip-real \
|
|
@@ -275,6 +289,14 @@ jobs:
|
|
|
275
289
|
env:
|
|
276
290
|
UV_PYTHON: ${{ matrix.python-version }}
|
|
277
291
|
|
|
292
|
+
- name: Upload coverage data
|
|
293
|
+
uses: actions/upload-artifact@v7
|
|
294
|
+
with:
|
|
295
|
+
name: coverage-data-windows-${{ matrix.python-version }}
|
|
296
|
+
path: .coverage.*
|
|
297
|
+
include-hidden-files: true
|
|
298
|
+
if-no-files-found: error
|
|
299
|
+
|
|
278
300
|
coverage:
|
|
279
301
|
name: Combine & check coverage
|
|
280
302
|
needs: [ci-tests, skip-tests, windows-tests]
|
|
@@ -282,12 +304,12 @@ jobs:
|
|
|
282
304
|
runs-on: ubuntu-latest
|
|
283
305
|
|
|
284
306
|
steps:
|
|
285
|
-
- uses: actions/checkout@
|
|
307
|
+
- uses: actions/checkout@v7
|
|
286
308
|
with:
|
|
287
309
|
persist-credentials: false
|
|
288
310
|
|
|
289
311
|
- name: Install uv
|
|
290
|
-
uses: astral-sh/setup-uv@
|
|
312
|
+
uses: astral-sh/setup-uv@v9.0.0
|
|
291
313
|
with:
|
|
292
314
|
enable-cache: true
|
|
293
315
|
cache-dependency-glob: '**/pyproject.toml'
|
|
@@ -9,6 +9,7 @@ ci:
|
|
|
9
9
|
skip:
|
|
10
10
|
- actionlint
|
|
11
11
|
- sphinx-lint
|
|
12
|
+
- strict-kwargs-fix
|
|
12
13
|
- check-manifest
|
|
13
14
|
- custom-linters
|
|
14
15
|
- deptry
|
|
@@ -174,7 +175,7 @@ repos:
|
|
|
174
175
|
- id: mypy
|
|
175
176
|
name: mypy
|
|
176
177
|
stages: [pre-push]
|
|
177
|
-
entry: uv run --extra=dev -m mypy
|
|
178
|
+
entry: uv run --extra=dev -m mypy --num-workers=4
|
|
178
179
|
language: python
|
|
179
180
|
types_or: [python, toml]
|
|
180
181
|
pass_filenames: false
|
|
@@ -185,7 +186,8 @@ repos:
|
|
|
185
186
|
- id: mypy-docs
|
|
186
187
|
name: mypy-docs
|
|
187
188
|
stages: [pre-push]
|
|
188
|
-
entry: uv run --extra=dev doccmd --no-write-to-file --language=python --command="mypy
|
|
189
|
+
entry: uv run --extra=dev doccmd --no-write-to-file --language=python --command="mypy
|
|
190
|
+
--num-workers=4"
|
|
189
191
|
language: python
|
|
190
192
|
types_or: [markdown, rst]
|
|
191
193
|
|
|
@@ -337,6 +339,16 @@ repos:
|
|
|
337
339
|
- *uv_version
|
|
338
340
|
stages: [pre-commit]
|
|
339
341
|
|
|
342
|
+
- id: strict-kwargs-fix
|
|
343
|
+
name: strict-kwargs
|
|
344
|
+
entry: uv run --extra=dev strict-kwargs check --fix
|
|
345
|
+
language: python
|
|
346
|
+
types_or: [python]
|
|
347
|
+
additional_dependencies:
|
|
348
|
+
- *uv_version
|
|
349
|
+
stages: [pre-commit]
|
|
350
|
+
require_serial: true
|
|
351
|
+
|
|
340
352
|
- id: doc8
|
|
341
353
|
name: doc8
|
|
342
354
|
entry: uv run --extra=dev -m doc8
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
Changelog
|
|
2
|
+
=========
|
|
3
|
+
|
|
4
|
+
.. towncrier release notes start
|
|
5
|
+
|
|
6
|
+
2026.08.04.1
|
|
7
|
+
------------
|
|
8
|
+
|
|
9
|
+
- Replace the PyTorch image-quality stack with OpenCV and a lightweight BRISQUE
|
|
10
|
+
implementation. This reduces dependency download and installation sizes and
|
|
11
|
+
removes the need to configure PyTorch's CPU-only package index.
|
|
12
|
+
|
|
13
|
+
- Match real Vuforia Model Target unknown-dataset response shape (``NOT_FOUND`` code, ``Could not find a model-view database with uuid <uuid>`` message, ``userId:`` target).
|
|
14
|
+
Keep each Model Target dataset status response internally consistent when processing completes while the response is being generated.
|
|
15
|
+
|
|
16
|
+
- Add configurable ``TooManyRequests`` responses from VWS endpoints using the
|
|
17
|
+
``CloudDatabase.requests_per_second_limit`` setting.
|
|
18
|
+
|
|
19
|
+
- Add ``CloudQueryFailureResponse`` and the ``MockVWS.cloud_query_failure_response`` parameter for returning configurable Cloud Query failure status codes, headers, and raw bodies through the ``requests`` and ``httpx`` backends.
|
|
20
|
+
|
|
21
|
+
2026.08.04
|
|
22
|
+
----------
|
|
23
|
+
|
|
24
|
+
- Cloud databases with ``request_quota=0`` now return a
|
|
25
|
+
``RequestQuotaReached`` response from VWS endpoints.
|
|
26
|
+
|
|
27
|
+
- Add a mock implementation of the Model Target Web API, including OAuth2 token creation, standard and advanced dataset creation, status polling, dataset download, and deletion.
|
|
28
|
+
|
|
29
|
+
- Improve Model Target Web API mock authentication failure responses.
|
|
30
|
+
|
|
31
|
+
- Match real Vuforia Model Target dataset creation validation error shape, including per-request UUID, details list, and status codes (415 for unsupported media type, 400 with ``BAD_REQUEST`` validation details).
|
|
32
|
+
|
|
33
|
+
- Match real Vuforia Model Target unknown-dataset response shape (``NOT_FOUND`` code, ``Could not find a model-view database with uuid <uuid>`` message, ``userId:`` target).
|
|
34
|
+
|
|
35
|
+
- Make synthetic Model Target dataset zip downloads byte-for-byte reproducible.
|
|
36
|
+
|
|
37
|
+
- Match real Vuforia Model Target Web API error responses for invalid request bodies, invalid dataset creation payloads, unknown datasets, and downloads of still-processing datasets.
|
|
38
|
+
|
|
39
|
+
- Add configurable ``TargetQuotaReached``, ``ProjectSuspended``, and
|
|
40
|
+
``ProjectHasNoAPIAccess`` responses from VWS endpoints.
|
|
41
|
+
|
|
42
|
+
2026.04.26
|
|
43
|
+
----------
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
2026.02.22.3
|
|
47
|
+
------------
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
- ``MockVWS`` now intercepts both ``requests`` (via ``responses``) and ``httpx`` (via ``respx``) simultaneously.
|
|
51
|
+
``MockVWSForHttpx`` has been removed — ``MockVWS`` handles both HTTP libraries.
|
|
52
|
+
|
|
53
|
+
2026.02.22.2
|
|
54
|
+
------------
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
2026.02.22.1
|
|
58
|
+
------------
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
2026.02.22
|
|
62
|
+
----------
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
2026.02.21
|
|
66
|
+
----------
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
- Add ``VuMarkTarget`` class for VuMark template targets, alongside the renamed ``ImageTarget`` class (previously ``Target``).
|
|
70
|
+
``ImageTarget`` is for image-based targets and ``VuMarkTarget`` is for VuMark template targets.
|
|
71
|
+
Both can be stored in a ``VuforiaDatabase``.
|
|
72
|
+
|
|
73
|
+
2026.02.18.2
|
|
74
|
+
------------
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
2026.02.18.1
|
|
78
|
+
------------
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
2026.02.18
|
|
82
|
+
----------
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
2026.02.15.5
|
|
86
|
+
------------
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
2026.02.15.4
|
|
90
|
+
------------
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
- Add ``sleep_fn`` parameter to ``MockVWS`` for injecting a custom delay strategy, enabling deterministic and fast tests without monkey-patching.
|
|
94
|
+
|
|
95
|
+
2026.02.15.3
|
|
96
|
+
------------
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
- Add ``response_delay_seconds`` parameter to ``MockVWS`` for simulating slow server responses and testing timeout handling.
|
|
100
|
+
- Add ``response_delay_seconds`` setting to the Flask mock (``VWSSettings`` and ``VWQSettings``) for simulating slow server responses.
|
|
101
|
+
|
|
102
|
+
2025.03.10.1
|
|
103
|
+
------------
|
|
104
|
+
|
|
105
|
+
2025.03.10
|
|
106
|
+
----------
|
|
107
|
+
|
|
108
|
+
2025.02.21
|
|
109
|
+
----------
|
|
110
|
+
|
|
111
|
+
2025.02.18
|
|
112
|
+
----------
|
|
113
|
+
|
|
114
|
+
2024.08.30
|
|
115
|
+
------------
|
|
116
|
+
|
|
117
|
+
2024.07.15
|
|
118
|
+
------------
|
|
119
|
+
|
|
120
|
+
- Support passing data as strings.
|
|
121
|
+
|
|
122
|
+
2024.07.02.1
|
|
123
|
+
------------
|
|
124
|
+
|
|
125
|
+
- Fix installation on Windows now that ``numpy`` 2.0.0 has been released.
|
|
126
|
+
|
|
127
|
+
2024.02.16
|
|
128
|
+
------------
|
|
129
|
+
|
|
130
|
+
- Add a structural similarity image matcher.
|
|
131
|
+
|
|
132
|
+
2018.12.01.0
|
|
133
|
+
------------
|
|
134
|
+
|
|
135
|
+
- Distribute type information.
|
|
136
|
+
|
|
137
|
+
2018.09.10.0
|
|
138
|
+
------------
|
|
139
|
+
|
|
140
|
+
- Initial release
|
{vws_python_mock-2026.4.26/src/vws_python_mock.egg-info → vws_python_mock-2026.8.4.1}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: vws-python-mock
|
|
3
|
-
Version: 2026.4.
|
|
3
|
+
Version: 2026.8.4.1
|
|
4
4
|
Summary: A mock for the Vuforia Web Services (VWS) API.
|
|
5
5
|
Author-email: Adam Dangoor <adamdangoor@gmail.com>
|
|
6
6
|
License-Expression: MIT
|
|
@@ -20,16 +20,14 @@ License-File: LICENSE
|
|
|
20
20
|
Requires-Dist: beartype>=0.22.9
|
|
21
21
|
Requires-Dist: flask>=3.0.3
|
|
22
22
|
Requires-Dist: httpx>=0.27.0
|
|
23
|
-
Requires-Dist: numpy>=
|
|
24
|
-
Requires-Dist:
|
|
25
|
-
Requires-Dist:
|
|
23
|
+
Requires-Dist: numpy>=2.4.4
|
|
24
|
+
Requires-Dist: opencv-contrib-python-headless>=5.0.0.93
|
|
25
|
+
Requires-Dist: pillow>=12.2.0
|
|
26
26
|
Requires-Dist: pydantic-settings>=2.6.1
|
|
27
|
+
Requires-Dist: pyteenybrisque>=0.1.1
|
|
27
28
|
Requires-Dist: requests>=2.32.3
|
|
28
29
|
Requires-Dist: responses>=0.25.3
|
|
29
30
|
Requires-Dist: respx>=0.21.0
|
|
30
|
-
Requires-Dist: torch>=2.5.1
|
|
31
|
-
Requires-Dist: torchmetrics>=1.5.1
|
|
32
|
-
Requires-Dist: torchvision>=0.20.1
|
|
33
31
|
Requires-Dist: tzdata; sys_platform == "win32"
|
|
34
32
|
Requires-Dist: vws-auth-tools>=2024.7.12
|
|
35
33
|
Requires-Dist: werkzeug>=3.1.2
|
|
@@ -37,59 +35,63 @@ Provides-Extra: dev
|
|
|
37
35
|
Requires-Dist: actionlint-py==1.7.12.24; extra == "dev"
|
|
38
36
|
Requires-Dist: check-manifest==0.51; extra == "dev"
|
|
39
37
|
Requires-Dist: check-wheel-contents==0.6.3; extra == "dev"
|
|
40
|
-
Requires-Dist: coverage==7.
|
|
38
|
+
Requires-Dist: coverage==7.15.2; extra == "dev"
|
|
41
39
|
Requires-Dist: deptry==0.25.1; extra == "dev"
|
|
42
40
|
Requires-Dist: dirty-equals==0.11; extra == "dev"
|
|
43
41
|
Requires-Dist: doc8==2.0.0; extra == "dev"
|
|
44
|
-
Requires-Dist: doccmd==2026.
|
|
45
|
-
Requires-Dist: docker==7.
|
|
42
|
+
Requires-Dist: doccmd==2026.7.19; extra == "dev"
|
|
43
|
+
Requires-Dist: docker==7.2.0; extra == "dev"
|
|
46
44
|
Requires-Dist: freezegun==1.5.5; extra == "dev"
|
|
47
45
|
Requires-Dist: furo==2025.12.19; extra == "dev"
|
|
48
46
|
Requires-Dist: interrogate==1.7.0; extra == "dev"
|
|
49
|
-
Requires-Dist: mypy[faster-cache]==
|
|
50
|
-
Requires-Dist: mypy-strict-kwargs==2026.1
|
|
51
|
-
Requires-Dist: prek==0.
|
|
52
|
-
Requires-Dist: pydocstringformatter==0.
|
|
47
|
+
Requires-Dist: mypy[faster-cache]==2.3.0; extra == "dev"
|
|
48
|
+
Requires-Dist: mypy-strict-kwargs==2026.7.19.1; extra == "dev"
|
|
49
|
+
Requires-Dist: prek==0.4.11; extra == "dev"
|
|
50
|
+
Requires-Dist: pydocstringformatter==1.0.0; extra == "dev"
|
|
53
51
|
Requires-Dist: pydocstyle==6.3; extra == "dev"
|
|
54
|
-
Requires-Dist: pylint[spelling]==4.0.
|
|
52
|
+
Requires-Dist: pylint[spelling]==4.0.6; extra == "dev"
|
|
55
53
|
Requires-Dist: pylint-per-file-ignores==3.2.1; extra == "dev"
|
|
56
|
-
Requires-Dist: pyproject-fmt==2.
|
|
57
|
-
Requires-Dist: pyrefly==
|
|
58
|
-
Requires-Dist: pyright==1.1.
|
|
54
|
+
Requires-Dist: pyproject-fmt==2.26.0; extra == "dev"
|
|
55
|
+
Requires-Dist: pyrefly==1.1.1; extra == "dev"
|
|
56
|
+
Requires-Dist: pyright==1.1.411; extra == "dev"
|
|
59
57
|
Requires-Dist: pyroma==5.0.1; extra == "dev"
|
|
60
|
-
Requires-Dist: pytest==9.
|
|
58
|
+
Requires-Dist: pytest==9.1.1; extra == "dev"
|
|
61
59
|
Requires-Dist: pytest-beartype-tests==2026.4.26; extra == "dev"
|
|
62
60
|
Requires-Dist: pytest-retry==1.7.0; extra == "dev"
|
|
63
61
|
Requires-Dist: pytest-xdist==3.8.0; extra == "dev"
|
|
64
62
|
Requires-Dist: pyyaml==6.0.3; extra == "dev"
|
|
65
63
|
Requires-Dist: requests-mock-flask==2026.4.2; extra == "dev"
|
|
66
|
-
Requires-Dist: ruff==0.
|
|
64
|
+
Requires-Dist: ruff==0.16.1; extra == "dev"
|
|
67
65
|
Requires-Dist: shellcheck-py==0.11.0.1; extra == "dev"
|
|
68
|
-
Requires-Dist: shfmt-py==
|
|
66
|
+
Requires-Dist: shfmt-py==4.0.0; extra == "dev"
|
|
69
67
|
Requires-Dist: sphinx==9.1.0; extra == "dev"
|
|
70
68
|
Requires-Dist: sphinx-copybutton==0.5.2; extra == "dev"
|
|
71
69
|
Requires-Dist: sphinx-lint==1.0.2; extra == "dev"
|
|
72
70
|
Requires-Dist: sphinx-paramlinks==0.6; extra == "dev"
|
|
73
71
|
Requires-Dist: sphinx-pyproject==0.3.0; extra == "dev"
|
|
74
|
-
Requires-Dist: sphinx-substitution-extensions==2026.
|
|
75
|
-
Requires-Dist: sphinx-toolbox==4.
|
|
72
|
+
Requires-Dist: sphinx-substitution-extensions==2026.6.17; extra == "dev"
|
|
73
|
+
Requires-Dist: sphinx-toolbox==4.3.0; extra == "dev"
|
|
76
74
|
Requires-Dist: sphinxcontrib-httpdomain==2.0.0; extra == "dev"
|
|
77
75
|
Requires-Dist: sphinxcontrib-spelling==8.0.2; extra == "dev"
|
|
78
|
-
Requires-Dist:
|
|
76
|
+
Requires-Dist: sphinxcontrib-towncrier==0.5.0a0; extra == "dev"
|
|
77
|
+
Requires-Dist: strict-kwargs==2026.7.24; extra == "dev"
|
|
78
|
+
Requires-Dist: sybil==10.1.0; extra == "dev"
|
|
79
79
|
Requires-Dist: tenacity==9.1.4; extra == "dev"
|
|
80
|
-
Requires-Dist:
|
|
81
|
-
Requires-Dist:
|
|
82
|
-
Requires-Dist: types-
|
|
83
|
-
Requires-Dist: types-
|
|
84
|
-
Requires-Dist:
|
|
80
|
+
Requires-Dist: towncrier==25.8.0; extra == "dev"
|
|
81
|
+
Requires-Dist: ty==0.0.65; extra == "dev"
|
|
82
|
+
Requires-Dist: types-docker==7.2.0.20260728; extra == "dev"
|
|
83
|
+
Requires-Dist: types-pyyaml==6.0.12.20260724; extra == "dev"
|
|
84
|
+
Requires-Dist: types-requests==2.33.0.20260712; extra == "dev"
|
|
85
|
+
Requires-Dist: urllib3==2.7.0; extra == "dev"
|
|
85
86
|
Requires-Dist: vulture==2.16; extra == "dev"
|
|
86
87
|
Requires-Dist: vws-python==2026.2.25.1; extra == "dev"
|
|
87
88
|
Requires-Dist: vws-test-fixtures==2023.3.5; extra == "dev"
|
|
88
|
-
Requires-Dist: vws-web-tools==2026.
|
|
89
|
+
Requires-Dist: vws-web-tools==2026.5.21; extra == "dev"
|
|
89
90
|
Requires-Dist: yamlfix==1.19.1; extra == "dev"
|
|
90
|
-
Requires-Dist: zizmor==1.
|
|
91
|
+
Requires-Dist: zizmor==1.28.0; extra == "dev"
|
|
91
92
|
Provides-Extra: release
|
|
92
93
|
Requires-Dist: check-wheel-contents==0.6.3; extra == "release"
|
|
94
|
+
Requires-Dist: towncrier==25.8.0; extra == "release"
|
|
93
95
|
Dynamic: license-file
|
|
94
96
|
|
|
95
97
|
|Build Status| |PyPI|
|
|
@@ -100,7 +102,7 @@ VWS Mock
|
|
|
100
102
|
.. contents::
|
|
101
103
|
:local:
|
|
102
104
|
|
|
103
|
-
Mock for the Vuforia Web Services (VWS) API
|
|
105
|
+
Mock for the Vuforia Web Services (VWS) API, the Vuforia Web Query API, and the Model Target Web API.
|
|
104
106
|
|
|
105
107
|
Mocking calls made to Vuforia
|
|
106
108
|
------------------------------
|
|
@@ -6,7 +6,7 @@ VWS Mock
|
|
|
6
6
|
.. contents::
|
|
7
7
|
:local:
|
|
8
8
|
|
|
9
|
-
Mock for the Vuforia Web Services (VWS) API
|
|
9
|
+
Mock for the Vuforia Web Services (VWS) API, the Vuforia Web Query API, and the Model Target Web API.
|
|
10
10
|
|
|
11
11
|
Mocking calls made to Vuforia
|
|
12
12
|
------------------------------
|