python3-commons 0.8.32__py3-none-any.whl → 0.8.34__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- python3_commons/serializers/msgspec.py +27 -9
- {python3_commons-0.8.32.dist-info → python3_commons-0.8.34.dist-info}/METADATA +6 -6
- {python3_commons-0.8.32.dist-info → python3_commons-0.8.34.dist-info}/RECORD +7 -7
- {python3_commons-0.8.32.dist-info → python3_commons-0.8.34.dist-info}/WHEEL +0 -0
- {python3_commons-0.8.32.dist-info → python3_commons-0.8.34.dist-info}/licenses/AUTHORS.rst +0 -0
- {python3_commons-0.8.32.dist-info → python3_commons-0.8.34.dist-info}/licenses/LICENSE +0 -0
- {python3_commons-0.8.32.dist-info → python3_commons-0.8.34.dist-info}/top_level.txt +0 -0
@@ -2,16 +2,18 @@ import dataclasses
|
|
2
2
|
import json
|
3
3
|
import logging
|
4
4
|
import struct
|
5
|
-
from _decimal import Decimal
|
6
5
|
from datetime import date, datetime
|
7
|
-
from
|
6
|
+
from decimal import Decimal
|
7
|
+
from typing import Any, Type, TypeVar
|
8
8
|
|
9
9
|
from msgspec import msgpack
|
10
10
|
from msgspec.msgpack import Ext, encode
|
11
|
+
from pydantic import BaseModel
|
11
12
|
|
12
13
|
from python3_commons.serializers.json import CustomJSONEncoder
|
13
14
|
|
14
15
|
logger = logging.getLogger(__name__)
|
16
|
+
T = TypeVar('T')
|
15
17
|
|
16
18
|
|
17
19
|
def enc_hook(obj: Any) -> Any:
|
@@ -45,28 +47,44 @@ MSGPACK_DECODER = msgpack.Decoder(ext_hook=ext_hook)
|
|
45
47
|
MSGPACK_DECODER_NATIVE = msgpack.Decoder()
|
46
48
|
|
47
49
|
|
48
|
-
def serialize_msgpack_native(data) -> bytes:
|
49
|
-
|
50
|
+
def serialize_msgpack_native(data: Any) -> bytes:
|
51
|
+
if isinstance(data, BaseModel):
|
52
|
+
data = data.model_dump()
|
50
53
|
|
54
|
+
result = encode(data)
|
51
55
|
|
52
|
-
|
56
|
+
return result
|
57
|
+
|
58
|
+
|
59
|
+
def deserialize_msgpack_native(data: bytes, data_type: Type[T] | None = None) -> T | Any:
|
53
60
|
if data_type:
|
54
|
-
|
61
|
+
if issubclass(data_type, BaseModel):
|
62
|
+
decoded = MSGPACK_DECODER_NATIVE.decode(data)
|
63
|
+
result = data_type.model_validate(decoded)
|
64
|
+
else:
|
65
|
+
result = msgpack.decode(data, type=data_type)
|
55
66
|
else:
|
56
67
|
result = MSGPACK_DECODER_NATIVE.decode(data)
|
57
68
|
|
58
69
|
return result
|
59
70
|
|
60
71
|
|
61
|
-
def serialize_msgpack(data) -> bytes:
|
72
|
+
def serialize_msgpack(data: Any) -> bytes:
|
73
|
+
if isinstance(data, BaseModel):
|
74
|
+
data = data.model_dump()
|
75
|
+
|
62
76
|
result = MSGPACK_ENCODER.encode(data)
|
63
77
|
|
64
78
|
return result
|
65
79
|
|
66
80
|
|
67
|
-
def deserialize_msgpack(data: bytes, data_type=None):
|
81
|
+
def deserialize_msgpack(data: bytes, data_type: Type[T] | None = None) -> T | Any:
|
68
82
|
if data_type:
|
69
|
-
|
83
|
+
if issubclass(data_type, BaseModel):
|
84
|
+
decoded = MSGPACK_DECODER.decode(data)
|
85
|
+
result = data_type.model_validate(decoded)
|
86
|
+
else:
|
87
|
+
result = msgpack.decode(data, type=data_type)
|
70
88
|
else:
|
71
89
|
result = MSGPACK_DECODER.decode(data)
|
72
90
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: python3-commons
|
3
|
-
Version: 0.8.
|
3
|
+
Version: 0.8.34
|
4
4
|
Summary: Re-usable Python3 code
|
5
5
|
Author-email: Oleg Korsak <kamikaze.is.waiting.you@gmail.com>
|
6
6
|
License-Expression: GPL-3.0
|
@@ -12,17 +12,17 @@ Requires-Python: ==3.13.*
|
|
12
12
|
Description-Content-Type: text/x-rst
|
13
13
|
License-File: LICENSE
|
14
14
|
License-File: AUTHORS.rst
|
15
|
-
Requires-Dist: aiohttp[speedups]~=3.12.
|
15
|
+
Requires-Dist: aiohttp[speedups]~=3.12.13
|
16
16
|
Requires-Dist: asyncpg~=0.30.0
|
17
17
|
Requires-Dist: fastapi-users-db-sqlalchemy~=7.0.0
|
18
18
|
Requires-Dist: fastapi-users[sqlalchemy]~=14.0.1
|
19
19
|
Requires-Dist: lxml~=5.4.0
|
20
20
|
Requires-Dist: minio~=7.2.15
|
21
|
-
Requires-Dist: msgpack~=1.1.
|
21
|
+
Requires-Dist: msgpack~=1.1.1
|
22
22
|
Requires-Dist: msgspec~=0.19.0
|
23
|
-
Requires-Dist: pydantic[email]~=2.11.
|
24
|
-
Requires-Dist: pydantic-settings~=2.
|
25
|
-
Requires-Dist: python-jose==3.
|
23
|
+
Requires-Dist: pydantic[email]~=2.11.7
|
24
|
+
Requires-Dist: pydantic-settings~=2.10.0
|
25
|
+
Requires-Dist: python-jose==3.5.0
|
26
26
|
Requires-Dist: SQLAlchemy[asyncio]~=2.0.40
|
27
27
|
Requires-Dist: valkey[libvalkey]~=6.1.0
|
28
28
|
Requires-Dist: zeep~=4.3.1
|
@@ -20,10 +20,10 @@ python3_commons/log/formatters.py,sha256=p2AtZD4Axp3Em0e9gWzW8U_yOR5entD7xn7Edvc
|
|
20
20
|
python3_commons/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
21
21
|
python3_commons/serializers/json.py,sha256=91UaXLGKGj0yPyrnuMeNrkG2GuPUgcgAsmIokUgEwpU,808
|
22
22
|
python3_commons/serializers/msgpack.py,sha256=WrvaPE187shSK8zkH4UHHMimEZNMv9RaDSwsBE2HlCw,1269
|
23
|
-
python3_commons/serializers/msgspec.py,sha256=
|
24
|
-
python3_commons-0.8.
|
25
|
-
python3_commons-0.8.
|
26
|
-
python3_commons-0.8.
|
27
|
-
python3_commons-0.8.
|
28
|
-
python3_commons-0.8.
|
29
|
-
python3_commons-0.8.
|
23
|
+
python3_commons/serializers/msgspec.py,sha256=0AliXlEl5sewi0UENjI8St5ZScXE5DNRERKzqWKy2Ps,2674
|
24
|
+
python3_commons-0.8.34.dist-info/licenses/AUTHORS.rst,sha256=3R9JnfjfjH5RoPWOeqKFJgxVShSSfzQPIrEr1nxIo9Q,90
|
25
|
+
python3_commons-0.8.34.dist-info/licenses/LICENSE,sha256=xxILuojHm4fKQOrMHPSslbyy6WuKAN2RiG74HbrYfzM,34575
|
26
|
+
python3_commons-0.8.34.dist-info/METADATA,sha256=nu4_ODBlmDoP0-0UtvgZwLQEcxAP9zYJnbx4EoeYQoY,1128
|
27
|
+
python3_commons-0.8.34.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
28
|
+
python3_commons-0.8.34.dist-info/top_level.txt,sha256=lJI6sCBf68eUHzupCnn2dzG10lH3jJKTWM_hrN1cQ7M,16
|
29
|
+
python3_commons-0.8.34.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|