Repository navigation
Conversation
Both were scheduled for removal in 1.0.0. The FastAPI integration now lives in the `faststream_fastapi` package; docs and README point there. `StartAbleApplication.set_broker()` is gone, use `add_broker()`. `get_response_schema()` only existed for FastAPI's Dependant object and had no callers left, so it goes too. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The mkdocstrings-based "Reference - Code API" section is gone together with `create_api_docs.py`, the `build-api-docs` / `build-fast` commands, the `docs-build-api` recipe and the CI step. Navigation is a plain, tracked `docs/docs/SUMMARY.md` instead of a rendered template. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Bump the package version and rewrite the versioning policy: from 1.0.0 FastStream follows SemVer, and the pre-1.0 "minor is major" wording is gone. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Conflict resolution: - the FastAPI plugin, its tests and the generated API Reference stay removed; the edits main made to them (strict mypy, lint) are dropped, along with the new FastAPI router cases in tests/mypy, test_client_rack and test_sentinel - docs: main's i18n removal and `docs-check` gate are kept, without the API reference steps; the tracked navigation moves to docs/docs/en/SUMMARY.md, since `docs/docs/en/` is now the `docs_dir` - release.md links to the renamed `#fastapi-plugin` anchor - version stays 1.0.0; uv.lock is main's lock re-resolved Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
`check_site.py` no longer special-cases `api/` and `public_api/`, and the sitemap override goes: without those pages it equals mkdocs' own template. The two `test_fastapi` snapshots lost their tests when the FastAPI plugin was removed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The FastAPI plugin page stays removed; main only fixed its grammar. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
`on_error_fail` belongs to the macros plugin and stays; the mkdocstrings block next to it does not exist on 1.0.0. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The five how-to pages send contributors to the navigation file by its GitHub URL on `main`. On 1.0.0 that file moved to `docs/docs/en/SUMMARY.md`, a path `main` gains only when this release ships, so lychee answers 404 and takes the `docs` gate with it. It went unnoticed because PR #3125 is a draft and every test job skips drafts; #3131 is the first non-draft PR on this base to run the check. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
redis-py 8.0.0 gave the async `RedisCluster` `publish` and `pubsub`, so the synchronous workaround from #2854 can go: no second Redis client, no `ThreadPoolExecutor` in an otherwise async path, and no cluster-only code branch wherever Pub/Sub is involved. `RedisClusterFastProducer`, `_SyncPubSubProxy`, `sync_publish()`, `_get_sync_cluster()` and the `_sync_cluster` / `_thread_pool` fields on the base `ConnectionState` are gone. Cluster now uses the same `RedisFastProducer` and the stock `ChannelSubscriber.start()` as standalone, which also means every connection option — `credential_provider` for IAM / token auth included — reaches Channels, Lists and Streams through one client. BREAKING CHANGE: `faststream[redis]` now requires `redis>=8.0.0`. Closes #3009 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…tch auto-connect `_get_driver_info()` only existed to branch between `driver_info` and `lib_name`/`lib_version`; with the `redis>=8` floor it is a constant. `RedisClusterBroker.publish_batch` was the last publish path that connected implicitly — cluster `publish` and standalone `publish_batch` both require a started broker. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Python 3.11 is now the minimum: requires-python, classifiers, the CI matrix, the type checkers' target, ruff's target, the dev container and `just init` default move to 3.11. - `ExceptionGroup` and `tomllib` come from the standard library; the `exceptiongroup` shim, the `tomli` fallback and `INSTALL_TOML` are gone. - Typing features 3.11 already has are imported from `typing`; `typing_extensions` keeps only what is newer than 3.11. - `datetime.UTC`, builtin `TimeoutError`, and no PERF203 suppressions: `try` in a loop is zero-cost on 3.11. BREAKING CHANGE: the `(str, Enum)` classes (`AckPolicy`, `ExchangeType`, `QueueType`, `ContentTypes`, the confluent config enums and others) are `StrEnum` now, so `str()` and `format()` of a member return its value instead of `ClassName.MEMBER`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Pydantic 2.4 is the minimum now, declared as a direct dependency. - `_compat` loses `PYDANTIC_V2` and the v1 branch; the thin wrappers (`model_to_json`, `model_parse`, `model_schema`, `get_model_fields`, `model_to_jsonable`, `DEF_KEY`) give way to the pydantic v2 API at the call sites. `dump_json` stays: it serializes arbitrary data. - Specification models set `model_config` directly instead of switching on the pydantic version. - The `pydantic_v1`/`pydantic_v2` test marks, the v1 settings snippet and its docs tab are gone; README and the index page no longer suggest downgrading to v1. BREAKING CHANGE: Pydantic v1 is no longer supported; FastStream requires `pydantic>=2.4,<3`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
# Conflicts: # faststream/_internal/fastapi/_compat.py # faststream/_internal/fastapi/config.py # faststream/_internal/fastapi/get_dependant.py # faststream/_internal/fastapi/router.py # faststream/redis/configs/state.py # faststream/redis/publisher/producer.py # pyproject.toml # uv.lock
The second half of #3201: messages, responses and publish commands, routers with their `Route` and publisher objects, test clients and fakes, context, ASGI, the specification schema dataclasses and the telemetry/prometheus/acknowledgement middleware factories. The temporary `exclude-classes` group goes with it. `StreamMessage.__copy__` walks the slots, and `StreamMessage` declares `__weakref__` so a message can still key a WeakKeyDictionary. BREAKING CHANGE: these objects no longer accept attributes they do not declare; `message.custom = 1`, `Response(...).custom = 1` and `vars(message)` raise. A user's own subclass keeps a `__dict__`. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
On 3.10, `dataclass(slots=True)` re-emitted every inherited field into the subclass, so the chain under `BrokerConfig`, `EndpointConfig` and `SpecificationConfig` stayed unslotted. With 3.11 as the floor the 37 configs take `slots=True` and their `exclude-classes` entry goes. Below 3.13 a bare `super()` in a slotted dataclass still points at the class from before the rebuild, so the four calls in the Kafka (confluent) and MQTT broker configs name their class. `RabbitConfig` is gone: a mixin with its own fields cannot sit beside a slotted base, so `queue` and `exchange` are declared on the four Rabbit configs directly. BREAKING CHANGE: the configs no longer accept attributes they do not declare, and `faststream.rabbit.configs.RabbitConfig` no longer exists. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
The 1.0.0 release closes the 0.x cycle: everything that carried a deprecation warning is removed, the generated API Reference is dropped from the docs, and the version is bumped.
Removed: the FastAPI plugin
Deprecated since 0.7 with the warning "will be removed in 1.0.0". The integration lives in the separate
faststream_fastapipackage.faststream._internal.fastapiandfaststream.<broker>.fastapifor kafka, confluent, rabbit, nats, redis and mqtt, includingKafkaRouter,RabbitRouter,NatsRouter,RedisRouter,RedisSentinelRouter,MQTTRouterand theContext/Logger/*Message/*Brokerannotations exported next to them.getting-started/integrations/fastapi/, alldocs_src/integrations/fastapi/*snippets,examples/fastapi_integration/and everytest_fastapi.py(brokers, asyncapi, docs, examples).redis/sentinel.mdis gone withRedisSentinelRouter.faststream.specification.asyncapi.message.get_response_schema()existed only for FastAPI'sDependantobject and had no callers; removed.is_fastapi,dependency_builder,FastAPICompatible) is folded intoArgumentsTestcase;tests/mypy/*no longer type-check aFastAPIRouter.Removed:
StartAbleApplication.set_broker()Deprecated in favour of
add_broker()("will be removed in 0.8.0"). Useapp.add_broker(broker).Removed: the generated API Reference
The mkdocstrings-based "Reference - Code API" section and everything that produced it:
docs/create_api_docs.py,docs/docs/en/api/, thepublic_apisymlink, themkdocstringsplugin and hook inmkdocs.yml, themkdocstrings[python]andgriffedependencies.build-api-docs,build-fastandbuild-navigationcommands ofdocs/docs.pyand thelive --fullflag; thedocs-build-apijust recipe; the "Build API Reference" step ofdocs_build.yaml.docs/docs/navigation_template.txtis now a plain, trackeddocs/docs/SUMMARY.mdwith no{api}placeholders..gitignore,.pre-commit-config.yaml,labeler.ymland the how-to index pages are updated accordingly.Version
pyproject.toml: 0.7.5 → 1.0.0 (uv.lockregenerated).types-Deprecateddropped from the lint group: nothing imports thedeprecatedpackage.fastapistays in the testing group: the raw lifespan-based integration example underdocs_src/integrations/http_frameworks_integrations/fastapi.pyand its test still use it.Type of change
Checklist
just lintshows no errors)mypy faststream tests/mypyis clean)