python3-commons 0.6.5__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.
Files changed (47) hide show
  1. {python3_commons-0.6.5/src/python3_commons.egg-info → python3_commons-0.6.7}/PKG-INFO +3 -3
  2. {python3_commons-0.6.5 → python3_commons-0.6.7}/pyproject.toml +3 -4
  3. {python3_commons-0.6.5 → python3_commons-0.6.7}/requirements.txt +2 -2
  4. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/serializers/msgspec.py +15 -1
  5. {python3_commons-0.6.5 → python3_commons-0.6.7/src/python3_commons.egg-info}/PKG-INFO +3 -3
  6. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons.egg-info/requires.txt +2 -2
  7. {python3_commons-0.6.5 → python3_commons-0.6.7}/tests/conftest.py +10 -2
  8. {python3_commons-0.6.5 → python3_commons-0.6.7}/tests/test_msgspec.py +10 -1
  9. {python3_commons-0.6.5 → python3_commons-0.6.7}/.coveragerc +0 -0
  10. {python3_commons-0.6.5 → python3_commons-0.6.7}/.github/workflows/python-publish.yaml +0 -0
  11. {python3_commons-0.6.5 → python3_commons-0.6.7}/.gitignore +0 -0
  12. {python3_commons-0.6.5 → python3_commons-0.6.7}/AUTHORS.rst +0 -0
  13. {python3_commons-0.6.5 → python3_commons-0.6.7}/CHANGELOG.rst +0 -0
  14. {python3_commons-0.6.5 → python3_commons-0.6.7}/LICENSE +0 -0
  15. {python3_commons-0.6.5 → python3_commons-0.6.7}/README.md +0 -0
  16. {python3_commons-0.6.5 → python3_commons-0.6.7}/README.rst +0 -0
  17. {python3_commons-0.6.5 → python3_commons-0.6.7}/docs/Makefile +0 -0
  18. {python3_commons-0.6.5 → python3_commons-0.6.7}/docs/_static/.gitignore +0 -0
  19. {python3_commons-0.6.5 → python3_commons-0.6.7}/docs/authors.rst +0 -0
  20. {python3_commons-0.6.5 → python3_commons-0.6.7}/docs/changelog.rst +0 -0
  21. {python3_commons-0.6.5 → python3_commons-0.6.7}/docs/conf.py +0 -0
  22. {python3_commons-0.6.5 → python3_commons-0.6.7}/docs/index.rst +0 -0
  23. {python3_commons-0.6.5 → python3_commons-0.6.7}/docs/license.rst +0 -0
  24. {python3_commons-0.6.5 → python3_commons-0.6.7}/requirements_dev.txt +0 -0
  25. {python3_commons-0.6.5 → python3_commons-0.6.7}/requirements_test.txt +0 -0
  26. {python3_commons-0.6.5 → python3_commons-0.6.7}/setup.cfg +0 -0
  27. {python3_commons-0.6.5 → python3_commons-0.6.7}/setup.py +0 -0
  28. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/__init__.py +0 -0
  29. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/api_client.py +0 -0
  30. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/audit.py +0 -0
  31. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/conf.py +0 -0
  32. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/db.py +0 -0
  33. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/fs.py +0 -0
  34. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/helpers.py +0 -0
  35. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/logging/__init__.py +0 -0
  36. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/logging/filters.py +0 -0
  37. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/logging/formatters.py +0 -0
  38. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/object_storage.py +0 -0
  39. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/serializers/__init__.py +0 -0
  40. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/serializers/json.py +0 -0
  41. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons/serializers/msgpack.py +0 -0
  42. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons.egg-info/SOURCES.txt +0 -0
  43. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons.egg-info/dependency_links.txt +0 -0
  44. {python3_commons-0.6.5 → python3_commons-0.6.7}/src/python3_commons.egg-info/top_level.txt +0 -0
  45. {python3_commons-0.6.5 → python3_commons-0.6.7}/tests/test_audit.py +0 -0
  46. {python3_commons-0.6.5 → python3_commons-0.6.7}/tests/test_helpers.py +0 -0
  47. {python3_commons-0.6.5 → python3_commons-0.6.7}/tests/test_msgpack.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: python3-commons
