Releases: airtai/faststream
v0.5.4
What's Changed
- Update Release Notes for 0.5.3 by @faststream-release-notes-updater in #1400
- fix (#1415): raise SetupError if rpc and reply_to are using in TestCL… by @Lancetnik in #1419
- Chore/update deps2 by @Lancetnik in #1418
- refactor: correct security with kwarg params merging by @Lancetnik in #1417
- fix (#1414): correct Messag.ack error processing by @Lancetnik in #1420
Full Changelog: 0.5.3...0.5.4
0.5.3
What's Changed
- Update Release Notes for 0.5.2 by @faststream-release-notes-updater in #1382
- Fix/setup at broker connection instead of starting by @Lancetnik in #1385
- Tests/add path tests by @Lancetnik in #1388
- Fix/path with router prefix by @Lancetnik in #1395
- chore: update dependencies by @Lancetnik in #1396
- chore: bump version by @Lancetnik in #1397
- chore: polishing by @davorrunje in #1399
Full Changelog: 0.5.2...0.5.3
v0.5.2
What's Changed
Just a little bugfix patch. Fixes #1379 and #1376.
- Update Release Notes for 0.5.1 by @faststream-release-notes-updater in #1378
- Tests/fastapi background by @Lancetnik in #1380
- Fix/0.5.2 by @Lancetnik in #1381
Full Changelog: 0.5.1...0.5.2
v0.5.1
What's Changed
We already have some fixes related to RedisBroker
(#1375, #1376) and some new features for you:
- Now
broke.include_router(...)
allows to pass some arguments to setup router at including moment instead of creation
broker.include_router(
router,
prefix="test_",
dependencies=[Depends(...)],
middlewares=[BrokerMiddleware],
include_in_schema=False,
)
KafkaBroker().subscriber(...)
now consumesaiokafka.ConsumerRebalanceListener
object.
You can find more information about it in the official aiokafka doc
(close #1319)
broker = KafkaBroker()
broker.subscriber(..., listener=MyRebalancer())
pattern
option was added too, but it is still experimental and does not support Path
Path
feature perfomance was increased. Also,Path
is suitable for NATSPullSub
batch subscribtion as well now.
from faststream import NatsBroker, PullSub
broker = NastBroker()
@broker.subscriber(
"logs.{level}",
steam="test-stream",
pull_sub=PullSub(batch=True),
)
async def base_handler(
...,
level: str = Path(),
):
...
- Update Release Notes for 0.5.0 by @faststream-release-notes-updater in #1366
- chore: bump version by @Lancetnik in #1372
- feat: kafka listener, extended include_router by @Lancetnik in #1374
- Fix/1375 by @Lancetnik in #1377
Full Changelog: 0.5.0...0.5.1
0.5.0
What's Changed
This is the biggest change since the creation of FastStream. We have completely refactored the entire package, changing the object registration mechanism, message processing pipeline, and application lifecycle. However, you won't even notice it—we've preserved all public APIs from breaking changes. The only feature not compatible with the previous code is the new middleware.
New features:
-
await FastStream.stop()
method andStopApplication
exception to stop aFastStream
worker are added. -
broker.subscriber()
androuter.subscriber()
functions now return aSubscriber
object you can use later.
subscriber = broker.subscriber("test")
@subscriber(filter = lambda msg: msg.content_type == "application/json")
async def handler(msg: dict[str, Any]):
...
@subscriber()
async def handler(msg: dict[str, Any]):
...
This is the preferred syntax for filtering now (the old one will be removed in 0.6.0
)
- The
router.publisher()
function now returns the correctPublisher
object you can use later (after broker startup).
publisher = router.publisher("test")
@router.subscriber("in")
async def handler():
await publisher.publish("msg")
(Until 0.5.0
you could use it in this way with broker.publisher
only)
- A list of
middlewares
can be passed to abroker.publisher
as well:
broker = Broker(..., middlewares=())
@broker.subscriber(..., middlewares=())
@broker.publisher(..., middlewares=()) # new feature
async def handler():
...
-
Broker-level middlewares now affect all ways to publish a message, so you can encode application outgoing messages here.
-
⚠️ BREAKING CHANGE⚠️ : bothsubscriber
andpublisher
middlewares should be async context manager type
async def subscriber_middleware(call_next, msg):
return await call_next(msg)
async def publisher_middleware(call_next, msg, **kwargs):
return await call_next(msg, **kwargs)
@broker.subscriber(
"in",
middlewares=(subscriber_middleware,),
)
@broker.publisher(
"out",
middlewares=(publisher_middleware,),
)
async def handler(msg):
return msg
Such changes allow you two previously unavailable features:
- suppress any exceptions and pass fall-back message body to publishers, and
- patch any outgoing message headers and other parameters.
Without those features we could not implement Observability Middleware or any similar tool, so it is the job that just had to be done.
7. A better FastAPI compatibility: fastapi.BackgroundTasks
and response_class
subscriber option are supported.
-
All
.pyi
files are removed, and explicit docstrings and methods options are added. -
New subscribers can be registered in runtime (with an already-started broker):
subscriber = broker.subscriber("dynamic")
subscriber(handler_method)
...
broker.setup_subscriber(subscriber)
await subscriber.start()
...
await subscriber.close()
faststream[docs]
distribution is removed.
- Update Release Notes for 0.4.7 by @faststream-release-notes-updater in #1295
- 1129 - Create a publish command for the CLI by @MRLab12 in #1151
- Chore: packages upgraded by @davorrunje in #1306
- docs: fix typos by @omahs in #1309
- chore: update dependencies by @Lancetnik in #1323
- docs: fix misc by @Lancetnik in #1324
- docs (#1327): correct RMQ exhcanges behavior by @Lancetnik in #1328
- fix: typer 0.12 exclude by @Lancetnik in #1341
- 0.5.0 by @Lancetnik in #1326
- Generate docs and linter fixes by @davorrunje in #1348
- Fix types by @davorrunje in #1349
- chore: update dependencies by @Lancetnik in #1358
- feat: final middlewares by @Lancetnik in #1357
- Docs/0.5.0 features by @Lancetnik in #1360
New Contributors
Full Changelog: 0.4.7...0.5.0
v0.5.0rc2
What's Changed
This is the final API change before stable 0.5.0
release
In it, we stabilize the behavior of publishers & subscribers middlewares
async def subscriber_middleware(call_next, msg):
return await call_next(msg)
async def publisher_middleware(call_next, msg, **kwargs):
return await call_next(msg, **kwargs)
@broker.subscriber(
"in",
middlewares=(subscriber_middleware,),
)
@broker.publisher(
"out",
middlewares=(publisher_middleware,),
)
async def handler(msg):
return msg
Such changes allows you two features previously unavailable
- suppress any exceptions and pas fall-back message body to publishers
- patch any outgoing message headers and other parameters
Without these features we just can't impelement Observability Middleware or any similar tool, so it is the job to be done.
Now you are free to get access at any message processing stage and we are one step closer to the framework we would like to create!
- Update Release Notes for 0.5.0rc0 by @faststream-release-notes-updater in #1347
- Generate docs and linter fixes by @davorrunje in #1348
- Fix types by @davorrunje in #1349
- chore: update dependencies by @Lancetnik in #1358
- feat: final middlewares by @Lancetnik in #1357
Full Changelog: 0.5.0rc0...0.5.0rc2
v0.5.0rc0
What's Changed
This is the biggest change since the creation of FastStream. We have completely refactored the entire package, changing the object registration mechanism, message processing pipeline, and application lifecycle. However, you won't even notice it—we've preserved all public APIs from breaking changes. The only feature not compatible with the previous code is the new middleware.
This is still an RC (Release Candidate) for you to test before the stable release. You can manually install it in your project:
pip install faststream==0.5.0rc0
We look forward to your feedback!
New features:
-
await FastStream.stop()
method andStopApplication
exception to stop aFastStream
worker are added. -
broker.subscriber()
androuter.subscriber()
functions now return aSubscriber
object you can use later.
subscriber = broker.subscriber("test")
@subscriber(filter = lambda msg: msg.content_type == "application/json")
async def handler(msg: dict[str, Any]):
...
@subscriber()
async def handler(msg: dict[str, Any]):
...
This is the preferred syntax for filtering now (the old one will be removed in 0.6.0
)
- The
router.publisher()
function now returns the correctPublisher
object you can use later (after broker startup).
publisher = router.publisher("test")
@router.subscriber("in")
async def handler():
await publisher.publish("msg")
(Until 0.5.0
you could use it in this way with broker.publisher
only)
- A list of
middlewares
can be passed to abroker.publisher
as well:
broker = Broker(..., middlewares=())
@broker.subscriber(..., middlewares=())
@broker.publisher(..., middlewares=()) # new feature
async def handler():
...
-
Broker-level middlewares now affect all ways to publish a message, so you can encode application outgoing messages here.
-
⚠️ BREAKING CHANGE⚠️ : bothsubscriber
andpublisher
middlewares should be async context manager type
from contextlib import asynccontextmanager
@asynccontextmanager
async def subscriber_middleware(msg_body):
yield msg_body
@asynccontextmanager
async def publisher_middleware(
msg_to_publish,
**publish_arguments,
):
yield msg_to_publish
@broker.subscriber("in", middlewares=(subscriber_middleware,))
@broker.publisher("out", middlewares=(publisher_middleware,))
async def handler():
...
-
A better FastAPI compatibility:
fastapi.BackgroundTasks
andresponse_class
subscriber option are supported. -
All
.pyi
files are removed, and explicit docstrings and methods options are added. -
New subscribers can be registered in runtime (with an already-started broker):
subscriber = broker.subscriber("dynamic")
subscriber(handler_method)
...
broker.setup_subscriber(subscriber)
await subscriber.start()
...
await subscriber.close()
faststream[docs]
distribution is removed.
- Update Release Notes for 0.4.7 by @faststream-release-notes-updater in #1295
- 1129 - Create a publish command for the CLI by @MRLab12 in #1151
- Chore: packages upgraded by @davorrunje in #1306
- docs: fix typos by @omahs in #1309
- chore: update dependencies by @Lancetnik in #1323
- docs: fix misc by @Lancetnik in #1324
- docs (#1327): correct RMQ exhcanges behavior by @Lancetnik in #1328
- fix: typer 0.12 exclude by @Lancetnik in #1341
- 0.5.0 by @Lancetnik in #1326
- close #1103
- close #840
- fix #690
- fix #1206
- fix #1227
- close #568
- close #1303
- close #1287
- feat #607
New Contributors
Full Changelog: 0.4.7...0.5.0rc0
v0.4.7
What's Changed
- Update Release Notes for 0.4.6 by @faststream-release-notes-updater in #1286
- fix (#1263): correct nested descriminator msg type AsyncAPI schema by @Lancetnik in #1288
- docs: add
apply_types
warning notice to subscription/index.md by @Lancetnik in #1291 - chore: fixed nats-py version by @Lancetnik in #1294
Full Changelog: 0.4.6...0.4.7
v0.4.6
What's Changed
- Add poll in confluent producer to fix BufferError by @kumaranvpl in #1277
- Cover confluent asyncapi tests by @kumaranvpl in #1279
- chore: bump package versions by @davorrunje in #1285
Full Changelog: 0.4.5...0.4.6
v0.4.5
What's Changed
- Update Release Notes for 0.4.4 by @faststream-release-notes-updater in #1260
- Removed unused pytest dependecy from redis/schemas.py by @ashambalev in #1261
- chore: bumped package versions by @davorrunje in #1270
- fix (#1263): correct AsyncAPI schema in descriminator case by @Lancetnik in #1272
New Contributors
- @ashambalev made their first contribution in #1261
Full Changelog: 0.4.4...0.4.5