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.
@@ -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 typing import Any
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
- return encode(data)
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
- def deserialize_msgpack_native(data: bytes, data_type=None):
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
- result = msgpack.decode(data, type=data_type)
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
- result = msgpack.decode(data, type=data_type)
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.32
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.2
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.0
21
+ Requires-Dist: msgpack~=1.1.1
22
22
  Requires-Dist: msgspec~=0.19.0
23
- Requires-Dist: pydantic[email]~=2.11.5
24
- Requires-Dist: pydantic-settings~=2.9.1
25
- Requires-Dist: python-jose==3.4.0
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=5SS_wQXcrThPmCWjI7k1a_cHWLz46Jzn3pit89SYJGY,2038
24
- python3_commons-0.8.32.dist-info/licenses/AUTHORS.rst,sha256=3R9JnfjfjH5RoPWOeqKFJgxVShSSfzQPIrEr1nxIo9Q,90
25
- python3_commons-0.8.32.dist-info/licenses/LICENSE,sha256=xxILuojHm4fKQOrMHPSslbyy6WuKAN2RiG74HbrYfzM,34575
26
- python3_commons-0.8.32.dist-info/METADATA,sha256=Rb556zpK-HLmuPCZ7uBMz5t1XU2ADUVUGcVcmzhZHY8,1126
27
- python3_commons-0.8.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
28
- python3_commons-0.8.32.dist-info/top_level.txt,sha256=lJI6sCBf68eUHzupCnn2dzG10lH3jJKTWM_hrN1cQ7M,16
29
- python3_commons-0.8.32.dist-info/RECORD,,
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,,