vws-python 2026.2.25.1__tar.gz → 2026.8.14__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.github/dependabot.yml +5 -0
  2. vws_python-2026.8.14/.github/workflows/autofix.yml +37 -0
  3. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.github/workflows/ci.yml +3 -3
  4. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.github/workflows/dependabot-merge.yml +2 -6
  5. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.github/workflows/lint.yml +9 -11
  6. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.github/workflows/publish-site.yml +1 -1
  7. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.github/workflows/release.yml +21 -25
  8. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.gitignore +3 -0
  9. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.pre-commit-config.yaml +127 -78
  10. vws_python-2026.8.14/.vale.ini +15 -0
  11. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/CHANGELOG.rst +22 -2
  12. {vws_python-2026.2.25.1/src/vws_python.egg-info → vws_python-2026.8.14}/PKG-INFO +35 -31
  13. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/README.rst +1 -1
  14. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/conftest.py +15 -11
  15. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/docs/source/api-reference.rst +12 -0
  16. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/docs/source/conf.py +9 -0
  17. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/docs/source/exceptions.rst +9 -0
  18. vws_python-2026.8.14/docs/source/index.rst +254 -0
  19. vws_python-2026.8.14/docs/source/unreleased.rst +8 -0
  20. vws_python-2026.8.14/docs/towncrier_template.rst.jinja +14 -0
  21. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/pyproject.toml +252 -186
  22. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/spelling_private_dict.txt +11 -1
  23. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/__init__.py +4 -0
  24. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/_async_vws_request.py +2 -2
  25. vws_python-2026.8.14/src/vws/_model_targets.py +323 -0
  26. vws_python-2026.8.14/src/vws/_reco_counts.py +80 -0
  27. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/_vws_request.py +2 -2
  28. vws_python-2026.8.14/src/vws/async_model_target_service.py +381 -0
  29. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/async_query.py +31 -9
  30. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/async_vumark_service.py +17 -32
  31. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/async_vws.py +167 -49
  32. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/exceptions/base_exceptions.py +26 -1
  33. vws_python-2026.8.14/src/vws/exceptions/custom_exceptions.py +107 -0
  34. vws_python-2026.8.14/src/vws/exceptions/model_target_exceptions.py +210 -0
  35. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/exceptions/vws_exceptions.py +76 -24
  36. vws_python-2026.8.14/src/vws/model_target_datasets.py +152 -0
  37. vws_python-2026.8.14/src/vws/model_target_service.py +366 -0
  38. vws_python-2026.8.14/src/vws/py.typed +0 -0
  39. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/query.py +30 -4
  40. vws_python-2026.8.14/src/vws/reports.py +391 -0
  41. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/response.py +1 -1
  42. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/transports.py +71 -34
  43. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/vumark_service.py +16 -29
  44. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/vws.py +165 -46
  45. {vws_python-2026.2.25.1 → vws_python-2026.8.14/src/vws_python.egg-info}/PKG-INFO +35 -31
  46. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws_python.egg-info/SOURCES.txt +15 -0
  47. vws_python-2026.8.14/src/vws_python.egg-info/requires.txt +58 -0
  48. vws_python-2026.8.14/src/vws_python.egg-info/scm_file_list.json +78 -0
  49. vws_python-2026.8.14/src/vws_python.egg-info/scm_version.json +8 -0
  50. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/conftest.py +96 -3
  51. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/test_async_cloud_reco_exceptions.py +76 -2
  52. vws_python-2026.8.14/tests/test_async_model_targets.py +409 -0
  53. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/test_async_query.py +1 -1
  54. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/test_async_vws.py +232 -1
  55. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/test_async_vws_exceptions.py +124 -1
  56. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/test_cloud_reco_exceptions.py +73 -2
  57. vws_python-2026.8.14/tests/test_model_targets.py +802 -0
  58. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/test_query.py +1 -1
  59. vws_python-2026.8.14/tests/test_transports.py +407 -0
  60. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/test_vws.py +259 -2
  61. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/test_vws_exceptions.py +229 -5
  62. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/zizmor.yml +1 -3
  63. vws_python-2026.2.25.1/docs/source/index.rst +0 -127
  64. vws_python-2026.2.25.1/src/vws/exceptions/custom_exceptions.py +0 -52
  65. vws_python-2026.2.25.1/src/vws/reports.py +0 -188
  66. vws_python-2026.2.25.1/src/vws_python.egg-info/requires.txt +0 -53
  67. vws_python-2026.2.25.1/tests/test_transports.py +0 -206
  68. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.git_archival.txt +0 -0
  69. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.gitattributes +0 -0
  70. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.prettierrc +0 -0
  71. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.vscode/extensions.json +0 -0
  72. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/.vscode/settings.json +0 -0
  73. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/CODE_OF_CONDUCT.rst +0 -0
  74. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/LICENSE +0 -0
  75. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/docs/source/__init__.py +0 -0
  76. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/docs/source/changelog.rst +0 -0
  77. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/docs/source/contributing.rst +0 -0
  78. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/docs/source/release-process.rst +0 -0
  79. /vws_python-2026.2.25.1/src/vws/py.typed → /vws_python-2026.8.14/newsfragments/.gitkeep +0 -0
  80. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/setup.cfg +0 -0
  81. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/_image_utils.py +0 -0
  82. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/exceptions/__init__.py +0 -0
  83. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/exceptions/cloud_reco_exceptions.py +0 -0
  84. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/include_target_data.py +0 -0
  85. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws/vumark_accept.py +0 -0
  86. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws_python.egg-info/dependency_links.txt +0 -0
  87. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws_python.egg-info/not-zip-safe +0 -0
  88. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/src/vws_python.egg-info/top_level.txt +0 -0
  89. {vws_python-2026.2.25.1 → vws_python-2026.8.14}/tests/__init__.py +0 -0