3
- Version: 0.6.5
3
+ Version: 0.6.7
4
4
  Summary: Re-usable Python3 code
5
5
  Author-email: Oleg Korsak <kamikaze.is.waiting.you@gmail.com>
6
6
  License: gpl-3
@@ -12,9 +12,9 @@ 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.11.11
15
+ Requires-Dist: aiohttp[speedups]==3.11.12
16
16
  Requires-Dist: asyncpg==0.30.0
17
- Requires-Dist: lxml==5.3.0
17
+ Requires-Dist: lxml==5.3.1
18
18
  Requires-Dist: minio==7.2.15
19
19
  Requires-Dist: msgpack==1.1.0
20
20
  Requires-Dist: msgspec==0.19.0
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "python3-commons"
7
- version = "0.6.5"
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"}
@@ -17,9 +17,9 @@ classifiers = [
17
17
  ]
18
18
  keywords = []
19
19
  dependencies = [
20
- "aiohttp[speedups]==3.11.11",
20
+ "aiohttp[speedups]==3.11.12",
21
21
  "asyncpg==0.30.0",
22
- "lxml==5.3.0",
22
+ "lxml==5.3.1",
23
23
  "minio==7.2.15",
24
24
  "msgpack==1.1.0",
25
25
  "msgspec==0.19.0",
@@ -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"]
@@ -1,6 +1,6 @@
1
- aiohttp[speedups]==3.11.11
1
+ aiohttp[speedups]==3.11.12
2
2
  asyncpg==0.30.0
3
- lxml==5.3.0
3
+ lxml==5.3.1
4
4
  minio==7.2.15
5
5
  msgpack==1.1.0
6
6
  msgspec==0.19.0
@@ -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,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: python3-commons
3
- Version: 0.6.5
3
+ Version: 0.6.7
4
4
  Summary: Re-usable Python3 code
5
5
  Author-email: Oleg Korsak <kamikaze.is.waiting.you@gmail.com>
6
6
  License: gpl-3
@@ -12,9 +12,9 @@ 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.11.11
15
+ Requires-Dist: aiohttp[speedups]==3.11.12
16
16
  Requires-Dist: asyncpg==0.30.0
17
- Requires-Dist: lxml==5.3.0
17
+ Requires-Dist: lxml==5.3.1
18
18
  Requires-Dist: minio==7.2.15
19
19
  Requires-Dist: msgpack==1.1.0
20
20
  Requires-Dist: msgspec==0.19.0
@@ -1,6 +1,6 @@
1
- aiohttp[speedups]==3.11.11
1
+ aiohttp[speedups]==3.11.12
2
2
  asyncpg==0.30.0
3
- lxml==5.3.0
3
+ lxml==5.3.1
4
4
  minio==7.2.15
5
5
  msgpack==1.1.0
6
6
  msgspec==0.19.0
@@ -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
 
@@ -17,10 +17,19 @@ def test_encode_decode_dict_to_msgpack(data_dict):
17
17
 
18
18
  def test_encode_decode_dataclass_to_msgpack(data_dataclass):
19
19
  binary_data = msgspec.serialize_msgpack(data_dataclass)
20
+
20
21
  assert msgspec.deserialize_msgpack(binary_data, data_type=data_dataclass.__class__) == data_dataclass
21
22
 
22
23
 
23
24
  def test_encode_decode_struct_to_msgpack(data_struct):
24
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__)
25
34
 
26
- assert msgspec.deserialize_msgpack(binary_data, data_type=data_struct.__class__) == data_struct
35
+ assert decoded_struct == data_struct
File without changes