Skip to content

Commit 0b35454

Browse files
committed
fix: taskiq 0.11 compat
1 parent ec29277 commit 0b35454

File tree

8 files changed

+39
-61
lines changed

8 files changed

+39
-61
lines changed

.github/workflows/release.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ jobs:
3939
run: python -m build
4040

4141
- name: Publish
42-
uses: pypa/gh-action-pypi-publish@v1.8.14
42+
uses: pypa/gh-action-pypi-publish@v1.9.0
4343
with:
4444
password: ${{ secrets.PYPI_TOKEN }}
4545

pyproject.toml

+7-2
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ classifiers = [
4242
dynamic = ["version"]
4343

4444
dependencies = [
45-
"taskiq>=0.10.0,<1.0.0",
45+
"taskiq>=0.11.0,<0.12.0",
4646
"faststream>=0.3.14,<0.6.0",
4747
]
4848

@@ -59,6 +59,10 @@ kafka = [
5959
"faststream[kafka]"
6060
]
6161

62+
confluent = [
63+
"faststream[confluent]"
64+
]
65+
6266
redis = [
6367
"faststream[redis]"
6468
]
@@ -68,6 +72,7 @@ test = [
6872
"taskiq-faststream[nats]",
6973
"taskiq-faststream[rabbit]",
7074
"taskiq-faststream[kafka]",
75+
"taskiq-faststream[confluent]",
7176
"taskiq-faststream[redis]",
7277

7378
"coverage[toml]>=7.2.0,<8.0.0",
@@ -77,7 +82,7 @@ test = [
7782
dev = [
7883
"taskiq-faststream[test]",
7984

80-
"mypy>=1.8.0,<1.10.0",
85+
"mypy>=1.8.0,<1.12.0",
8186
"ruff==0.4.1",
8287
"pre-commit >=3.6.0,<4.0.0",
8388
]

taskiq_faststream/__about__.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
"""FastStream - taskiq integration to schedule FastStream tasks."""
22

3-
__version__ = "0.1.8"
3+
__version__ = "0.2.0"

taskiq_faststream/broker.py

+9-15
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55
import anyio
66
from faststream.app import FastStream
77
from faststream.types import SendableMessage
8-
from taskiq import AsyncBroker, BrokerMessage
8+
from taskiq import AsyncBroker
99
from taskiq.acks import AckableMessage
1010
from taskiq.decor import AsyncTaskiqDecoratedTask
1111
from typing_extensions import TypeAlias, override
1212

13-
from taskiq_faststream.formatter import PatchedFormatter
14-
from taskiq_faststream.serializer import PatchedSerializer
13+
from taskiq_faststream.formatter import PatchedFormatter, PathcedMessage
1514
from taskiq_faststream.types import ScheduledTask
1615
from taskiq_faststream.utils import resolve_msg
1716

@@ -34,8 +33,7 @@ class BrokerWrapper(AsyncBroker):
3433

3534
def __init__(self, broker: Any) -> None:
3635
super().__init__()
37-
self.serializer = PatchedSerializer()
38-
self.formatter = PatchedFormatter(self)
36+
self.formatter = PatchedFormatter()
3937
self.broker = broker
4038

4139
async def startup(self) -> None:
@@ -48,7 +46,7 @@ async def shutdown(self) -> None:
4846
await self.broker.close()
4947
await super().shutdown()
5048

51-
async def kick(self, message: BrokerMessage) -> None:
49+
async def kick(self, message: PathcedMessage) -> None: # type: ignore[override]
5250
"""Call wrapped FastStream broker `publish` method."""
5351
await _broker_publish(self.broker, message)
5452

@@ -111,7 +109,7 @@ class AppWrapper(BrokerWrapper):
111109

112110
def __init__(self, app: FastStream) -> None:
113111
super(BrokerWrapper, self).__init__()
114-
self.serializer = PatchedSerializer()
112+
self.formatter = PatchedFormatter()
115113
self.app = app
116114

117115
async def startup(self) -> None:
@@ -124,7 +122,7 @@ async def shutdown(self) -> None:
124122
await self.app._shutdown() # noqa: SLF001
125123
await super(BrokerWrapper, self).shutdown()
126124

127-
async def kick(self, message: BrokerMessage) -> None:
125+
async def kick(self, message: PathcedMessage) -> None: # type: ignore[override]
128126
"""Call wrapped FastStream broker `publish` method."""
129127
assert ( # noqa: S101
130128
self.app.broker
@@ -134,11 +132,7 @@ async def kick(self, message: BrokerMessage) -> None:
134132

135133
async def _broker_publish(
136134
broker: Any,
137-
message: BrokerMessage,
135+
message: PathcedMessage,
138136
) -> None:
139-
labels = message.labels
140-
labels.pop("schedule", None)
141-
async for msg in resolve_msg(
142-
msg=labels.pop("message", message.message),
143-
):
144-
await broker.publish(msg, **labels)
137+
async for msg in resolve_msg(message.body):
138+
await broker.publish(msg, **message.labels)

taskiq_faststream/formatter.py

+19-22
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,38 @@
1+
from dataclasses import dataclass
12
from typing import Any, Dict
23

3-
from taskiq.abc.broker import AsyncBroker
44
from taskiq.abc.formatter import TaskiqFormatter
5-
from taskiq.compat import IS_PYDANTIC2, Model, model_dump, model_validate
6-
from taskiq.message import BrokerMessage, TaskiqMessage
5+
from taskiq.message import TaskiqMessage
76

8-
if IS_PYDANTIC2:
97

10-
def model_dump(instance: Model) -> Dict[str, Any]:
11-
"""Model dump."""
12-
return instance.model_dump()
8+
@dataclass
9+
class PathcedMessage:
10+
"""DTO to transfer data to `broker.kick`."""
1311

14-
else:
15-
16-
def model_dump(instance: Model) -> Dict[str, Any]:
17-
"""Model dump."""
18-
return instance.dict()
12+
body: Any
13+
labels: Dict[str, Any]
1914

2015

2116
class PatchedFormatter(TaskiqFormatter):
2217
"""Default taskiq formatter."""
2318

24-
def __init__(self, broker: AsyncBroker) -> None:
25-
self.broker = broker
26-
27-
def dumps(self, message: TaskiqMessage) -> BrokerMessage:
19+
def dumps( # type: ignore[override]
20+
self,
21+
message: TaskiqMessage,
22+
) -> PathcedMessage:
2823
"""
2924
Dumps taskiq message to some broker message format.
3025
3126
:param message: message to send.
3227
:return: Dumped message.
3328
"""
34-
return BrokerMessage(
35-
task_id=message.task_id,
36-
task_name=message.task_name,
37-
message=self.broker.serializer.dumpb(model_dump(message)),
38-
labels=message.labels,
29+
labels = message.labels
30+
labels.pop("schedule", None)
31+
labels.pop("schedule_id", None)
32+
33+
return PathcedMessage(
34+
body=labels.pop("message", None),
35+
labels=labels,
3936
)
4037

4138
def loads(self, message: bytes) -> TaskiqMessage:
@@ -45,4 +42,4 @@ def loads(self, message: bytes) -> TaskiqMessage:
4542
:param message: broker's message.
4643
:return: parsed taskiq message.
4744
"""
48-
return model_validate(TaskiqMessage, self.broker.serializer.loadb(message))
45+
raise NotImplementedError

taskiq_faststream/serializer.py

-17
This file was deleted.

tests/conftest.py

-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,5 @@ def mock() -> MagicMock:
2727

2828

2929
@pytest.fixture()
30-
@pytest.mark.anyio
3130
async def event() -> asyncio.Event:
3231
return asyncio.Event()

tests/testcase.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import asyncio
2-
from datetime import datetime
2+
import datetime
33
from typing import Any
44
from unittest.mock import MagicMock
55

@@ -44,7 +44,7 @@ async def handler(msg: str) -> None:
4444
**{self.subj_name: subject},
4545
schedule=[
4646
{
47-
"time": datetime.utcnow(),
47+
"time": datetime.datetime.now(datetime.UTC),
4848
},
4949
],
5050
)

0 commit comments

Comments
 (0)