@@ -12,3 +12,8 @@ updates:
12
12
  schedule:
13
13
  interval: daily
14
14
  open-pull-requests-limit: 10
15
+
16
+ - package-ecosystem: pre-commit
17
+ directory: /
18
+ schedule:
19
+ interval: daily
@@ -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@v9.0.0
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.13', '3.14']
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@v6
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@v7
31
+ uses: astral-sh/setup-uv@v9.0.0
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.actor == 'dependabot[bot]'
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,33 @@ jobs:
17
17
  build:
18
18
  strategy:
19
19
  matrix:
20
- python-version: ['3.13']
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@v6
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@v7
32
+ uses: astral-sh/setup-uv@v9.0.0
33
33
  with:
34
34
  enable-cache: true
35
35
  cache-dependency-glob: '**/pyproject.toml'
36
36
 
37
37
  - name: Lint
38
- # Use bash to ensure the step fails if any command fails.
39
- # PowerShell does not fail on intermediate command failures by default.
40
- shell: bash
41
- run: uv run --extra=dev prek run --all-files --hook-stage ${{ matrix.hook-stage }}
42
- --verbose
38
+ uses: j178/prek-action@v3.0.0
39
+ with:
40
+ prek-version: 0.4.11
41
+ extra-args: >-
42
+ --all-files --hook-stage ${{ matrix.hook-stage }} --verbose
43
43
  env:
44
+ UV_NO_CACHE: '1'
44
45
  UV_PYTHON: ${{ matrix.python-version }}
45
46
 
46
- - uses: pre-commit-ci/lite-action@v1.1.0
47
- if: always()
48
-
49
47
  completion-lint:
50
48
  needs: build
51
49
  runs-on: ubuntu-latest
@@ -22,7 +22,7 @@ jobs:
22
22
  with:
23
23
  documentation_path: docs/source
24
24
  pyproject_extras: dev
25
- python_version: '3.13'
25
+ python_version: '3.14'
26
26
  sphinx_build_options: -W
27
27
  cache: true
28
28
  publish: ${{ github.ref_name == 'main' }}
@@ -20,7 +20,7 @@ jobs:
20
20
  contents: write
21
21
 
22
22
  steps:
23
- - uses: actions/checkout@v6
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@v7
36
+ uses: astral-sh/setup-uv@v9.0.0
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
- - name: Get the changelog underline
51
- id: changelog_underline
52
- run: |
53
- underline="$(echo "${{ steps.calver.outputs.release }}" | tr -c '\n' '-')"
54
- echo "underline=${underline}" >> "$GITHUB_OUTPUT"
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
- - name: Update changelog
57
- id: update_changelog
58
- uses: jacobtomlinson/gha-find-replace@v3
59
- with:
60
- find: "Next\n----"
61
- replace: "Next\n----\n\n${{ steps.calver.outputs.release }}\n${{ steps.changelog_underline.outputs.underline\
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
- body: ${{ steps.tag_version.outputs.changelog }}
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 ${{ steps.tag_version.outputs.new_tag }}
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
 
