python3-commons 0.15.21__tar.gz → 0.16.0__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.15.21 → python3_commons-0.16.0}/PKG-INFO +3 -3
- {python3_commons-0.15.21 → python3_commons-0.16.0}/pyproject.toml +2 -2
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/audit.py +1 -3
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/object_storage.py +33 -15
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons.egg-info/PKG-INFO +3 -3
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons.egg-info/requires.txt +2 -2
- {python3_commons-0.15.21 → python3_commons-0.16.0}/uv.lock +16 -16
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.coveragerc +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.devcontainer/Dockerfile +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.devcontainer/devcontainer.json +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.devcontainer/docker-compose.yml +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.env_template +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.github/workflows/checks.yml +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.github/workflows/python-publish.yaml +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.github/workflows/release-on-tag-push.yml +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.gitignore +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.pre-commit-config.yaml +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/.python-version +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/AUTHORS.rst +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/CHANGELOG.rst +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/LICENSE +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/README.md +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/README.rst +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/docs/Makefile +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/docs/_static/.gitignore +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/docs/authors.rst +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/docs/changelog.rst +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/docs/conf.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/docs/index.rst +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/docs/license.rst +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/setup.cfg +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/__init__.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/api_client.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/async_functools.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/auth.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/cache.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/conf.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/db/__init__.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/db/helpers.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/db/models/__init__.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/db/models/auth.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/db/models/common.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/db/models/rbac.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/db/models/users.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/exceptions.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/fs.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/generators.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/helpers.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/log/__init__.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/log/filters.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/log/formatters.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/permissions.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/serializers/__init__.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/serializers/common.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/serializers/json.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/serializers/msgpack.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/serializers/msgspec.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons.egg-info/SOURCES.txt +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons.egg-info/dependency_links.txt +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons.egg-info/top_level.txt +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/__init__.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/integration/__init__.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/integration/test_cache.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/integration/test_osc.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/unit/__init__.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/unit/conftest.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/unit/log/__init__.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/unit/log/test_formatters.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/unit/test_async_functools.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/unit/test_audit.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/unit/test_helpers.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/unit/test_msgpack.py +0 -0
- {python3_commons-0.15.21 → python3_commons-0.16.0}/tests/unit/test_msgspec.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python3-commons
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.0
|
|
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,13 +12,13 @@ Requires-Python: <3.15.0,>=3.14.4
|
|
|
12
12
|
Description-Content-Type: text/x-rst
|
|
13
13
|
License-File: LICENSE
|
|
14
14
|
License-File: AUTHORS.rst
|
|
15
|
-
Requires-Dist: aiobotocore~=3.
|
|
15
|
+
Requires-Dist: aiobotocore~=3.5.0
|
|
16
16
|
Requires-Dist: aiohttp[speedups]<3.15.0,>=3.13.5
|
|
17
17
|
Requires-Dist: asyncpg~=0.31.0
|
|
18
18
|
Requires-Dist: lxml~=6.1.0
|
|
19
19
|
Requires-Dist: msgpack~=1.1.2
|
|
20
20
|
Requires-Dist: msgspec==0.21.1
|
|
21
|
-
Requires-Dist: object-storage-client==0.0.
|
|
21
|
+
Requires-Dist: object-storage-client==0.0.22
|
|
22
22
|
Requires-Dist: pydantic-settings~=2.14.0
|
|
23
23
|
Requires-Dist: SQLAlchemy[asyncio]~=2.0.49
|
|
24
24
|
Requires-Dist: valkey[libvalkey]~=6.1.1
|
|
@@ -18,13 +18,13 @@ classifiers = [
|
|
|
18
18
|
keywords = []
|
|
19
19
|
requires-python = ">=3.14.4,<3.15.0"
|
|
20
20
|
dependencies = [
|
|
21
|
-
"aiobotocore~=3.
|
|
21
|
+
"aiobotocore~=3.5.0",
|
|
22
22
|
"aiohttp[speedups]>=3.13.5,<3.15.0",
|
|
23
23
|
"asyncpg~=0.31.0",
|
|
24
24
|
"lxml~=6.1.0",
|
|
25
25
|
"msgpack~=1.1.2",
|
|
26
26
|
"msgspec==0.21.1",
|
|
27
|
-
"object-storage-client==0.0.
|
|
27
|
+
"object-storage-client==0.0.22",
|
|
28
28
|
"pydantic-settings~=2.14.0",
|
|
29
29
|
"SQLAlchemy[asyncio]~=2.0.49",
|
|
30
30
|
"valkey[libvalkey]~=6.1.1",
|
|
@@ -20,9 +20,7 @@ logger = logging.getLogger(__name__)
|
|
|
20
20
|
async def write_audit_data(settings: S3Settings, key: str, data: bytes) -> None:
|
|
21
21
|
if settings.aws_secret_access_key:
|
|
22
22
|
try:
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
await object_storage.put_object(settings.s3_bucket, absolute_path, io.BytesIO(data), len(data))
|
|
23
|
+
await object_storage.put_object(settings.s3_bucket, f'audit/{key}', io.BytesIO(data), len(data))
|
|
26
24
|
except Exception:
|
|
27
25
|
logger.exception('Failed storing object in storage.')
|
|
28
26
|
else:
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
3
|
import logging
|
|
4
|
+
import threading
|
|
4
5
|
from contextlib import asynccontextmanager
|
|
5
6
|
from typing import TYPE_CHECKING
|
|
6
7
|
|
|
7
8
|
import aiobotocore.session
|
|
8
9
|
from botocore.config import Config
|
|
10
|
+
from object_storage_client import ObjectStorageClient
|
|
9
11
|
|
|
10
12
|
if TYPE_CHECKING:
|
|
11
13
|
import io
|
|
@@ -19,6 +21,22 @@ from python3_commons.conf import S3Settings, s3_settings
|
|
|
19
21
|
from python3_commons.helpers import SingletonMeta
|
|
20
22
|
|
|
21
23
|
logger = logging.getLogger(__name__)
|
|
24
|
+
_CLIENT: ObjectStorageClient | None = None
|
|
25
|
+
_CLIENT_LOCK = threading.Lock()
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def get_client() -> ObjectStorageClient:
|
|
29
|
+
global _CLIENT # noqa: PLW0603
|
|
30
|
+
|
|
31
|
+
if not _CLIENT:
|
|
32
|
+
with _CLIENT_LOCK:
|
|
33
|
+
if not _CLIENT:
|
|
34
|
+
client = ObjectStorageClient()
|
|
35
|
+
_CLIENT = client
|
|
36
|
+
else:
|
|
37
|
+
client = _CLIENT
|
|
38
|
+
|
|
39
|
+
return client
|
|
22
40
|
|
|
23
41
|
|
|
24
42
|
class ObjectStorage(metaclass=SingletonMeta):
|
|
@@ -58,21 +76,21 @@ def get_absolute_path(path: str) -> str:
|
|
|
58
76
|
|
|
59
77
|
|
|
60
78
|
async def put_object(bucket_name: str, path: str, data: io.BytesIO, length: int, part_size: int = 0) -> str | None:
|
|
61
|
-
|
|
79
|
+
try:
|
|
80
|
+
client = get_client()
|
|
81
|
+
data.seek(0)
|
|
82
|
+
absolute_path = get_absolute_path(path)
|
|
83
|
+
url = f's3://{bucket_name}/{absolute_path}'
|
|
62
84
|
|
|
63
|
-
|
|
64
|
-
try:
|
|
65
|
-
data.seek(0)
|
|
85
|
+
await client.put_object(url, data.getvalue())
|
|
66
86
|
|
|
67
|
-
|
|
87
|
+
logger.debug('Stored object into object storage: %s:%s', bucket_name, path)
|
|
88
|
+
except Exception as e:
|
|
89
|
+
logger.exception('Failed to put object to object storage: %s:%s', bucket_name, path, exc_info=e)
|
|
68
90
|
|
|
69
|
-
|
|
70
|
-
except Exception as e:
|
|
71
|
-
logger.exception('Failed to put object to object storage: %s:%s', bucket_name, path, exc_info=e)
|
|
72
|
-
|
|
73
|
-
raise
|
|
91
|
+
raise
|
|
74
92
|
|
|
75
|
-
|
|
93
|
+
return f's3://{bucket_name}/{path}'
|
|
76
94
|
|
|
77
95
|
|
|
78
96
|
@asynccontextmanager
|
|
@@ -117,7 +135,7 @@ async def list_objects(bucket_name: str, prefix: str, *, recursive: bool = True)
|
|
|
117
135
|
|
|
118
136
|
|
|
119
137
|
async def get_object_streams(
|
|
120
|
-
|
|
138
|
+
bucket_name: str, path: str, *, recursive: bool = True
|
|
121
139
|
) -> AsyncGenerator[tuple[str, datetime, StreamingBody]]:
|
|
122
140
|
async for obj in list_objects(bucket_name, path, recursive=recursive):
|
|
123
141
|
object_name = obj['Key']
|
|
@@ -128,7 +146,7 @@ async def get_object_streams(
|
|
|
128
146
|
|
|
129
147
|
|
|
130
148
|
async def get_objects(
|
|
131
|
-
|
|
149
|
+
bucket_name: str, path: str, *, recursive: bool = True
|
|
132
150
|
) -> AsyncGenerator[tuple[str, datetime, bytes]]:
|
|
133
151
|
async for object_name, last_modified, stream in get_object_streams(bucket_name, path, recursive=recursive):
|
|
134
152
|
data = await stream.read()
|
|
@@ -150,7 +168,7 @@ async def remove_object(bucket_name: str, object_name: str) -> None:
|
|
|
150
168
|
|
|
151
169
|
|
|
152
170
|
async def remove_objects(
|
|
153
|
-
|
|
171
|
+
bucket_name: str, prefix: str | None = None, object_names: Iterable[str] | None = None
|
|
154
172
|
) -> Sequence[Mapping] | None:
|
|
155
173
|
storage = ObjectStorage(s3_settings)
|
|
156
174
|
|
|
@@ -173,7 +191,7 @@ async def remove_objects(
|
|
|
173
191
|
chunk_size = 1000
|
|
174
192
|
|
|
175
193
|
for i in range(0, len(objects_to_delete), chunk_size):
|
|
176
|
-
chunk = objects_to_delete[i
|
|
194
|
+
chunk = objects_to_delete[i: i + chunk_size]
|
|
177
195
|
|
|
178
196
|
response = await s3_client.delete_objects(Bucket=bucket_name, Delete={'Objects': chunk})
|
|
179
197
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python3-commons
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.0
|
|
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,13 +12,13 @@ Requires-Python: <3.15.0,>=3.14.4
|
|
|
12
12
|
Description-Content-Type: text/x-rst
|
|
13
13
|
License-File: LICENSE
|
|
14
14
|
License-File: AUTHORS.rst
|
|
15
|
-
Requires-Dist: aiobotocore~=3.
|
|
15
|
+
Requires-Dist: aiobotocore~=3.5.0
|
|
16
16
|
Requires-Dist: aiohttp[speedups]<3.15.0,>=3.13.5
|
|
17
17
|
Requires-Dist: asyncpg~=0.31.0
|
|
18
18
|
Requires-Dist: lxml~=6.1.0
|
|
19
19
|
Requires-Dist: msgpack~=1.1.2
|
|
20
20
|
Requires-Dist: msgspec==0.21.1
|
|
21
|
-
Requires-Dist: object-storage-client==0.0.
|
|
21
|
+
Requires-Dist: object-storage-client==0.0.22
|
|
22
22
|
Requires-Dist: pydantic-settings~=2.14.0
|
|
23
23
|
Requires-Dist: SQLAlchemy[asyncio]~=2.0.49
|
|
24
24
|
Requires-Dist: valkey[libvalkey]~=6.1.1
|
{python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons.egg-info/requires.txt
RENAMED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
aiobotocore~=3.
|
|
1
|
+
aiobotocore~=3.5.0
|
|
2
2
|
aiohttp[speedups]<3.15.0,>=3.13.5
|
|
3
3
|
asyncpg~=0.31.0
|
|
4
4
|
lxml~=6.1.0
|
|
5
5
|
msgpack~=1.1.2
|
|
6
6
|
msgspec==0.21.1
|
|
7
|
-
object-storage-client==0.0.
|
|
7
|
+
object-storage-client==0.0.22
|
|
8
8
|
pydantic-settings~=2.14.0
|
|
9
9
|
SQLAlchemy[asyncio]~=2.0.49
|
|
10
10
|
valkey[libvalkey]~=6.1.1
|
|
@@ -4,7 +4,7 @@ requires-python = ">=3.14.4, <3.15.0"
|
|
|
4
4
|
|
|
5
5
|
[[package]]
|
|
6
6
|
name = "aiobotocore"
|
|
7
|
-
version = "3.
|
|
7
|
+
version = "3.5.0"
|
|
8
8
|
source = { registry = "https://pypi.org/simple" }
|
|
9
9
|
dependencies = [
|
|
10
10
|
{ name = "aiohttp" },
|
|
@@ -15,9 +15,9 @@ dependencies = [
|
|
|
15
15
|
{ name = "python-dateutil" },
|
|
16
16
|
{ name = "wrapt" },
|
|
17
17
|
]
|
|
18
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
18
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e6/89/9533b377e9412013cc43a539d81bc5f8feeb4b6830643821ad612f78b09b/aiobotocore-3.5.0.tar.gz", hash = "sha256:d45d1c4659ad0e48b694a5aa4ff18829100386f7de96c8d146ec7757a6f12918", size = 123061, upload-time = "2026-04-21T07:25:26.993Z" }
|
|
19
19
|
wheels = [
|
|
20
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
20
|
+
{ url = "https://files.pythonhosted.org/packages/2d/05/6eeeadef45c24630af0ceae4d038b883e9a394786300529286ba8cc1e62d/aiobotocore-3.5.0-py3-none-any.whl", hash = "sha256:49ce35bb8b96b85d3251c2cbbb2ed7a028dc0cb0d0d0801f9ccca1ccd0d41ded", size = 88281, upload-time = "2026-04-21T07:25:25.258Z" },
|
|
21
21
|
]
|
|
22
22
|
|
|
23
23
|
[[package]]
|
|
@@ -164,16 +164,16 @@ wheels = [
|
|
|
164
164
|
|
|
165
165
|
[[package]]
|
|
166
166
|
name = "botocore"
|
|
167
|
-
version = "1.42.
|
|
167
|
+
version = "1.42.91"
|
|
168
168
|
source = { registry = "https://pypi.org/simple" }
|
|
169
169
|
dependencies = [
|
|
170
170
|
{ name = "jmespath" },
|
|
171
171
|
{ name = "python-dateutil" },
|
|
172
172
|
{ name = "urllib3" },
|
|
173
173
|
]
|
|
174
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
174
|
+
sdist = { url = "https://files.pythonhosted.org/packages/21/bc/a4b7c46471c2e789ad8c4c7acfd7f302fdb481d93ff870f441249b924ae6/botocore-1.42.91.tar.gz", hash = "sha256:d252e27bc454afdbf5ed3dc617aa423f2c855c081e98b7963093399483ecc698", size = 15213010, upload-time = "2026-04-17T19:30:50.793Z" }
|
|
175
175
|
wheels = [
|
|
176
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
176
|
+
{ url = "https://files.pythonhosted.org/packages/b1/fc/24cc0a47c824f13933e210e9ad034b4fba22f7185b8d904c0fbf5a3b2be8/botocore-1.42.91-py3-none-any.whl", hash = "sha256:7a28c3cc6bfab5724ad18899d52402b776a0de7d87fa20c3c5270bcaaf199ce8", size = 14897344, upload-time = "2026-04-17T19:30:44.245Z" },
|
|
177
177
|
]
|
|
178
178
|
|
|
179
179
|
[[package]]
|
|
@@ -478,11 +478,11 @@ wheels = [
|
|
|
478
478
|
|
|
479
479
|
[[package]]
|
|
480
480
|
name = "idna"
|
|
481
|
-
version = "3.
|
|
481
|
+
version = "3.12"
|
|
482
482
|
source = { registry = "https://pypi.org/simple" }
|
|
483
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
483
|
+
sdist = { url = "https://files.pythonhosted.org/packages/22/12/2948fbe5513d062169bd91f7d7b1cd97bc8894f32946b71fa39f6e63ca0c/idna-3.12.tar.gz", hash = "sha256:724e9952cc9e2bd7550ea784adb098d837ab5267ef67a1ab9cf7846bdbdd8254", size = 194350, upload-time = "2026-04-21T13:32:48.916Z" }
|
|
484
484
|
wheels = [
|
|
485
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
485
|
+
{ url = "https://files.pythonhosted.org/packages/53/b2/acc33950394b3becb2b664741a0c0889c7ef9f9ffbfa8d47eddb53a50abd/idna-3.12-py3-none-any.whl", hash = "sha256:60ffaa1858fac94c9c124728c24fcde8160f3fb4a7f79aa8cdd33a9d1af60a67", size = 68634, upload-time = "2026-04-21T13:32:47.403Z" },
|
|
486
486
|
]
|
|
487
487
|
|
|
488
488
|
[[package]]
|
|
@@ -668,13 +668,13 @@ wheels = [
|
|
|
668
668
|
|
|
669
669
|
[[package]]
|
|
670
670
|
name = "object-storage-client"
|
|
671
|
-
version = "0.0.
|
|
671
|
+
version = "0.0.22"
|
|
672
672
|
source = { registry = "https://pypi.org/simple" }
|
|
673
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
673
|
+
sdist = { url = "https://files.pythonhosted.org/packages/1a/49/9af56487b380cef1132c1aa718702095a0ab3ddb3e82bb4eab9593dde316/object_storage_client-0.0.22.tar.gz", hash = "sha256:00535617e1f50c0dab066e7dc6bdc9d1690e989febcfaacc27737988dd5a4101", size = 40622, upload-time = "2026-04-21T12:36:41.782Z" }
|
|
674
674
|
wheels = [
|
|
675
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
676
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
677
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
675
|
+
{ url = "https://files.pythonhosted.org/packages/e3/0b/c9a4dc7ae9bc8f67877190d97c0efb94a0a9e7aef6423feaa45d93232215/object_storage_client-0.0.22-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:db7d843f11e1d281ba16533bc573343ec9e0a8d2cf779cd43464df6adca0a5a8", size = 1922610, upload-time = "2026-04-21T12:36:40.278Z" },
|
|
676
|
+
{ url = "https://files.pythonhosted.org/packages/7e/f3/3e34cc1e70e9f48ad0be5d7af1771d864a3ee618c07aad43978e2d3a131c/object_storage_client-0.0.22-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4d7c92c2ca19f9d734be99162df7dc573535e7022e5a9b5c1dce121a102a85ae", size = 2114290, upload-time = "2026-04-21T12:36:37.82Z" },
|
|
677
|
+
{ url = "https://files.pythonhosted.org/packages/ee/73/4af6bf9dc086e9c0a69988d2258d2f6f5d02d00ef891d9df3d6d08c3355a/object_storage_client-0.0.22-cp314-cp314-win_amd64.whl", hash = "sha256:df863a2a3f8f1c77d06bdc547d674b321878dca7cb7db94606b763cb9cc7e508", size = 2095414, upload-time = "2026-04-21T12:36:38.966Z" },
|
|
678
678
|
]
|
|
679
679
|
|
|
680
680
|
[[package]]
|
|
@@ -1024,13 +1024,13 @@ testing = [
|
|
|
1024
1024
|
|
|
1025
1025
|
[package.metadata]
|
|
1026
1026
|
requires-dist = [
|
|
1027
|
-
{ name = "aiobotocore", specifier = "~=3.
|
|
1027
|
+
{ name = "aiobotocore", specifier = "~=3.5.0" },
|
|
1028
1028
|
{ name = "aiohttp", extras = ["speedups"], specifier = ">=3.13.5,<3.15.0" },
|
|
1029
1029
|
{ name = "asyncpg", specifier = "~=0.31.0" },
|
|
1030
1030
|
{ name = "lxml", specifier = "~=6.1.0" },
|
|
1031
1031
|
{ name = "msgpack", specifier = "~=1.1.2" },
|
|
1032
1032
|
{ name = "msgspec", specifier = "==0.21.1" },
|
|
1033
|
-
{ name = "object-storage-client", specifier = "==0.0.
|
|
1033
|
+
{ name = "object-storage-client", specifier = "==0.0.22" },
|
|
1034
1034
|
{ name = "pydantic-settings", specifier = "~=2.14.0" },
|
|
1035
1035
|
{ name = "sqlalchemy", extras = ["asyncio"], specifier = "~=2.0.49" },
|
|
1036
1036
|
{ name = "valkey", extras = ["libvalkey"], specifier = "~=6.1.1" },
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{python3_commons-0.15.21 → python3_commons-0.16.0}/.github/workflows/release-on-tag-push.yml
RENAMED
|
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.15.21 → python3_commons-0.16.0}/src/python3_commons/db/models/__init__.py
RENAMED
|
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.15.21 → python3_commons-0.16.0}/src/python3_commons/serializers/__init__.py
RENAMED
|
File without changes
|
{python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/serializers/common.py
RENAMED
|
File without changes
|
|
File without changes
|
{python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/serializers/msgpack.py
RENAMED
|
File without changes
|
{python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons/serializers/msgspec.py
RENAMED
|
File without changes
|
|
File without changes
|
{python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{python3_commons-0.15.21 → python3_commons-0.16.0}/src/python3_commons.egg-info/top_level.txt
RENAMED
|
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
|