Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 5 additions & 14 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,27 +47,18 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# towncrier writes the rendered notes to stdout (informational
# chatter goes to stderr), so this is the curated release body for
# this version, not github-tag-action's commit-derived changelog.
- name: Generate the GitHub release notes
- name: Assemble native Markdown release notes
env:
RELEASE: ${{ steps.calver.outputs.release }}
run: uv run --group=release towncrier build --draft --version "$RELEASE" >
release-notes.md

# Assemble the same fragments into CHANGELOG.rst under a new
# ``$RELEASE`` section and delete the consumed fragment files.
- name: Update the changelog
env:
RELEASE: ${{ steps.calver.outputs.release }}
run: uv run --group=release towncrier build --yes --version "$RELEASE"
run: |
uv run --group=release towncrier build --yes --version "$RELEASE"
cp "docs/source/changelog/$RELEASE.md" release-notes.md

- uses: stefanzweifel/git-auto-commit-action@v7
id: commit
with:
commit_message: Bump CHANGELOG
file_pattern: CHANGELOG.rst newsfragments
file_pattern: CHANGELOG.md docs/source/changelog newsfragments
# Error if there are no changes.
skip_dirty_check: true

Expand Down
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Changelog

Release notes are stored as [one Markdown file per version](docs/source/changelog/).
180 changes: 0 additions & 180 deletions CHANGELOG.rst

This file was deleted.

11 changes: 11 additions & 0 deletions docs/source/changelog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Changelog

Releases are assembled from `newsfragments/` using Towncrier.

```{toctree}
:maxdepth: 1
:glob:
:reversed:

changelog/*
```
1 change: 0 additions & 1 deletion docs/source/changelog.rst

This file was deleted.

3 changes: 3 additions & 0 deletions docs/source/changelog/2019.11.23.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2019.11.23.0

- Make `active_flag` and `application_metadata` required on `add_target`.
3 changes: 3 additions & 0 deletions docs/source/changelog/2020.03.21.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2020.03.21.0

- Add Windows support.
1 change: 1 addition & 0 deletions docs/source/changelog/2020.06.19.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2020.06.19.0
3 changes: 3 additions & 0 deletions docs/source/changelog/2020.08.21.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2020.08.21.0

- Change the return type of `vws_client.get_target_record` to match what is returned by the web API.
5 changes: 5 additions & 0 deletions docs/source/changelog/2020.09.07.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 2020.09.07.0

- Breaking change: Move exceptions and create base exceptions.
It is now possible to, for example, catch `vws.exceptions.base_exceptions.VWSException` to catch many of the exceptions raised by the `VWS` client.
Credit to `@laymonage` for this change.
5 changes: 5 additions & 0 deletions docs/source/changelog/2021.03.28.0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 2021.03.28.0

- Breaking change: The `vws.exceptions.cloud_reco_exceptions.MatchProcessing` is now `vws.exceptions.custom_exceptions.ActiveMatchingTargetsDeleteProcessing`.
- Added new exception `vws.exceptions.custom_exceptions.RequestEntityTooLarge`.
- Add better exception handling when querying a server which does not serve the Vuforia API.
1 change: 1 addition & 0 deletions docs/source/changelog/2021.03.28.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2021.03.28.1
1 change: 1 addition & 0 deletions docs/source/changelog/2021.03.28.2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2021.03.28.2
1 change: 1 addition & 0 deletions docs/source/changelog/2023.03.05.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2023.03.05
3 changes: 3 additions & 0 deletions docs/source/changelog/2023.03.25.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2023.03.25

- Support file-like objects in every method which accepts a file.
3 changes: 3 additions & 0 deletions docs/source/changelog/2023.05.21.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2023.05.21

- Breaking change: the `vws.exceptions.custom_exceptions.ActiveMatchingTargetsDeleteProcessing` exception has been removed as Vuforia no longer returns this error.
1 change: 1 addition & 0 deletions docs/source/changelog/2023.12.26.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2023.12.26
4 changes: 4 additions & 0 deletions docs/source/changelog/2023.12.27.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 2023.12.27

- Breaking change: The `vws.exceptions.cloud_reco_exceptions.UnknownVWSErrorPossiblyBadName` is now `vws.exceptions.custom_exceptions.OopsAnErrorOccurredPossiblyBadName`.
- `vws.exceptions.custom_exceptions.OopsAnErrorOccurredPossiblyBadName` now has a `response` parameter and attribute.
1 change: 1 addition & 0 deletions docs/source/changelog/2024.02.04.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2024.02.04.1
3 changes: 3 additions & 0 deletions docs/source/changelog/2024.02.04.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2024.02.04

- Return a new error (`vws.custom_exceptions.ServerError`) when the server returns a 5xx status code.
3 changes: 3 additions & 0 deletions docs/source/changelog/2024.02.06.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2024.02.06

- Exception response attributes are now `vws.exceptions.response.Response` instances rather than `requests.Response` objects.
3 changes: 3 additions & 0 deletions docs/source/changelog/2024.02.19.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2024.02.19

- Add exception response attribute to `vws.exceptions.custom_exceptions.RequestEntityTooLarge`.
5 changes: 5 additions & 0 deletions docs/source/changelog/2024.09.02.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 2024.09.02

- Breaking change: Exception names now end with `Error`.
- Use a timeout (30 seconds) when making requests to the VWS API.
- Type hint changes: images are now `io.BytesIO` instances or `io.BufferedRandom`.
3 changes: 3 additions & 0 deletions docs/source/changelog/2024.09.03.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2024.09.03

