python3-commons 0.6.6__tar.gz → 0.6.7__tar.gz
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-0.6.6/src/python3_commons.egg-info → python3_commons-0.6.7}/PKG-INFO +1 -1
- {python3_commons-0.6.6 → python3_commons-0.6.7}/pyproject.toml +1 -2
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/serializers/msgspec.py +15 -1
- {python3_commons-0.6.6 → python3_commons-0.6.7/src/python3_commons.egg-info}/PKG-INFO +1 -1
- {python3_commons-0.6.6 → python3_commons-0.6.7}/tests/conftest.py +10 -2
- {python3_commons-0.6.6 → python3_commons-0.6.7}/tests/test_msgspec.py +9 -7
- {python3_commons-0.6.6 → python3_commons-0.6.7}/.coveragerc +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/.github/workflows/python-publish.yaml +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/.gitignore +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/AUTHORS.rst +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/CHANGELOG.rst +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/LICENSE +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/README.md +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/README.rst +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/docs/Makefile +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/docs/_static/.gitignore +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/docs/authors.rst +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/docs/changelog.rst +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/docs/conf.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/docs/index.rst +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/docs/license.rst +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/requirements.txt +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/requirements_dev.txt +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/requirements_test.txt +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/setup.cfg +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/setup.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/__init__.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/api_client.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/audit.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/conf.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/db.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/fs.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/helpers.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/logging/__init__.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/logging/filters.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/logging/formatters.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/object_storage.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/serializers/__init__.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/serializers/json.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons/serializers/msgpack.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons.egg-info/SOURCES.txt +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons.egg-info/dependency_links.txt +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons.egg-info/requires.txt +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons.egg-info/top_level.txt +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/tests/test_audit.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/tests/test_helpers.py +0 -0
- {python3_commons-0.6.6 → python3_commons-0.6.7}/tests/test_msgpack.py +0 -0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "python3-commons"
|
7
|
-
version = "0.6.
|
7
|
+
version = "0.6.7"
|
8
8
|
description = "Re-usable Python3 code"
|
9
9
|
authors = [
|
10
10
|
{name = "Oleg Korsak", email = "kamikaze.is.waiting.you@gmail.com"}
|
@@ -48,7 +48,6 @@ exclude = ["tests"]
|
|
48
48
|
|
49
49
|
[tool.pytest.ini_options]
|
50
50
|
addopts = [
|
51
|
-
"--cov python3_commons --cov-report term-missing",
|
52
51
|
"--verbose"
|
53
52
|
]
|
54
53
|
norecursedirs = ["dist", "build", ".tox"]
|
@@ -7,7 +7,7 @@ from datetime import datetime, date
|
|
7
7
|
from typing import Any
|
8
8
|
|
9
9
|
from msgspec import msgpack
|
10
|
-
from msgspec.msgpack import Ext
|
10
|
+
from msgspec.msgpack import encode, Ext
|
11
11
|
|
12
12
|
from python3_commons.serializers.json import CustomJSONEncoder
|
13
13
|
|
@@ -42,6 +42,20 @@ def ext_hook(code: int, data: memoryview) -> Any:
|
|
42
42
|
|
43
43
|
MSGPACK_ENCODER = msgpack.Encoder(enc_hook=enc_hook)
|
44
44
|
MSGPACK_DECODER = msgpack.Decoder(ext_hook=ext_hook)
|
45
|
+
MSGPACK_DECODER_NATIVE = msgpack.Decoder()
|
46
|
+
|
47
|
+
|
48
|
+
def serialize_msgpack_native(data) -> bytes:
|
49
|
+
return encode(data)
|
50
|
+
|
51
|
+
|
52
|
+
def deserialize_msgpack_native(data: bytes, data_type=None):
|
53
|
+
if data_type:
|
54
|
+
result = msgpack.decode(data, type=data_type)
|
55
|
+
else:
|
56
|
+
result = MSGPACK_DECODER_NATIVE.decode(data)
|
57
|
+
|
58
|
+
return result
|
45
59
|
|
46
60
|
|
47
61
|
def serialize_msgpack(data) -> bytes:
|
@@ -1,6 +1,7 @@
|
|
1
1
|
from dataclasses import dataclass
|
2
2
|
from datetime import datetime, date
|
3
3
|
from decimal import Decimal
|
4
|
+
from uuid import UUID, uuid4
|
4
5
|
|
5
6
|
import msgspec
|
6
7
|
import pytest
|
@@ -40,6 +41,11 @@ def data_dataclass():
|
|
40
41
|
)
|
41
42
|
|
42
43
|
|
44
|
+
class SubStruc(msgspec.Struct):
|
45
|
+
uid: UUID
|
46
|
+
name: str
|
47
|
+
|
48
|
+
|
43
49
|
class TestStruct(msgspec.Struct):
|
44
50
|
a: int
|
45
51
|
b: str
|
@@ -47,17 +53,19 @@ class TestStruct(msgspec.Struct):
|
|
47
53
|
d: datetime
|
48
54
|
e: date
|
49
55
|
f: Decimal
|
56
|
+
sub: SubStruc
|
50
57
|
|
51
58
|
|
52
59
|
@pytest.fixture
|
53
|
-
def data_struct():
|
60
|
+
def data_struct() -> TestStruct:
|
54
61
|
return TestStruct(
|
55
62
|
a=1,
|
56
63
|
b='B',
|
57
64
|
c=None,
|
58
65
|
d=datetime(2023, 7, 25, 1, 2, 3),
|
59
66
|
e=date(2023, 7, 24),
|
60
|
-
f=Decimal('1.23')
|
67
|
+
f=Decimal('1.23'),
|
68
|
+
sub=SubStruc(uid=uuid4(), name='sub-struct')
|
61
69
|
)
|
62
70
|
|
63
71
|
|
@@ -1,12 +1,6 @@
|
|
1
|
-
from msgspec import Struct
|
2
|
-
|
3
1
|
from python3_commons.serializers import msgspec
|
4
2
|
|
5
3
|
|
6
|
-
class AStruct(Struct):
|
7
|
-
pass
|
8
|
-
|
9
|
-
|
10
4
|
def test_encode_decode_dict_to_msgpack(data_dict):
|
11
5
|
expected_result = {
|
12
6
|
'A': 1,
|
@@ -29,5 +23,13 @@ def test_encode_decode_dataclass_to_msgpack(data_dataclass):
|
|
29
23
|
|
30
24
|
def test_encode_decode_struct_to_msgpack(data_struct):
|
31
25
|
binary_data = msgspec.serialize_msgpack(data_struct)
|
26
|
+
decoded_struct = msgspec.deserialize_msgpack(binary_data, data_struct.__class__)
|
27
|
+
|
28
|
+
assert decoded_struct == data_struct
|
29
|
+
|
30
|
+
|
31
|
+
def test_encode_decode_struct_to_msgpack_native(data_struct):
|
32
|
+
binary_data = msgspec.serialize_msgpack_native(data_struct)
|
33
|
+
decoded_struct = msgspec.deserialize_msgpack_native(binary_data, data_struct.__class__)
|
32
34
|
|
33
|
-
assert
|
35
|
+
assert decoded_struct == data_struct
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{python3_commons-0.6.6 → python3_commons-0.6.7}/src/python3_commons.egg-info/dependency_links.txt
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|