@@ -112,3 +112,6 @@ secrets.tar
112
112
  src/*/_setuptools_scm_version.txt
113
113
 
114
114
  uv.lock
115
+
116
+ # Vale styles downloaded by ``vale sync``
117
+ styles/
@@ -1,49 +1,11 @@
1
1
  ---
2
2
  fail_fast: true
3
3
 
4
+ .uv_version: &uv_version uv==0.11.7
5
+
4
6
  # See https://pre-commit.com for more information
5
7
  # See https://pre-commit.com/hooks.html for more hooks
6
8
 
7
- ci:
8
- # We use system Python, with required dependencies specified in pyproject.toml.
9
- # We therefore cannot use those dependencies in pre-commit CI.
10
- skip:
11
- - actionlint
12
- - sphinx-lint
13
- - check-manifest
14
- - deptry
15
- - doc8
16
- - pydocstringformatter
17
- - docs
18
- - interrogate
19
- - interrogate-docs
20
- - linkcheck
21
- - mypy
22
- - mypy-docs
23
- - pylint
24
- - pyproject-fmt-fix
25
- - pyright
26
- - pyright-docs
27
- - pyright-verifytypes
28
- - ty
29
- - ty-docs
30
- - pyroma
31
- - ruff-check-fix
32
- - ruff-check-fix-docs
33
- - ruff-format-fix
34
- - ruff-format-fix-docs
35
- - shellcheck
36
- - shellcheck-docs
37
- - shfmt
38
- - shfmt-docs
39
- - spelling
40
- - vulture
41
- - vulture-docs
42
- - yamlfix
43
- - zizmor
44
- - pyrefly
45
- - pyrefly-docs
46
-
47
9
  default_install_hook_types: [pre-commit, pre-push]
48
10
 
49
11
  repos:
@@ -101,7 +63,8 @@ repos:
101
63
  language: python
102
64
  pass_filenames: false
103
65
  types_or: [yaml]
104
- additional_dependencies: [uv==0.9.5]
66
+ additional_dependencies:
67
+ - *uv_version
105
68
  stages: [pre-commit]
106
69
 
107
70
  - id: pydocstringformatter
@@ -109,7 +72,8 @@ repos:
109
72
  entry: uv run --extra=dev pydocstringformatter
110
73
  language: python
111
74
  types_or: [python]
112
- additional_dependencies: [uv==0.9.5]
75
+ additional_dependencies:
76
+ - *uv_version
113
77
  stages: [pre-commit]
114
78
 
115
79
  - id: shellcheck
@@ -117,7 +81,8 @@ repos:
117
81
  entry: uv run --extra=dev shellcheck --shell=bash
118
82
  language: python
119
83
  types_or: [shell]
120
- additional_dependencies: [uv==0.9.5]
84
+ additional_dependencies:
85
+ - *uv_version
121
86
  stages: [pre-commit]
122
87
 
123
88
  - id: shellcheck-docs
@@ -126,7 +91,8 @@ repos:
126
91
  --language=console --command="shellcheck --shell=bash"
127
92
  language: python
128
93
  types_or: [markdown, rst]
129
- additional_dependencies: [uv==0.9.5]
94
+ additional_dependencies:
95
+ - *uv_version
130
96
  stages: [pre-commit]
131
97
 
132
98
  - id: shfmt
@@ -134,7 +100,8 @@ repos:
134
100
  entry: uv run --extra=dev shfmt --write --space-redirects --indent=4
135
101
  language: python
136
102
  types_or: [shell]
137
- additional_dependencies: [uv==0.9.5]
103
+ additional_dependencies:
104
+ - *uv_version
138
105
  stages: [pre-commit]
139
106
 
140
107
  - id: shfmt-docs
@@ -143,26 +110,30 @@ repos:
143
110
  --no-pad-file --command="shfmt --write --space-redirects --indent=4"
144
111
  language: python
145
112
  types_or: [markdown, rst]
146
- additional_dependencies: [uv==0.9.5]
113
+ additional_dependencies:
114
+ - *uv_version
147
115
  stages: [pre-commit]
148
116
 
149
117
  - id: mypy
150
118
  name: mypy
151
119
  stages: [pre-push]
152
- entry: uv run --extra=dev -m mypy
120
+ entry: uv run --extra=dev -m mypy --num-workers=4
153
121
  language: python
154
122
  types_or: [python, toml]
155
123
  pass_filenames: false
156
- additional_dependencies: [uv==0.9.5]
124
+ additional_dependencies:
125
+ - *uv_version
157
126
 
158
127
  # We do not use --example-workers 0 due to https://github.com/python/mypy/issues/18283
159
128
  - id: mypy-docs
160
129
  name: mypy-docs
161
130
  stages: [pre-push]
162
- entry: uv run --extra=dev doccmd --no-write-to-file --language=python --command="mypy"
131
+ entry: uv run --extra=dev doccmd --no-write-to-file --language=python --command="mypy
132
+ --num-workers=4"
163
133
  language: python
164
134
  types_or: [markdown, rst]
165
- additional_dependencies: [uv==0.9.5]
135
+ additional_dependencies:
136
+ - *uv_version
166
137
 
167
138
  - id: check-manifest
168
139
  name: check-manifest
@@ -170,7 +141,8 @@ repos:
170
141
  entry: uv run --extra=dev -m check_manifest
171
142
  language: python
172
143
  pass_filenames: false
173
- additional_dependencies: [uv==0.9.5]
144
+ additional_dependencies:
145
+ - *uv_version
174
146
 
175
147
  - id: pyright
176
148
  name: pyright
@@ -179,7 +151,8 @@ repos:
179
151
  language: python
180
152
  types_or: [python, toml]
181
153
  pass_filenames: false
182
- additional_dependencies: [uv==0.9.5]
154
+ additional_dependencies:
155
+ - *uv_version
183
156
 
184
157
  - id: pyright-docs
185
158
  name: pyright-docs
@@ -188,7 +161,8 @@ repos:
188
161
  --command="pyright"
189
162
  language: python
190
163
  types_or: [markdown, rst]
191
- additional_dependencies: [uv==0.9.5]
164
+ additional_dependencies:
165
+ - *uv_version
192
166
 
193
167
  - id: vulture
194
168
  name: vulture
@@ -196,7 +170,8 @@ repos:
196
170
  language: python
197
171
  types_or: [python]
198
172
  pass_filenames: false
199
- additional_dependencies: [uv==0.9.5]
173
+ additional_dependencies:
174
+ - *uv_version
200
175
  stages: [pre-commit]
201
176
 
202
177
  - id: vulture-docs
@@ -205,7 +180,8 @@ repos:
205
180
  --command="vulture"
206
181
  language: python
207
182
  types_or: [markdown, rst]
208
- additional_dependencies: [uv==0.9.5]
183
+ additional_dependencies:
184
+ - *uv_version
209
185
  stages: [pre-commit]
210
186
 
211
187
  - id: pyroma
@@ -214,7 +190,8 @@ repos:
214
190
  language: python
215
191
  pass_filenames: false
216
192
  types_or: [toml]
217
- additional_dependencies: [uv==0.9.5]
193
+ additional_dependencies:
194
+ - *uv_version
218
195
  stages: [pre-commit]
219
196
 
220
197
  - id: deptry
@@ -222,7 +199,8 @@ repos:
222
199
  entry: uv run --extra=dev -m deptry src/
223
200
  language: python
224
201
  pass_filenames: false
225
- additional_dependencies: [uv==0.9.5]
202
+ additional_dependencies:
203
+ - *uv_version
226
204
  stages: [pre-commit]
227
205
 
228
206
  - id: pylint
@@ -231,7 +209,8 @@ repos:
231
209
  language: python
232
210
  stages: [manual]
233
211
  pass_filenames: false
234
- additional_dependencies: [uv==0.9.5]
212
+ additional_dependencies:
213
+ - *uv_version
235
214
 
236
215
  - id: pylint-docs
237
216
  name: pylint-docs
@@ -240,14 +219,16 @@ repos:
240
219
  language: python
241
220
  stages: [manual]
242
221
  types_or: [markdown, rst]
243
- additional_dependencies: [uv==0.9.5]
222
+ additional_dependencies:
223
+ - *uv_version
244
224
 
245
225
  - id: ruff-check-fix
246
226
  name: Ruff check fix
247
227
  entry: uv run --extra=dev -m ruff check --fix
248
228
  language: python
249
229
  types_or: [python]
250
- additional_dependencies: [uv==0.9.5]
230
+ additional_dependencies:
231
+ - *uv_version
251
232
  stages: [pre-commit]
252
233
 
253
234
  - id: ruff-check-fix-docs
@@ -255,7 +236,8 @@ repos:
255
236
  entry: uv run --extra=dev doccmd --language=python --command="ruff check --fix"
256
237
  language: python
257
238
  types_or: [markdown, rst]
258
- additional_dependencies: [uv==0.9.5]
239
+ additional_dependencies:
240
+ - *uv_version
259
241
  stages: [pre-commit]
260
242
 
261
243
  - id: ruff-format-fix
@@ -263,7 +245,8 @@ repos:
263
245
  entry: uv run --extra=dev -m ruff format
264
246
  language: python
265
247
  types_or: [python]
266
- additional_dependencies: [uv==0.9.5]
248
+ additional_dependencies:
249
+ - *uv_version
267
250
  stages: [pre-commit]
268
251
 
269
252
  - id: ruff-format-fix-docs
@@ -272,15 +255,67 @@ repos:
272
255
  format"
273
256
  language: python
274
257
  types_or: [markdown, rst]
275
- additional_dependencies: [uv==0.9.5]
258
+ additional_dependencies:
259
+ - *uv_version
260
+ stages: [pre-commit]
261
+
262
+ - id: strict-kwargs-fix
263
+ name: strict-kwargs
264
+ entry: uv run --extra=dev strict-kwargs check --fix
265
+ language: python
266
+ types_or: [python]
267
+ additional_dependencies:
268
+ - *uv_version
276
269
  stages: [pre-commit]
270
+ require_serial: true
271
+
272
+ - id: no-defaults
273
+ name: no-defaults
274
+ entry: uv run --extra=dev no-defaults
275
+ language: python
276
+ types_or: [python]
277
+ additional_dependencies:
278
+ - *uv_version
279
+ stages: [pre-commit]
280
+ require_serial: true
277
281
 
278
282
  - id: doc8
279
283
  name: doc8
280
284
  entry: uv run --extra=dev -m doc8
281
285
  language: python
282
286
  types_or: [rst]
283
- additional_dependencies: [uv==0.9.5]
287
+ additional_dependencies:
288
+ - *uv_version
289
+ stages: [pre-commit]
290
+
291
+ # Vale enforces prose style rules, such as banning em dashes, in
292
+ # reStructuredText and Markdown files.
293
+ # The rules come from the ``ai-tells`` package pinned in ``.vale.ini``,
294
+ # which ``vale sync`` downloads into the (gitignored) ``styles``
295
+ # directory.
296
+ # Vale needs ``rst2html`` from Docutils on the ``PATH`` to parse
297
+ # reStructuredText.
298
+ # ``vale sync`` also runs when ``.vale.ini`` changes, so a package
299
+ # bump takes effect without waiting for the next reStructuredText
300
+ # change.
301
+ - id: vale-sync
302
+ name: vale sync
303
+ entry: uv run --extra=dev vale sync
304
+ language: python
305
+ pass_filenames: false
306
+ files: (\.(rst|md)$|^\.vale\.ini$)
307
+ additional_dependencies:
308
+ - *uv_version
309
+ stages: [pre-commit]
310
+
311
+ - id: vale
312
+ name: vale
313
+ entry: uv run --extra=dev vale
314
+ language: python
315
+ types_or: [rst, markdown]
316
+ require_serial: true
317
+ additional_dependencies:
318
+ - *uv_version
284
319
  stages: [pre-commit]
285
320
 
286
321
  - id: interrogate
@@ -288,7 +323,8 @@ repos:
288
323
  entry: uv run --extra=dev -m interrogate
289
324
  language: python
290
325
  types_or: [python]
291
- additional_dependencies: [uv==0.9.5]
326
+ additional_dependencies:
327
+ - *uv_version
292
328
  stages: [pre-commit]
293
329
 
294
330
  - id: interrogate-docs
@@ -297,7 +333,8 @@ repos:
297
333
  --command="interrogate"
298
334
  language: python
299
335
  types_or: [markdown, rst]
300
- additional_dependencies: [uv==0.9.5]
336
+ additional_dependencies:
337
+ - *uv_version
301
338
  stages: [pre-commit]
302
339
 
303
340
  - id: pyproject-fmt-fix
@@ -306,7 +343,8 @@ repos:
306
343
  language: python
307
344
  types_or: [toml]
308
345
  files: pyproject.toml
309
- additional_dependencies: [uv==0.9.5]
346
+ additional_dependencies:
347
+ - *uv_version
310
348
  stages: [pre-commit]
311
349
 
312
350
  - id: linkcheck
@@ -317,7 +355,8 @@ repos:
317
355
  types_or: [rst]
318
356
  stages: [manual]
319
357
  pass_filenames: false
320
- additional_dependencies: [uv==0.9.5]
358
+ additional_dependencies:
359
+ - *uv_version
321
360
 
322
361
  - id: spelling
323
362
  name: spelling
@@ -327,7 +366,8 @@ repos:
327
366
  types_or: [rst]
328
367
  stages: [manual]
329
368
  pass_filenames: false
330
- additional_dependencies: [uv==0.9.5]
369
+ additional_dependencies:
370
+ - *uv_version
331
371
 
332
372
  - id: docs
333
373
  name: Build Documentation
@@ -335,7 +375,8 @@ repos:
335
375
  language: python
336
376
  stages: [manual]
337
377
  pass_filenames: false
338
- additional_dependencies: [uv==0.9.5]
378
+ additional_dependencies:
379
+ - *uv_version
339
380
 
340
381
  - id: pyright-verifytypes
341
382
  name: pyright-verifytypes
@@ -344,7 +385,8 @@ repos:
344
385
  language: python
345
386
  pass_filenames: false
346
387
  types_or: [python]
347
- additional_dependencies: [uv==0.9.5]
388
+ additional_dependencies:
389
+ - *uv_version
348
390
 
349
391
  - id: ty
350
392
  name: ty
@@ -353,7 +395,8 @@ repos:
353
395
  language: python
354
396
  types_or: [python, toml]
355
397
  pass_filenames: false
356
- additional_dependencies: [uv==0.9.5]
398
+ additional_dependencies:
399
+ - *uv_version
357
400
 
358
401
  - id: ty-docs
359
402
  name: ty-docs
@@ -362,14 +405,16 @@ repos:
362
405
  --command="ty check"
363
406
  language: python
364
407
  types_or: [markdown, rst]
365
- additional_dependencies: [uv==0.9.5]
408
+ additional_dependencies:
409
+ - *uv_version
366
410
 
367
411
  - id: yamlfix
368
412
  name: yamlfix
369
413
  entry: uv run --extra=dev yamlfix
370
414
  language: python
371
415
  types_or: [yaml]
372
- additional_dependencies: [uv==0.9.5]
416
+ additional_dependencies:
417
+ - *uv_version
373
418
  stages: [pre-commit]
374
419
 
375
420
  - id: zizmor
@@ -378,7 +423,8 @@ repos:
378
423
  language: python
379
424
  pass_filenames: false
380
425
  types_or: [yaml]
381
- additional_dependencies: [uv==0.9.5]
426
+ additional_dependencies:
427
+ - *uv_version
382
428
  stages: [pre-commit]
383
429
 
384
430
  - id: sphinx-lint
@@ -386,7 +432,8 @@ repos:
386
432
  entry: uv run --extra=dev sphinx-lint --enable=all --disable=line-too-long
387
433
  language: python
388
434
  types_or: [rst]
389
- additional_dependencies: [uv==0.9.5]
435
+ additional_dependencies:
436
+ - *uv_version
390
437
  stages: [pre-commit]
391
438
 
392
439
  - id: pyrefly
@@ -396,7 +443,8 @@ repos:
396
443
  language: python
397
444
  types_or: [python, toml]
398
445
  pass_filenames: false
399
- additional_dependencies: [uv==0.9.5]
446
+ additional_dependencies:
447
+ - *uv_version
400
448
 
401
449
  - id: pyrefly-docs
402
450
  name: pyrefly-docs
@@ -405,4 +453,5 @@ repos:
405
453
  --command="pyrefly check"
406
454
  language: python
407
455
  types_or: [markdown, rst]
408
- additional_dependencies: [uv==0.9.5]
456
+ additional_dependencies:
457
+ - *uv_version