- Make `VWS.make_request` a public method.
1 change: 1 addition & 0 deletions docs/source/changelog/2024.09.04.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2024.09.04.1
4 changes: 4 additions & 0 deletions docs/source/changelog/2024.09.04.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# 2024.09.04

- Move `Response` from `vws.exceptions.response` to `vws.types`.
- Add `raw` field to `Response`.
1 change: 1 addition & 0 deletions docs/source/changelog/2024.09.21.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2024.09.21
1 change: 1 addition & 0 deletions docs/source/changelog/2025.03.10.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2025.03.10.1
3 changes: 3 additions & 0 deletions docs/source/changelog/2025.03.10.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2025.03.10

- Removed `vws.exceptions.custom_exceptions.OopsAnErrorOccurredPossiblyBadName` which now does not occur in VWS.
5 changes: 5 additions & 0 deletions docs/source/changelog/2026.02.15.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 2026.02.15

- Add `request_timeout_seconds` parameter to `VWS` and `CloudRecoService`, allowing customization of the request timeout.
This accepts a float or a `(connect, read)` tuple, matching the `requests` library's timeout interface.
The default remains 30 seconds.
1 change: 1 addition & 0 deletions docs/source/changelog/2026.02.21.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2026.02.21
1 change: 1 addition & 0 deletions docs/source/changelog/2026.02.22.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2026.02.22
1 change: 1 addition & 0 deletions docs/source/changelog/2026.02.23.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2026.02.23
1 change: 1 addition & 0 deletions docs/source/changelog/2026.02.24.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2026.02.24
1 change: 1 addition & 0 deletions docs/source/changelog/2026.02.25.1.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2026.02.25.1
1 change: 1 addition & 0 deletions docs/source/changelog/2026.02.25.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# 2026.02.25
13 changes: 13 additions & 0 deletions docs/source/changelog/2026.08.14.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# 2026.08.14

- Drop Python 3.13 support, update VWS Python Mock, and test quota and project-state error responses against the mock.
- Add `QuotaExceededError`, `LicenseCheckFailedError`, and `AuthorizationFailedError` for documented VuMark Generation API result codes.
- Fix `target_id` on target exceptions when `base_vws_url` includes a path prefix.
- Retain explicitly provided falsy custom transports instead of replacing them with defaults.
- Raise a response-carrying `CloudRecoError` when Cloud Query returns a documented empty or non-JSON 4xx response instead of leaking `JSONDecodeError`.
- Add support for the Model Target Web API.
`ModelTargetService` and `AsyncModelTargetService` create standard and advanced Model Target datasets, wait for them to be generated, download them and delete them.
- Map the `ProjectHasNoApiAccess` result code, as spelled in Vuforia's result codes table, to `ProjectHasNoAPIAccessError`.
The previously mapped `ProjectHasNoAPIAccess` casing, which Vuforia does not document, is no longer mapped.
- Add support for the Database Reco Counts report.
`VWS` and `AsyncVWS` take an optional `database_id`, and have new `request_database_reco_counts_report`, `download_reco_counts_report` and `wait_for_reco_counts_report` methods.
3 changes: 3 additions & 0 deletions docs/source/changelog/2026.08.26.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# 2026.08.26

- Test synchronous and asynchronous Model Target error responses through the public mock API, and include rate-limit and server-error branches in coverage.
5 changes: 5 additions & 0 deletions docs/source/changelog/2026.09.07.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 2026.09.07

- Add `HTTPX2Transport` and `AsyncHTTPX2Transport`, which make requests with `httpx2`, the continuation of `httpx` maintained by Pydantic.
The `requests` and `httpx` transports are unchanged.
`httpx` and `httpx2` objects are never mixed: the `httpx` transports raise `httpx` exceptions and the `httpx2` transports raise `httpx2` exceptions.
7 changes: 4 additions & 3 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
author = _pyproject_config.author

extensions = [
"myst_parser",
"sphinx_copybutton",
"sphinx.ext.autodoc",
"sphinx.ext.intersphinx",
Expand All @@ -27,15 +28,15 @@
]

# Render the unreleased ``newsfragments/`` entries into
# ``docs/source/unreleased.rst`` so the Sphinx spelling, doc-build and
# ``docs/source/unreleased.md`` so the Sphinx spelling, doc-build and
# link-checking gates cover the prose before it is assembled into
# CHANGELOG.rst at release time.
# the versioned Markdown notes at release time.
towncrier_draft_autoversion_mode = "draft"
towncrier_draft_include_empty = True
towncrier_draft_working_directory = f"{_pyproject_file.parent}"

templates_path = ["_templates"]
source_suffix = ".rst"
source_suffix = {".rst": "restructuredtext", ".md": "markdown"}
master_doc = "index"

project_copyright = f"%Y, {author}"
Expand Down
7 changes: 7 additions & 0 deletions docs/source/contributing.rst
Original file line number Diff line number Diff line change
Expand Up @@ -77,3 +77,10 @@ Performing a release
--------------------

See :doc:`release-process`.

Release notes
-------------

Write user-facing changes as Markdown in ``newsfragments/<issue>.change.md``.
Towncrier writes one Markdown file per version, used directly for GitHub release notes.
Invalid fragment names fail release assembly.
Loading
Loading