Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
c5bb2b6
build: Migrate from Poetry to uv (#606)
razor-x Aug 13, 2026
5d0a961
3.0.0b1
seambot Aug 13, 2026
35b243b
docs: name the page cursor property as Python spells it (#607)
razor-x Aug 13, 2026
17deca0
Type check the whole project instead of seam/resources with error cod…
razor-x Aug 13, 2026
d635b52
feat: Replace niquests with httpx (#604)
razor-x Aug 13, 2026
483371d
feat: Remove lts_version unused
razor-x Aug 13, 2026
4983aec
Update to uv v12
razor-x Aug 13, 2026
6d9f79e
Fix prune workflow job name
razor-x Aug 13, 2026
b560ab8
Handle retry for httpx transports
razor-x Aug 13, 2026
a6f5f6d
Remove redundant comments
razor-x Aug 13, 2026
70b5519
ci: Generate code
seambot Aug 13, 2026
6ac5168
Make retry behavior explicit
razor-x Aug 13, 2026
05a26eb
Fix known failing test
razor-x Aug 13, 2026
e03e0f9
Drop support for python 3.11
razor-x Aug 13, 2026
51c5755
Update types and blueprint
razor-x Aug 13, 2026
975e57f
ci: Generate code
seambot Aug 13, 2026
566beea
feat: use preferred HTTP methods in generated routes
razor-x Aug 13, 2026
b0de564
ci: Generate code
seambot Aug 13, 2026
e872878
feat: require parameters when endpoints need them
razor-x Aug 13, 2026
7d548e2
ci: Generate code
seambot Aug 13, 2026
cb12e23
feat: preserve nullable request parameters
razor-x Aug 13, 2026
b941a83
Revert "feat: preserve nullable request parameters"
razor-x Aug 13, 2026
583596a
Validate for required params
razor-x Aug 13, 2026
255704d
ci: Generate code
seambot Aug 13, 2026
fccc16d
fix: Generate a valid any() call for required parameter checks
claude Aug 13, 2026
3dc6fd6
refactor: Check the built payload for required parameters
claude Aug 13, 2026
08f57a6
3.0.0b2
seambot Aug 13, 2026
623287b
3.0.0b1
seambot Aug 13, 2026
ff0b518
Fix prerelease versioning by mirroring PEP 440 tags to semver (#610)
razor-x Aug 13, 2026
5ebe62f
3.0.0b3
seambot Aug 13, 2026
a536e3a
build: update the development dependencies (#612)
razor-x Aug 13, 2026
aa15ecf
fix: pin the Black target version to the minimum supported Python (#613)
razor-x Aug 13, 2026
7872dd7
3.0.0b4
seambot Aug 13, 2026
1219392
feat: implement the URL search params serialization standard (#611)
razor-x Aug 13, 2026
84b5485
3.0.0b5
seambot Aug 13, 2026
52cfee7
feat: apply the URL search params standard and type nullable params (…
razor-x Aug 13, 2026
d8d070e
3.0.0b6
seambot Aug 13, 2026
c826e9f
Add migration guide for seam v2 to v3 upgrade (#615)
razor-x Aug 13, 2026
491b2c4
docs: reference stable v3.0.0 instead of prereleases in migration guide
claude Aug 13, 2026
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
8 changes: 3 additions & 5 deletions .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ ARG VARIANT="3"
FROM mcr.microsoft.com/vscode/devcontainers/python:${VARIANT}

ARG NODE_VERSION="24"
ARG POETRY_VERSION="1.8.2"
ARG POETRY_SRC="https://install.python-poetry.org"
ARG UV_VERSION="0.8.17"
ARG UV_SRC="https://astral.sh/uv"

# https://github.com/microsoft/vscode-dev-containers/blob/main/containers/go/.devcontainer/base.Dockerfile
ENV USERNAME=vscode
Expand All @@ -25,9 +25,7 @@ RUN apt-get update -y \
USER vscode
WORKDIR /home/vscode

RUN curl -fsSL -o install-poetry.py "${POETRY_SRC}" \
&& python install-poetry.py --version $POETRY_VERSION \
&& rm install-poetry.py
RUN curl -fsSL "${UV_SRC}/${UV_VERSION}/install.sh" | sh

RUN mkdir -p .config/git \
&& echo ".vscode/*" >> .config/git/ignore \
Expand Down
7 changes: 3 additions & 4 deletions .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,11 @@
"dockerfile": "Dockerfile",
"args": {
"NODE_VERSION": "24",
"POETRY_VERSION": "1.8.2",
"VARIANT": "3.12"
"UV_VERSION": "0.8.17",
"VARIANT": "3.14"
}
},
"remoteEnv": {
"POETRY_VIRTUALENVS_IN_PROJECT": "true",
"PATH": "${containerEnv:PATH}:/home/vscode/.local/bin"
},
"extensions": [
Expand All @@ -19,6 +18,6 @@
"EditorConfig.EditorConfig",
"esbenp.prettier-vscode"
],
"postCreateCommand": "poetry install && npm install",
"postCreateCommand": "uv sync && npm install",
"remoteUser": "vscode"
}
42 changes: 6 additions & 36 deletions .github/actions/setup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,7 @@ inputs:
python_version:
description: The Python version.
required: false
default: '3.12'
poetry_version:
description: The Poetry version.
required: false
default: '1.8.2'
default: '3.14'
just_version:
description: The just version.
required: false
Expand All @@ -23,46 +19,20 @@ inputs:
runs:
using: composite
steps:
- name: Setup Poetry cache on Linux
uses: actions/cache@v4
if: runner.os == 'Linux'
with:
key: poetry-${{ inputs.poetry_version }}-${{ inputs.python_version }}-${{ runner.os }}-${{ runner.arch }}
path: |
~/.local/bin
~/.local/share/pypoetry
- name: Setup Poetry cache on macOS
uses: actions/cache@v4
if: runner.os == 'macOS'
with:
key: poetry-${{ inputs.poetry_version }}-${{ inputs.python_version }}-${{ runner.os }}-${{ runner.arch }}
path: |
~/.local/bin
~/.local/share/pypoetry
~/Library/Application Support/pypoetry
- name: Setup just
uses: extractions/setup-just@v4
with:
just-version: ${{ inputs.just_version }}
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: ${{ inputs.python_version }}
- name: Setup Poetry
uses: Gr1N/setup-poetry@v9
with:
poetry-version: ${{ inputs.poetry_version }}
- name: Setup Python with cache
uses: actions/setup-python@v5
if: inputs.install_dependencies == 'true'
- name: Setup uv
uses: astral-sh/setup-uv@v7
with:
cache: poetry
python-version: ${{ inputs.python_version }}
enable-cache: true
- name: Check lockfile
if: inputs.install_dependencies == 'true'
shell: bash
run: poetry check --lock
run: uv lock --check
- name: Install dependencies
if: inputs.install_dependencies == 'true'
shell: bash
run: poetry install --sync
run: uv sync
2 changes: 1 addition & 1 deletion .github/workflows/_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ on:
description: The Python version.
type: string
required: false
default: '3.12'
default: '3.14'
runs_on:
description: The runner environment.
type: string
Expand Down
5 changes: 2 additions & 3 deletions .github/workflows/_publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ jobs:
name: ${{ inputs.artifact_name }}
path: dist/
- name: Publish
run: poetry publish --skip-existing -u $USERNAME -p $PASSWORD
run: uv publish --check-url https://pypi.org/simple/
env:
USERNAME: __token__
PASSWORD: ${{ secrets.registry_token }}
UV_PUBLISH_TOKEN: ${{ secrets.registry_token }}
11 changes: 8 additions & 3 deletions .github/workflows/check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,10 @@ jobs:
os:
- ubuntu-latest
python:
- '3.10'
- '3.11'
- '3.12'
- '3.13'
- '3.14'
include:
- os: ubuntu-latest
os_name: Linux
Expand All @@ -47,6 +48,8 @@ jobs:
python:
- '3.11'
- '3.12'
- '3.13'
- '3.14'
steps:
- name: Checkout
uses: actions/checkout@v7
Expand All @@ -69,9 +72,10 @@ jobs:
os:
- ubuntu-latest
python:
- '3.10'
- '3.11'
- '3.12'
- '3.13'
- '3.14'
include:
- os: ubuntu-latest
os_name: Linux
Expand All @@ -86,9 +90,10 @@ jobs:
os:
- ubuntu-latest
python:
- '3.10'
- '3.11'
- '3.12'
- '3.13'
- '3.14'
include:
- os: ubuntu-latest
os_name: Linux
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/generate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,12 @@ jobs:
uses: ./.github/actions/setup-node
with:
install_dependencies: 'false'
- name: Normalize poetry.lock
run: poetry lock --no-update
- name: Normalize uv.lock
run: uv lock
- name: Normalize package-lock.json
run: npm install
- name: Install dependencies
run: poetry install --sync
run: uv sync
- name: Generate code
run: npm run generate
- name: Commit
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/prune.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
- cron: '0 15 * * 3'

jobs:
tag:
branches:
name: Prune Branches
runs-on: 'ubuntu-latest'
timeout-minutes: 30
Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/semantic-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,31 @@ jobs:
uses: actions/checkout@v7
with:
fetch-depth: 0
- name: Mirror prerelease tags as semver
run: |
# Prerelease tags use PEP 440 (v3.0.0b1) to match the published
# package version, but semantic-release only understands semver and
# silently ignores tags it cannot parse. Without this, every run
# reports the first prerelease of the channel as the next version.
# Mirror each PEP 440 prerelease tag onto its semver equivalent
# (v3.0.0-beta.1). These are local to the run and are never pushed;
# the PEP 440 tags remain the only real ones. The channel notes the
# Version workflow records against the tagged commit apply to the
# mirrored tag too, since notes attach to commits, not tags.
for tag in $(git tag --list 'v*'); do
semver="$(
printf '%s' "${tag#v}" | sed -E \
-e 's/^([0-9]+\.[0-9]+\.[0-9]+)a([0-9]+)$/\1-alpha.\2/' \
-e 's/^([0-9]+\.[0-9]+\.[0-9]+)b([0-9]+)$/\1-beta.\2/' \
-e 's/^([0-9]+\.[0-9]+\.[0-9]+)rc([0-9]+)$/\1-rc.\2/'
)"
if [ "$semver" = "${tag#v}" ]; then
continue
fi

git tag --force "v$semver" "$tag^{commit}"
echo "Mirrored $tag as v$semver."
done
- name: Semantic release
id: release
uses: cycjimmy/semantic-release-action@v6
Expand Down
28 changes: 18 additions & 10 deletions .github/workflows/version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,28 @@ jobs:
passphrase: ${{ secrets.GPG_PASSPHRASE }}
- name: Setup
uses: ./.github/actions/setup
# uv normalizes the semver version semantic-release computes
# (3.0.0-beta.1) to PEP 440 (3.0.0b1), which is what gets committed,
# tagged and published. The Semantic Release workflow mirrors that tag
# back to semver so it can pick up where the last prerelease left off.
- name: Cut ${{ github.event.inputs.version }} version
run: |
poetry version "${{ github.event.inputs.version }}"
uv version "${{ github.event.inputs.version }}"
just version
# semantic-release only treats a prerelease tag as released when a note
# records the channel it went out on, so record it here, once the release
# exists. The note is keyed to the commit rather than the tag, which is
# what lets the mirrored semver tag pick it up.
- name: Record prerelease channel
env:
VERSION: ${{ github.event.inputs.version }}
run: |
case "$VERSION" in
*-*) channel="${VERSION#*-}"; channel="${channel%%.*}" ;;
tag="v$(uv version --short)"
case "$(uv version --short)" in
*.*.*a[0-9]*) channel=alpha ;;
*.*.*b[0-9]*) channel=beta ;;
*.*.*rc[0-9]*) channel=rc ;;
*) echo "Stable release, no channel note required."; exit 0 ;;
esac
git fetch origin "+refs/notes/semantic-release:refs/notes/semantic-release" || true
git notes --ref semantic-release add --force \
--message "{\"channels\":[\"$channel\"]}" "v$VERSION^{commit}"
git push origin refs/notes/semantic-release
echo "Recorded v$VERSION on the '$channel' channel."
git notes --ref "semantic-release-$tag" add --force \
--message "{\"channels\":[\"$channel\"]}" "$tag^{commit}"
git push origin "refs/notes/semantic-release-$tag"
echo "Recorded $tag on the '$channel' channel."
8 changes: 4 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,12 @@ ipython_config.py
# install all needed dependencies.
#Pipfile.lock

# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# uv
# Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock
# https://docs.astral.sh/uv/concepts/projects/sync/#checking-the-lockfile
#uv.lock

# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
Expand Down
2 changes: 1 addition & 1 deletion .python-version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
3.12.2
3.14
Loading
Loading