From 514ce2a88fe1d78eedcd04fb0a5f4d2ecf3f3491 Mon Sep 17 00:00:00 2001 From: "Audrey M. Roy Greenfeld" Date: Mon, 10 Aug 2026 12:29:14 +0700 Subject: [PATCH 1/3] Prepare AirPostgres 0.2.0 --- CHANGELOG/unreleased.md | 17 +++++++-- pyproject.toml | 4 +-- uv.lock | 79 ++--------------------------------------- 3 files changed, 20 insertions(+), 80 deletions(-) diff --git a/CHANGELOG/unreleased.md b/CHANGELOG/unreleased.md index 1b7ec89..d1c9c47 100644 --- a/CHANGELOG/unreleased.md +++ b/CHANGELOG/unreleased.md @@ -1,6 +1,11 @@ -# Unreleased +# AirPostgres 0.2.0: PostgreSQL persistence for AirModel -Record user-visible changes here before the next release. +AirPostgres 0.2.0 replaces the original package scaffold with a complete +asyncpg-backed persistence backend for Air 0.49 and later. + +```bash +uv add "AirPostgres>=0.2.0" +``` ## Added @@ -16,3 +21,11 @@ Record user-visible changes here before the next release. - Replaced the generated command-line placeholder with the Air model backend. - Raised the minimum supported Python version to 3.13. + +## Upgrade notes + +- AirPostgres requires Air 0.49 or later. Applications migrating from Air's + former built-in PostgreSQL integration should create an `AirPostgres` + instance explicitly and attach its lifespan to the application. +- Version 0.1.0 contained only the generated project scaffold. Version 0.2.0 is + the first release that provides the backend described by the package name. diff --git a/pyproject.toml b/pyproject.toml index 7a015a5..90d6981 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "hatchling.build" [project] name = "AirPostgres" -version = "0.1.0" +version = "0.2.0" description = "PostgreSQL persistence backend for AirModel" readme = "README.md" authors = [ @@ -115,4 +115,4 @@ package = true default-groups = ["dev"] [tool.uv.sources] -air = { path = "../air", editable = true } +air = { git = "https://github.com/feldroy/air.git", rev = "86f023bc9f6ec5f60b74422abf8e63bc4cf4e7d8" } diff --git a/uv.lock b/uv.lock index fba8694..11e1f03 100644 --- a/uv.lock +++ b/uv.lock @@ -5,7 +5,7 @@ requires-python = ">=3.13" [[package]] name = "air" version = "0.49.0" -source = { editable = "../air" } +source = { git = "https://github.com/feldroy/air.git?rev=86f023bc9f6ec5f60b74422abf8e63bc4cf4e7d8#86f023bc9f6ec5f60b74422abf8e63bc4cf4e7d8" } dependencies = [ { name = "fastapi" }, { name = "frozendict" }, @@ -20,82 +20,9 @@ dependencies = [ { name = "uvicorn", marker = "sys_platform != 'emscripten'" }, ] -[package.metadata] -requires-dist = [ - { name = "fastapi", specifier = ">=0.128.8" }, - { name = "fastapi", extras = ["standard"], marker = "extra == 'standard'", specifier = ">=0.128.8" }, - { name = "frozendict", specifier = ">=2.4.7" }, - { name = "itsdangerous", specifier = ">=2.2.0" }, - { name = "jinja2", specifier = ">=3.1.6" }, - { name = "pygments", marker = "sys_platform != 'emscripten'", specifier = ">=2.19.2,!=2.20.0" }, - { name = "python-multipart", specifier = ">=0.0.22" }, - { name = "rich", marker = "sys_platform != 'emscripten'", specifier = ">=14.3.2" }, - { name = "staticware", specifier = ">=0.2.0" }, - { name = "tinyhtml5", specifier = ">=2.1.0,<3" }, - { name = "typer", marker = "sys_platform != 'emscripten'", specifier = ">=0.23.0" }, - { name = "uvicorn", marker = "sys_platform != 'emscripten'", specifier = ">=0.40.0" }, -] -provides-extras = ["standard"] - -[package.metadata.requires-dev] -dev = [ - { name = "click", specifier = ">=8.3.1" }, - { name = "coverage", extras = ["toml"], specifier = ">=7.13.4" }, - { name = "full-match", specifier = ">=0.0.3" }, - { name = "httpx", specifier = ">=0.28.1" }, - { name = "mkdocs", specifier = ">=1.6.1" }, - { name = "mkdocs-autorefs", specifier = ">=1.4.4" }, - { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-llmstxt", specifier = ">=0.5.0" }, - { name = "mkdocs-material", extras = ["imaging"], specifier = ">=9.7.2" }, - { name = "mkdocs-redirects", specifier = ">=1.2.2" }, - { name = "mkdocstrings", extras = ["python"], specifier = ">=1.0.3" }, - { name = "mkdocstrings-python", specifier = ">=2.0.3" }, - { name = "pyinstrument", specifier = ">=5.1.2" }, - { name = "pytest", specifier = ">=9.0.2" }, - { name = "pytest-asyncio", specifier = ">=1.3.0" }, - { name = "pytest-benchmark", specifier = ">=5.2.3" }, - { name = "pytest-github-actions-annotate-failures", specifier = ">=0.3.0" }, - { name = "pytest-pretty", specifier = ">=1.3.0" }, - { name = "ruff", specifier = ">=0.15.0" }, - { name = "ty", specifier = ">=0.0.19" }, - { name = "types-markdown", specifier = ">=3.10.2.20260211" }, - { name = "types-pygments", specifier = ">=2.19.0.20251121" }, -] -devtools = [ - { name = "ruff", specifier = ">=0.15.0" }, - { name = "ty", specifier = ">=0.0.19" }, -] -docs = [ - { name = "click", specifier = ">=8.3.1" }, - { name = "mkdocs", specifier = ">=1.6.1" }, - { name = "mkdocs-autorefs", specifier = ">=1.4.4" }, - { name = "mkdocs-exclude", specifier = ">=1.0.2" }, - { name = "mkdocs-llmstxt", specifier = ">=0.5.0" }, - { name = "mkdocs-material", extras = ["imaging"], specifier = ">=9.7.2" }, - { name = "mkdocs-redirects", specifier = ">=1.2.2" }, - { name = "mkdocstrings", extras = ["python"], specifier = ">=1.0.3" }, - { name = "mkdocstrings-python", specifier = ">=2.0.3" }, -] -examples = [{ name = "pyinstrument", specifier = ">=5.1.2" }] -test = [ - { name = "coverage", extras = ["toml"], specifier = ">=7.13.4" }, - { name = "full-match", specifier = ">=0.0.3" }, - { name = "httpx", specifier = ">=0.28.1" }, - { name = "pytest", specifier = ">=9.0.2" }, - { name = "pytest-asyncio", specifier = ">=1.3.0" }, - { name = "pytest-benchmark", specifier = ">=5.2.3" }, - { name = "pytest-github-actions-annotate-failures", specifier = ">=0.3.0" }, - { name = "pytest-pretty", specifier = ">=1.3.0" }, -] -typing-stubs = [ - { name = "types-markdown", specifier = ">=3.10.2.20260211" }, - { name = "types-pygments", specifier = ">=2.19.0.20251121" }, -] - [[package]] name = "airpostgres" -version = "0.1.0" +version = "0.2.0" source = { editable = "." } dependencies = [ { name = "air" }, @@ -128,7 +55,7 @@ typecheck = [ [package.metadata] requires-dist = [ - { name = "air", editable = "../air" }, + { name = "air", git = "https://github.com/feldroy/air.git?rev=86f023bc9f6ec5f60b74422abf8e63bc4cf4e7d8" }, { name = "asyncpg", specifier = ">=0.30.0" }, ] From b6048bccda64586028169e2705e1e459f6ffb407 Mon Sep 17 00:00:00 2001 From: "Audrey M. Roy Greenfeld" Date: Mon, 10 Aug 2026 12:37:17 +0700 Subject: [PATCH 2/3] Keep release notes compatible with release script --- CHANGELOG/unreleased.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG/unreleased.md b/CHANGELOG/unreleased.md index d1c9c47..f615dd2 100644 --- a/CHANGELOG/unreleased.md +++ b/CHANGELOG/unreleased.md @@ -1,4 +1,4 @@ -# AirPostgres 0.2.0: PostgreSQL persistence for AirModel +# Unreleased AirPostgres 0.2.0 replaces the original package scaffold with a complete asyncpg-backed persistence backend for Air 0.49 and later. From 7a2785324c75846111a52fe2e416a76cc6e056a1 Mon Sep 17 00:00:00 2001 From: "Audrey M. Roy Greenfeld" Date: Mon, 10 Aug 2026 12:47:11 +0700 Subject: [PATCH 3/3] Keep prerelease Air pin development-only --- pyproject.toml | 4 +--- uv.lock | 6 ++++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 90d6981..0a08ac4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,6 +34,7 @@ requires-python = ">=3.13" [dependency-groups] dev = [ + "air @ git+https://github.com/feldroy/air.git@2c0db21e76d2c8caf6a6cd6032e47e788f44d977", { include-group = "lint" }, { include-group = "test" }, { include-group = "typecheck" }, @@ -113,6 +114,3 @@ packages = ["src/airpostgres"] [tool.uv] package = true default-groups = ["dev"] - -[tool.uv.sources] -air = { git = "https://github.com/feldroy/air.git", rev = "86f023bc9f6ec5f60b74422abf8e63bc4cf4e7d8" } diff --git a/uv.lock b/uv.lock index 11e1f03..0d7983a 100644 --- a/uv.lock +++ b/uv.lock @@ -5,7 +5,7 @@ requires-python = ">=3.13" [[package]] name = "air" version = "0.49.0" -source = { git = "https://github.com/feldroy/air.git?rev=86f023bc9f6ec5f60b74422abf8e63bc4cf4e7d8#86f023bc9f6ec5f60b74422abf8e63bc4cf4e7d8" } +source = { git = "https://github.com/feldroy/air.git?rev=2c0db21e76d2c8caf6a6cd6032e47e788f44d977#2c0db21e76d2c8caf6a6cd6032e47e788f44d977" } dependencies = [ { name = "fastapi" }, { name = "frozendict" }, @@ -31,6 +31,7 @@ dependencies = [ [package.dev-dependencies] dev = [ + { name = "air" }, { name = "coverage" }, { name = "pytest" }, { name = "pytest-asyncio" }, @@ -55,12 +56,13 @@ typecheck = [ [package.metadata] requires-dist = [ - { name = "air", git = "https://github.com/feldroy/air.git?rev=86f023bc9f6ec5f60b74422abf8e63bc4cf4e7d8" }, + { name = "air", specifier = ">=0.49.0" }, { name = "asyncpg", specifier = ">=0.30.0" }, ] [package.metadata.requires-dev] dev = [ + { name = "air", git = "https://github.com/feldroy/air.git?rev=2c0db21e76d2c8caf6a6cd6032e47e788f44d977" }, { name = "coverage", extras = ["toml"], specifier = ">=7.13.4" }, { name = "pytest", specifier = ">=9.0.2" }, { name = "pytest-asyncio", specifier = ">=1.3.0" },