Skip to content

Commit 5059895

Browse files
committed
feat: add ability to specify ensure_ascii for JSONSerializer
1 parent fc33b02 commit 5059895

File tree

3 files changed

+29
-8
lines changed

3 files changed

+29
-8
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ line-length = 88
189189
"S311", # Standard pseudo-random generators are not suitable for security/cryptographic purposes
190190
"D101", # Missing docstring in public class
191191
"D102", # Missing docstring in public method
192+
"PLR2004", # Magic value
192193
]
193194
"docs/examples/*" = [
194195
"D103", # Missing docstring in public function

taskiq/serializers/json_serializer.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,13 @@
88
class JSONSerializer(TaskiqSerializer):
99
"""Default taskiq serializer."""
1010

11-
def __init__(self, default: Callable[..., None] | None = None) -> None:
11+
def __init__(
12+
self,
13+
default: Callable[..., None] | None = None,
14+
ensure_ascii: bool = True,
15+
) -> None:
1216
self.default = default
17+
self.ensure_ascii = ensure_ascii
1318

1419
def dumpb(self, value: Any) -> bytes:
1520
"""
@@ -21,6 +26,7 @@ def dumpb(self, value: Any) -> bytes:
2126
return dumps(
2227
value,
2328
default=self.default,
29+
ensure_ascii=self.ensure_ascii,
2430
).encode()
2531

2632
def loadb(self, value: bytes) -> Any:
Lines changed: 21 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,33 @@
1+
import pytest
2+
13
from taskiq.serializers.json_serializer import JSONSerializer
24

35

4-
async def test_json_dumpb() -> None:
6+
def test_json_dumpb() -> None:
57
serizalizer = JSONSerializer()
6-
assert serizalizer.dumpb(None) == b"null" # noqa: PLR2004
7-
assert serizalizer.dumpb(1) == b"1" # noqa: PLR2004
8-
assert serizalizer.dumpb("a") == b'"a"' # noqa: PLR2004
9-
assert serizalizer.dumpb(["a"]) == b'["a"]' # noqa: PLR2004
10-
assert serizalizer.dumpb({"a": "b"}) == b'{"a": "b"}' # noqa: PLR2004
8+
assert serizalizer.dumpb(None) == b"null"
9+
assert serizalizer.dumpb(1) == b"1"
10+
assert serizalizer.dumpb("a") == b'"a"'
11+
assert serizalizer.dumpb(["a"]) == b'["a"]'
12+
assert serizalizer.dumpb({"a": "b"}) == b'{"a": "b"}'
1113

1214

13-
async def test_json_loadb() -> None:
15+
def test_json_loadb() -> None:
1416
serizalizer = JSONSerializer()
1517
assert serizalizer.loadb(b"null") is None
1618
assert serizalizer.loadb(b"1") == 1
1719
assert serizalizer.loadb(b'"a"') == "a"
1820
assert serizalizer.loadb(b'["a"]') == ["a"]
1921
assert serizalizer.loadb(b'{"a": "b"}') == {"a": "b"}
22+
23+
24+
@pytest.mark.parametrize(
25+
("ensure_ascii", "result"),
26+
[
27+
(True, b'"\\u043f\\u0440\\u0438\\u0432\\u0435\\u0442"'),
28+
(False, b'"\xd0\xbf\xd1\x80\xd0\xb8\xd0\xb2\xd0\xb5\xd1\x82"'),
29+
],
30+
)
31+
def test_json_dumpb_with_ensure_ascii(ensure_ascii: bool, result: bytes) -> None:
32+
serizalizer = JSONSerializer(ensure_ascii=ensure_ascii)
33+
assert serizalizer.dumpb("привет") == result

0 commit comments

Comments
 (0)