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
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ jobs:
# no checkout and no workspace: the published distributions have to resolve each other and
# their dependencies from the index and the wheels alone
- run: uv venv --python 3.11 clean
- run: uv pip install --python clean --find-links dist --no-build "easyssf-receiver-fastapi==0.7.0" "easyssf-test==0.7.0"
- run: uv pip install --python clean --find-links dist --no-build "easyssf-receiver-fastapi==0.8.0.dev0" "easyssf-test==0.8.0.dev0"
- run: uv pip list --python clean | grep easyssf
- run: |
clean/bin/python - <<'EOF'
Expand Down
5 changes: 5 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -220,6 +220,11 @@ A release goes through a commit like every other change:
3. Push and let CI pass, then push the tag on that commit (`git tag v<version> && git push origin
v<version>`) and watch the workflow.

After a release, `main` starts the next version as a development version, as Java's
`0.8.0-SNAPSHOT` and .NET's `0.8.0-alpha.1` do: `version = "0.8.0.dev0"` everywhere, the pins at
`>=0.8.0.dev0,<0.9` (`<0.8` would exclude it), and the version `ci.yml` installs, then `uv lock`.
The release sets them to `0.8.0` and `>=0.8,<0.9`.

A rerun after a partial upload is safe: `skip-existing` leaves the files already on PyPI alone.
PyPI never accepts a file name twice, so a broken release is fixed with a new version, not a
re-upload.
Expand Down
6 changes: 2 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,17 +49,15 @@ Version 0.7.0 is at feature parity with [easyssf 0.7.0 for Java](https://github.
the version follows the Java library, and below 1.0 a release may break the API when the
CHANGELOG says so. Python 3.11 or later, Apache-2.0.

## Distributions
## Modules

One `uv` workspace, one `easyssf` namespace:

| Distribution | Import | Holds |
| Module | Import | Holds |
|---|---|---|
| `easyssf-core` | `easyssf.core` | The vocabulary: SETs (`EventToken`, the `new_set` builder), subjects, delivery methods, stream configuration, transmitter metadata; `easyssf.core.event_types` the event type URIs with aliases; `easyssf.core.caep`, `.risc`, `.scim` the typed events; `easyssf.core.signing` signs SETs (`easyssf-core[signing]`) |
| `easyssf-receiver` | `easyssf.receiver` | The receiver: verification, de-duplication with a lease, push and poll, stream management, typed handlers, token revocation, session termination, metrics; `ReceiverConfig` and `Receiver`, which assembles a receiver from it; `PushHandler`, mounted on any framework with `easyssf.receiver.asgi.push_app` or `easyssf.receiver.wsgi.push_wsgi_app`; `RevocationMiddleware` |
| `easyssf-receiver-sqlalchemy` (planned) | `easyssf.sqlalchemy` | The three tables shared with Java, Go, .NET and Rust, on SQLAlchemy 2 |
| `easyssf-receiver-fastapi` | `easyssf.fastapi` | The push endpoint as an `APIRouter` (`push_router_for`), the rejection of revoked access tokens as a dependency (`revocation_dependency`) or middleware, the receiver's lifecycle as a lifespan (`receiver_lifespan`), its health as a route (`health_router`), see [FastAPI](#fastapi) |
| `easyssf-receiver-litestar`, `-flask` (planned) | `easyssf.litestar`, `.flask` | The push route, the revocation middleware or guard and the lifecycle of each framework |
| `easyssf-test` | `easyssf.testing` | `TestTransmitter`: signs SETs, serves metadata and the JWK Set, issues tokens, emulates stream management and the poll endpoint, in-process through the `httpx.AsyncClient` it hands out, no socket involved |
| `conformance/` (not published) | `easyssf.conformance` | Runs the OpenID conformance suite's SSF receiver test plans against the receiver, with the suite started by testcontainers-python, see [Conformance](#conformance) |

Expand Down
8 changes: 4 additions & 4 deletions conformance/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
[project]
name = "easyssf-conformance"
version = "0.7.0"
version = "0.8.0.dev0"
description = "Runs the OpenID conformance suite's SSF receiver test plans against easyssf-receiver, with the suite started by testcontainers; not published"
readme = "README.md"
requires-python = ">=3.11"
license = "Apache-2.0"
classifiers = ["Private :: Do Not Upload"]
dependencies = [
"easyssf-core>=0.7,<0.8",
"easyssf-receiver>=0.7,<0.8",
"easyssf-test>=0.7,<0.8",
"easyssf-core>=0.8.0.dev0,<0.9",
"easyssf-receiver>=0.8.0.dev0,<0.9",
"easyssf-test>=0.8.0.dev0,<0.9",
"httpx>=0.28,<1",
"testcontainers>=4.15,<5",
"uvicorn>=0.34",
Expand Down
2 changes: 1 addition & 1 deletion easyssf-core/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "easyssf-core"
version = "0.7.0"
version = "0.8.0.dev0"
description = "The vocabulary of the OpenID Shared Signals Framework: SETs, subjects, event types, the typed CAEP, RISC and SCIM events, stream configuration and transmitter metadata"
readme = "README.md"
requires-python = ">=3.11"
Expand Down
4 changes: 2 additions & 2 deletions easyssf-receiver-fastapi/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "easyssf-receiver-fastapi"
version = "0.7.0"
version = "0.8.0.dev0"
description = "The easyssf SSF receiver for FastAPI: the push endpoint, the rejection of revoked access tokens and the receiver's lifecycle"
readme = "README.md"
requires-python = ">=3.11"
Expand All @@ -17,7 +17,7 @@ classifiers = [
"Typing :: Typed",
]
dependencies = [
"easyssf-receiver>=0.7,<0.8",
"easyssf-receiver>=0.8.0.dev0,<0.9",
"fastapi>=0.115,<1",
]

Expand Down
4 changes: 2 additions & 2 deletions easyssf-receiver/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "easyssf-receiver"
version = "0.7.0"
version = "0.8.0.dev0"
description = "An SSF receiver for Python, framework independent: SET verification, push and poll delivery, stream management, typed CAEP, RISC and SCIM handlers, token revocation and session termination"
readme = "README.md"
requires-python = ">=3.11"
Expand All @@ -16,7 +16,7 @@ classifiers = [
"Typing :: Typed",
]
dependencies = [
"easyssf-core>=0.7,<0.8",
"easyssf-core>=0.8.0.dev0,<0.9",
"joserfc>=1.7,<2",
"httpx>=0.28,<1",
]
Expand Down
4 changes: 2 additions & 2 deletions easyssf-test/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "easyssf-test"
version = "0.7.0"
version = "0.8.0.dev0"
description = "A test transmitter for SSF receivers: signs SETs, serves metadata and a JWK Set, issues tokens, emulates stream management and the poll endpoint, in-process through an httpx transport"
readme = "README.md"
requires-python = ">=3.11"
Expand All @@ -17,7 +17,7 @@ classifiers = [
"Typing :: Typed",
]
dependencies = [
"easyssf-core[signing]>=0.7,<0.8",
"easyssf-core[signing]>=0.8.0.dev0,<0.9",
"joserfc>=1.7,<2",
"httpx>=0.28,<1",
]
Expand Down
6 changes: 3 additions & 3 deletions examples/fastapi/resource-server/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
[project]
name = "example-fastapi-resource-server"
version = "0.7.0"
version = "0.8.0.dev0"
description = "An OAuth2 resource server on FastAPI that rejects access tokens once their Keycloak session was revoked; the port of the Spring Boot example, not published"
requires-python = ">=3.11"
license = "Apache-2.0"
classifiers = ["Private :: Do Not Upload"]
dependencies = [
"easyssf-receiver>=0.7,<0.8",
"easyssf-receiver-fastapi>=0.7,<0.8",
"easyssf-receiver>=0.8.0.dev0,<0.9",
"easyssf-receiver-fastapi>=0.8.0.dev0,<0.9",
"fastapi>=0.115,<1",
"uvicorn>=0.34",
"joserfc>=1.7,<2",
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "easyssf-python"
version = "0.7.0"
version = "0.8.0.dev0"
description = "Workspace root of easyssf for Python: not published, see the packages"
requires-python = ">=3.11"
license = "Apache-2.0"
Expand Down
14 changes: 7 additions & 7 deletions uv.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading